单片机密码锁毕业设计.docx
《单片机密码锁毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机密码锁毕业设计.docx(23页珍藏版)》请在冰豆网上搜索。
单片机密码锁毕业设计
目录
第1章绪论…………………………………………………………………3
1.1背景及意义…………………………………………………3
1.2电子密码锁的设计要求……………………………………3
1.3关键辞……………………………………………………3
第2章硬件电路……………………………………………………………4
2.1MIC-51简介…………………………………………………………4
2.2单片机控制方框图…………………………………………………4
2.3开锁机构……………………………………………………………5
2.4键电路设计……………………………………………6
2.5显示电路设计………………………………………………7
2.6AT24C01掉电存储单元的设计…………………………………7
2.7密码锁的电源电路设计……………………………………………8
2.8设计的总体电路图……………………………………………………9
第3章软件设计…………………………………………………9
结论…………………………………………………………………………18
参考文献……………………………………………………………………19
致谢……………………………………………………………………………19
单片机控制的电子密码锁设计
第一章:
绪论
1.1背景及意义
随着科技的发展,安全已成为人们关注的焦点之一,于是各种安全产品相继问世(如指纹防盗!
红外防盗!
GPS等)"虽然这类产品安全性高,但因其生产成本高,携带安装使用不方便,在一定程度上限制了这类产品的普及和推广"本文介绍的是一种基于单片机智能锁的硬件和软件设计及实现方法"这种电路设计具有按键有效提示,输入错误提示,控制开锁电平,控制报警电路,修改密码等多种功能"可在意外泄密的情况下随时修改密码"4位数密码共一万组不重复组合,保密性强,灵活性高,特别适用于家庭,办公室,学生宿舍及宾馆等公开场所。
1.2电子密码锁的设计要求
1.上锁过程
1
2
3
4
5
6
7
8
9
上锁
0
开锁
按数字键,数字会从显示器的最右端开始显示,然后依次向左移位。
若要更改密码可按“开锁”键清除原有密码,再重新输入新密码。
本设计为的密码为4位,输入的多余数字本电路不予理会,不会显示在显示器上。
当密码输入正确后按下“上锁”键,就可将门锁上,同时将密码存储在电路中并清除显示器的显示。
2.开锁过程
按数字键输入密码,密码在显示器上从右到左依次显示,4位密码输入正确后按下“开锁”甲,密码锁被打开并清除电路中所存储的密码,显示器也被清零。
当输入密码有误时,可按“上锁”键清除所输入的数字,内部存的秘密不会丢失,再重新输入正确的密码按“开锁”键即可。
注:
当输入错误的密码超过3次后,电路会发出报警信号。
图1-2键盘显示平面图
为防止大家忘记密码,本电路还设计了一个万用密码,无论以前的密码是什么,只要输入万用密码按“开锁”键即可开锁并清除原有密码。
1.3关键辞
MCS-51,AT24C02,矩阵键盘,UPS电路,AT24C02掉电存储,串口显示电路,报警控制
电路等
二、硬件电路的设计
2.1MIC-51的简介
设计本课题时构思了一种是用以MIC-51为核心的单片机控制方案。
MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在,MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、89C51等)
89S51相对于89C51增加的新功能包括:
--新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
--ISP在线编程功能,在改写单片机存储器内的程序时不用把芯片从工作环境中剥离。
--最高工作频率为33MHz,就是说S51具有更高工作频率,从而具有了更快的计算速度。
--具有双工UART串行通道。
--内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
--双数据指示器。
--电源关闭标识。
--全新的加密算法,程序的保密性加强,这样就可以有效的保护知识产权不被侵犯。
--兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、89C51等等早期MCS-51兼容产品。
在89S51上一样可以照常运行,这就是所谓的向下兼容。
89S51就是在这样的背景下取代89C51的,所以本设计也选用了89S51
2.2单片机控制方框图
采用AT89S51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。
其原理如图2-2所示。
89s51
单片机
矩阵
键盘
控制
输入错误锁定键盘
延时报警控制电路
串口显示电路
图2-2单片机控制方案
2.3开锁机构
通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。
其原理如图2-3所示。
图2-3密码锁开锁机构示意图
当用户输入的密码正确时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。
其实际电路如图2-4所示。
电路由驱动和开锁两级组成。
由D5、R1、T10组成驱动电路,其中T10可以选择普通的小功率三极管如9014、9018都可以满足要求。
D5是开锁指示灯;由D6、C24、T11组成开锁。
其中D6、C24是为了消除电磁锁可能产生的反向高电压以及可能产生的电磁干扰。
T11可选用中功率的三极管如8050,电磁锁的选用要视情况而定,但是吸合力要足够且有一定的余量。
注:
在设计中,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。
图2-4密码锁开锁机构电路图
2.4按键电路设计
由于设计要求使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图2-5所示。
图2-5行列式键盘原理电路图
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
按键的操作面板如图2-6所示。
共计数字键10个,功能键2个。
图2-6按键操作面板示意图
10个数字键用来输入密码,另外2个功能键分别是:
开锁和上锁。
上锁和开锁的过程在1-2中已经详细介绍,在此不再说。
。
面板上还有一个蜂鸣器,其中一个功能是用来指示操作的按键是否在成功的按下;另外一个功能是当用户输入密码错误的次数超过了3次,鸣笛以示报警。
2.5显示电路设计
本系统设计的显示电路为了节约单片机的接口资源而采用串行显示的方式,只使用单片机的两个串行口,就可以完成单片机的显示功能,显示电路的电路原理图如图2-7所示。
电路设定:
当程序检测在5分钟内没有按键操作的时候,就关闭显示。
这个功能使用程序来实现的,一旦没有按键动作就启动一个定时器,检测在5分钟内没有按键动作的时候,启动一个程序,关闭显示,这样可以达到节省电能的目的。
从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。
移位寄存器74HC164还兼作数码管的驱动,插头1(header1)接电源,插头2(header2)接数据和脉冲输出端。
电路中的三个整流管D1~D3的作用是降低数码管的工作电压,增加其使用寿命。
图2-7显示器原理图
2.6AT24C01掉电存储单元的设计
掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。
AT24C01是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
其电路如图2-8所示。
2-8掉电存储电路原理图
图中R8、R10是上拉电阻,其作用是减少AT24C01的静态功耗,由于AT24C01的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。
每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。
2.7密码锁的电源电路设计
图2-7稳压模块7805电路
本着节省原料的原则,选择的是7805稳压模块做为本电路的电源,JP1接变压器的次级绕组,由于电路耗电很少,所以变压器选择普通小容量的10V的就可以,然后经四个二极管(D1-D4)整流,再经电解电容C滤波,得到较平稳的直流电,为了让电流更平稳更可靠,后面加入了整流模块7805,电路相当简单,1脚是电源的进线,2脚是公共端,3脚就是5V直流电的输出了,C2和C3是滤除高频率的杂波干扰的,本电路简单明了,应用比较广泛。
2.8设计总体电路图
图2-4总体电路图
三、程序设计
程序开始,伪指令设置程序中所用到寄存器和数据
ORG0000H
MTDDATA3FH
SLADATA3EH
NUMBYTDATA3DH
MRDDATA30H
AJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H:
设置栈指针
接收数据寄存器清零
MOV40H,#00H
MOV41H,#00H
MOV42H,#00H
MOV43H,#00H
MOV44H,#00H
MOV45H,#00H
MOV46H,#00H
MOV47H,#00H
CLR20H:
功能键标志
CLR21H:
复位键标志
调读密码程序,读出的密码送到30H到33H
REDAMOVMTD,#00H
MOVSLA,#0A0H
MOVNUMBYT,#1
LCALLWRNBYT
MOVSLA,#0A1H
MOVNUMBYT,#07H
LCALLRDNBYT
显示P作为等待标志
CCD:
MOVA,#11111110B
MOVP1,A
MOVA,#0CH
MOVDPTR,#7FFFH
MOVX@DPTR,A
循环调用键扫描子程序
START:
NOP;程序开始
LCALLCH_KEY;检查键盘
AJMPSTART;返回
CH_KEY:
LCALLKS;检查有没有按键按下
JNZLK1
AJMPCH_KEY
LK1:
LCALLT12MS
ACALLKS
JNZLK2
RET
LK2:
NOP
LCALLSBIE;按键识别子程序
MOVBUFF,A;送缓冲区以识别是数字键还是功能键?
LCALLCH_KF;判断按键功能。
JBFLAG1,KEY_FUN;标志为1,则为功能键
数字按键输入并且存放到缓冲区内等待比较
KEY_DIG:
NOP;设一标志,辨别输入是否满
;SETBTR0
INCTIMERS;输入数字的位数
MOVA,TIMERS
CLRC
SUBBA,#01H
JNZPS_2
MOVPS1,BUFF;依照顺序存放密码
AJMPNEXT
PS_2:
MOVA,TIMERS
SUBBA,#02H
CLRC
JNZPS_3
MOVPS2,BUFF
AJMPNEXT
PS_3:
MOVA,TIMERS
CLRC
SUBBA,#03H
JNZPS_4
MOVPS3,BUFF
AJMPNEXT
PS_4:
MOVA,TIMERS
CLRC
SUBBA,#04
JNZPS_5
MOVPS4,BUFF
AJMPNEXT
PS_5:
MOVA,TIMERS
CLRC
SUBBA,#05
JNZPS_6
MOVPS5,BUFF
AJMPNEXT
PS_6:
MOVA,TIMERS
CLRC
SUBBA,#06H
JNZCH_KEY
MOVPS6,BUFF
NEXT:
LCALLXSC
MOVR7,TIMERS;比较输入的次数。
CJNER7,#06H,FULL
FULL:
JCNEXT9
SETBBUF_FULL
MOVTIMERS,#06H
CLRL3
NOP
CLRP2.1
LCALLT100MSD
SETBP2.1
NOP
AJMPCH_KEY
NEXT9:
CLRP2.1;密码输入一位,鸣叫一声。
CLRL3
LCALLT100MSD;延时100ms
SETBL3
SETBP2.1
AJMPCH_KEY
功能按键比较并且跳转
KEY_FUN:
CLRFLAG1
CLRC
MOVA,BUFF
SUBBA,#03H;按键CL跳转
JNZEN_C
AJMPCL
EN_C:
CLRC
MOVA,BUFF;按键EN跳转
SUBBA,#00H
JNZF1_C
AJMPEN
EXIT8:
NOP
LJMPCH_KEY
开门子程序
CL:
NOP
SETBL3
MOVBUFF,#00H;消密码缓冲
MOVTIMERS,#00H
LCALLINITPS;消除AT缓冲,加调电存储后一定要加上
LCALLXSC
LCALLBP
LCALLBP
LCALLT100MSD
LCALLBP
CLRFLAG1
AJMPCH_KEY
FU4:
NOP
LCALLBP
LCALLT100MSD
LCALLBP
LCALLT100MSD
LCALLBP
LCALLT100MSD
LCALLBP
LCALLT100MSD
LCALLBP
CLRFLAG1
AJMPCH_KEY
FU3:
NOP
LCALLBP
LCALLT100MSD
LCALLBP
LCALLKILLXS;关闭显示
CLRFLAG1
AJMPCH_KEY
FU1:
NOP
LCALLXSC
JBF_F1,NEXT_F1
CLRL1
LCALLBP
SETBF_F1
AJMPCH_KEY
NEXT_F1:
SETBL1
LCALLBP
CLRF_F1
;LCALLCH_STATE;查看现在的状态以防误按
;SETBTR1;报警限制暂时不开
;INCF_F1
CLRFLAG1
AJMPCH_KEY
FU2:
NOP
JBF_F2,NEXT_F2
CLRL2
LCALLBP
SETBF_F2
AJMPCH_KEY
NEXT_F2:
SETBL2
LCALLBP
CLRF_F2
CLRFLAG1
AJMPCH_KEY
初始化显示缓冲区以及其他缓冲区
INITPS:
PUSHACC
PUSHPSW
MOVR7,#06H
MOVR1,#PS1
MOVA,#00H
INIT_PS:
MOV@R1,A
DECR1
DJNZR7,INIT_PS
POPPSW
POPACC
NOP
RET
INITAT:
PUSHACC
PUSHPSW
MOVR7,#06H
MOVR1,#AT1
MOVA,#00H
INIT_AT:
MOV@R1,A
DECR1
DJNZR7,INIT_AT
MOVTIMERS,#00H;密码输入的次数清零。
POPPSW
POPACC
RET
按键识别子程序
SBIE:
MOVR2,#0EFH;识别按键子程序,数据送A保存,课本P146页。
MOVR4,#00H
LK4:
MOVA,R2
MOVP0,A
NOP
MOVA,P0
JBACC.0,LONE
MOVA,#00H
AJMPLKP
LONE:
JBACC.1,LTWO
MOVA,#08H
AJMPLKP
LTWO:
JBACC.2,LTHR
MOVA,#10H
AJMPLKP
LTHR:
JBACC.3,NEXTT;判断下一列
MOVA,#18H
LKP:
ADDA,R4
PUSHACC
LK3:
ACALLKS
JNZLK3
POPACC
RET
NEXTT:
INCR4
MOVA,R2
JNBACC.7,KND
RLA
MOVR2,A
AJMPLK4
KND:
AJMPCH_KEY
KS:
MOVP0,#0FH
NOP
MOVA,P0
CPLA
ANLA,#0FH
NOP
RET
CH_KF:
CLRC
MOVA,BUFF;判断是数字按键还是功能按键,为1表示功能键
CJNEA,#17H,KY
KY:
JCSET_CH;假若是数字按键则标志置为0
SETBFLAG1;假若是功能按键则标志置为1
AJMPCHKE_END
SET_CH:
CLRC
MOVA,BUFF
SUBBA,#00H
JNZEN_CH
SETBFLAG1
AJMPCH_END
EN_CH:
MOVA,BUFF
SUBBA,#03H
JNZDIG
SETBFLAG1
AJMPCH_END
DIG:
CLRFLAG1
CH_END:
NOP
CHKE_END:
RET
T12MS:
MOVR7,#18H
TM1:
MOVR6,#0FFH
TM66:
DJNZR6,TM66
DJNZR7,TM1
RET
检验密码正误
C_PSW:
PUSHPSW
PUSHACC
MOVR2,#06H
MOVR0,#PS1
MOVR1,#AT1
C_P:
CLRC
MOVA,@R0
SUBBA,@R1
JNZRETURN
DECR0
DECR1
DJNZR2,C_P
NOP
SETBPSW_F
AJMPEXIT7
RETURN:
CLRPSW_F
EXIT7:
NOP
POPACC
POPPSW
RET
锁定,报警程序
LOCK_1M:
MOVR4,#3CH;锁定1分钟
M1_LOOP:
LCALLSEC
DJNZR4,M1_LOOP
NOP
RET
WARN2S:
PUSHPSW
PUSHACC
MOVR5,#14H;调用20次BP,报警2s
WARN:
LCALLBP
DJNZR5,WARN
NOP
POPACC
POPPSW
NOP
RET
BP:
CLRSPK;报警程序
LCALLT100MSD
SETBSPK
NOP
RET
显示子程序
DISPLAY:
MOVR4,#05H
DIS1:
MOVR0,#45H
MOVR5,#11011111B
LD6:
MOVA,R5
MOVP1,A
MOVA,@R0
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVDPTR,#7FFFH
MOVX@DPTR,A
LCALLDL1
MOVA,#0FFH
MOVDPTR,#7FFFH
MOVX@DPTR,A
DECR0
MOVA,R5
JNBACC.0,ID1
RRA
MOVR5,A
LIMPLD6
LD1:
DJNZR4,DIS1
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H
DB0FFH
密码输入错误的提示
XSD:
PUSHACC
PUSHPSW
MOVSBUF,#98H
JNBTI,$
CLRTI
MOVSBUF,#79H
JNBTI,$
CLRTI
MOVSBUF,#11H
JNBTI,$
CLRTI
MOVSBUF,#79H
JNBTI,$
CLRTI
MOVSBUF,#79H
JNBTI,$
CLRTI
MOVSBUF,#38H
JNBTI,$
CLRTI
POPPSW
POPACC
RET
24C01读写程序
AT_RADE:
PUSHPSW
PUSHACC
MOVR0,#AT1;CPU首地址
MOVR6,#06H;8字节
MOVR5,#08H;8位
MOVR7,#00H;24C01首地址
LCALLREAD;读数据
NOP
NOP
POPACC
POPPSW
RET
AT_WR:
PUSHPSW
PUSHACC
MOVR0,#PS1;CPURAM首地址
MOVR6,#06H;8字节
MOVR5,#08H;8BIT
MOVR7,#00H;24C01RAM首地址
LCALLWRT;先写进
NOP
NOP
POPACC
POPPSW
RET
延时子程序
DL1:
MOVR7,#03H
DL:
MOVR6,#0FFH
DL6:
DJNZR6,DL6
DJNZR7,DL