多功能密码锁.docx
《多功能密码锁.docx》由会员分享,可在线阅读,更多相关《多功能密码锁.docx(33页珍藏版)》请在冰点文库上搜索。
多功能密码锁
微机原理课程设计
院系:
班级:
姓名:
起迄日期:
指导老师:
题目:
多功能密码锁
前言
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品的普及和推广。
鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。
目录
一、系统方案选择1
(一)设计内容和要求1
(二)系统基本方案1
1、主控模块的选择1
2、并行I/O扩展模块的选择1
3、显示模块的设计1
4、键盘接口的设计2
5、系统各模块的最终方案2
二、系统硬件设计与实现3
(一)系统硬件概述3
(二)主要单元电路设计3
(三)并行I/O扩展模块电路设计3
(四)LED数码管显示模块设计4
(五)键盘接口模块的设计4
三、系统软件设计6
(一)主程序的设计6
(二)子程序的设计6
1、键盘扫描子程序的设计6
2、按键处理子程序7
3、声音报警子程序9
4、左移子程序10
5、右移子程序10
6、数数码管显示子程序10
四、系统测试12
(一)测试工具12
(二)指标测试12
1、硬件测试12
2、软件测试12
(三)测试结果分析与结论12
功能实现12
五、设计总结12
参考文献13
附录1系统电路图13
附录2系统主要元件清单14
附录3系统程序清单14
附录4系统使用说明书20
1、系统方案选择
(一)设计要求
设计数字密码锁,即将密码保存再程序存储器中,上电后,系统进入初始化状态,表示要求用户输入密码,密码由程序中的TABLE表设定,若用户输入密码正确,则显示输入密码正确信号,并进行相应的动作,在本系统中,是使LED灯点亮;若用户输入密码错误,显示密码输入错误的信号,并使蜂鸣器发声,同时系统回到输入状态。
(二)基本方案
1、主控芯片的选择
89C51芯片内部有ROM,且片内ROM全部采用FlashROM,它能于3V的超低压工作,与MCS-51系列单片机完全兼容,但是其不具备ISP在线编程技术,而且内存也只有4KB。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—flashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2、并行I/O扩展模块的选择
MCS-51单片机系统如果不作任何扩展,P0~P3口可作I/O接口使用。
但是在很多数据采集场合都需要扩展外部数据存储器,而且P3口也要优先考虑第二功能的使用,这样,真正可以用作I/O接口的仅仅为P1或P2、P3的部分未用引脚。
在一个实际应用系统中,需要很多I/O接口作为对外控制引脚,如控制键盘,显示电路等,这样就需要用到I/O扩展的问题
在本系统中,选用74LS245作为并行I/O扩展模块
3、显示模块的设计
LCD数码管液晶显示,有单片机驱动.它主要用来显示大量数据、文字、图形,能够显示的位数多,显示得清晰多样、美观,但同时液晶显示器的程序编写复杂,价格昂贵,从而降低了整个系统的性价比,故不采用此种方案。
LED数码管静态显示,电路容易理解且驱动的程序简单,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模块。
采用LED数码管动态扫描显示,价格低廉,不仅减少了对I/O口的浪费,而且能够同时驱动多个数码管。
其驱动程序容易编写和理解。
经过以上方案的比较,排除了前两种方案之后,最后选择方案三:
LED数码管动态扫描显示。
7SEG-MPX8-CC八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
本系统选用7SEG-MPX8-CC
4、键盘接口的设计
键盘接口电路是嵌入式系统设计中与用户进行人机交互的重要界面,实现向单片机输入命令的功能。
键盘由一组敞开的键盘开关组成,每个按键被赋予一个代码,称为键码。
键盘分为编码式键盘和非编码式键盘,由于编码式键盘硬件实现复杂,本系统采用实现简单的编码式矩阵键盘。
本系统使用4×3矩阵式键盘,是比较常见的键盘排列方式,键盘由0~9的数字键和1个后退键、1个确认键构成。
5、系统各模块的最终方案
系统框架如图片1所示。
图片1
2、系统硬件设计与实现
(一)系统硬件概述
密码锁系统主要由六个部分构成,其核心是AT89C51单片机,其核心是AT89C51单片机,通过AT89C51进行控制各个模块,并行I/O扩展模块从P0口传输数据到AT89C51单片机中,并行I/O扩展模块接数码管ABCDEFG和DP口,P2口传输数据到八段数码管的1~8位。
利用AT89C51单片机编程实现数码管的动态显示,显示模块是连接一片八段数码管以动态扫描方式同时驱动八个数码管来显示当前的数字;P3口用来接矩阵式键盘,单片机P1口接上一个发光二极管和一个蜂鸣器,如果密码正确,则单片机驱动二极管发亮显示,如果密码错误,则通过蜂鸣器来报警。
(一)主要单元电路设计
AT89C51单片机是双列直插40引脚的集成电路芯片,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
MCS-51单片机第8引脚接蜂鸣器,第40引脚为电源端,第31引脚需要接高电位使单片机选用内部程序存储器;第18、19脚之间接上一个12MHz的晶振为单片机提供时钟信号;第9脚为复位脚,当其接高电位时,单片机停止当前工作并恢复到初始状态。
电路连接如图片2所示。
图片2
单片机引脚介绍
P0:
P0口是一个漏极开路的8位双向I/O口。
在访问片外存储器时P0分时提供低8位地址线和8位双向数据线。
当不接片外存储器或不扩展I/O口时,P0可作为一个通用输入/输出口。
P0口作输入口使用时,应先向口锁存器写“1”,P0口作输出口时,需接上拉电阻。
P1:
P1口是一个内部提供上拉电阻的8位双向I/O口,因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”。
P2:
P2口也是一个内部提供上拉电阻的8位双向I/O口,在访问片外存储器时,输出高8位地址。
P3:
P3口除了一般的准双向通用I/O口外,还有第二功能。
VCC:
+5V电源
VSS:
接地
ALE:
地址锁存器控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。
此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
/PSEN:
外部程序存储器读选通信号。
在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。
/EA:
访问程序存储控制信号。
当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;当/EA信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用来完成单片机的复位初始化操作。
XTAL1和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
(二)并行I/O扩展模块电路设计
利用74LS245实现并行I/O接口扩展是通过分时选通74LS245来实现的,利用如下指令实现对P1口的分时复用。
74LS245为三态输出的八组缓冲器和总线驱动器,8位输入有八个输入引脚(A0~A7),输出端同样由八个引脚(B0~B7)构成。
74LS245芯片使用双向数据缓冲器,所以输入输出方向是双向的,即不但能用于对外部设备的读数据操作也能进行写操作。
在本系统中,只需要使用其中的输出功能。
电路连接如图片3所示。
图片3
(三)LED数码管显示模块设计
单片机P0口连接74LS245,由于74LS245的输出是低电位有效,因此采用共阳极的数码管7SEG-MPX8-CC。
通过单片机P0口输出的信号经过74LS245译码后输出给数码管显示。
由于采用的是动态方式因此我们使用的是P2口来组合选择通道,通过编程来实现数码管的动态显示。
电路连接图如图片4所示。
图片4
(四)键盘接口模块的设计
键盘接口电路是嵌入式系统设计中与用户进行人机交互的重要界面,实现向单片机输入命令的功能。
键盘由一组敞开的键盘开关组成,每个按键被赋予一个代码,称为键码。
键盘分为编码式键盘和非编码式键盘,由于编码式键盘硬件实现复杂,本系统采用实现简单的编码式矩阵键盘。
本系统使用4×3矩阵式键盘,是比较常见的键盘排列方式,键盘由0~9的数字键和1个后退键、1个确认键构成。
键盘电路图如图片5所示。
图片5
2、系统软件设计
采用软件对系统进行编程比起硬件实现其功能要简单、快捷很多。
本系统的软件设计采用了汇编语言编程。
软件程序分为两部分:
第一部分为主程序;第二部分为子程序。
其中子程序又分键盘扫描程序子程序、按键处理子程序、声音报警子程序、左移子程序、右移子程序、和数码管显示子程序等。
主程序中通过判断当前时间来跳转到相应的子程序来实现系统的各模块的功能。
下面就各个部分进行逐一说明。
(一)主程序的设计
主程序开始时先初始化,初始化8位数码管的段码、初始密码,空间初始化,存储区清零,然后开始运行数码显示子程序,程序进出等待状态。
主程序的流程图如图片6所示。
图片6
(二)子程序的设计
1、键盘扫描子程序的设计
键盘使用矩阵式键盘,由行和列组成,CPU对所有按键进行监视,一旦发现按键被按下,CPU经过程序加以识别,并转入相应键的处理程序,实现该键功能。
键盘设置在行列交叉点上,行列分别连接到按键开关的两端。
行线通过上拉电阻接到Vcc上。
平时按键无动作时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。
键盘扫描子程序如下:
LSCAN:
MOVP3,#0F0H;扫描行码
L1:
JNBP3.0,L2
LCALLDLY_S
JNBP3.0,L2
MOVLINE,#00H
LJMPRSCAN
L2:
JNBP3.1,L3
LCALLDLY_S
JNBP3.1,L3
MOVLINE,#01H
LJMPRSCAN
L3:
JNBP3.2,L4
LCALLDLY_S
JNBP3.2,L4
MOVLINE,#02H
LJMPRSCAN
L4:
JNBP3.3,A0
LCALLDLY_S
JNBP3.3,A0
MOVLINE,#03H
RSCAN:
MOVP3,#0FH;扫描列码
C1:
JNBP3.4,C2
MOVROW,#00H
LJMPCALCU
C2:
JNBP3.5,C3
MOVROW,#01H
LJMPCALCU
C3:
JNBP3.6,C1
MOVROW,#02H
CALCU:
MOVA,LINE;计算键值
MOVB,#03H
MULAB
ADDA,ROW
MOVVAL,A
2、按键处理子程序
以下为按键处理程序,对不同的按键作出响应:
CJNEA,#0AH,J1;是否为"CLR"键
MOVR1,KEY_CNT
CJNER1,#00H,J2
LCALLALARM_1
LJMPSTART
J2:
LCALLSHIFTR
DECKEY_CNT
W00:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W01
LJMPA0
W01:
MOVA,P3
CJNEA,#0F0H,W02
LJMPA0
W02:
SJMPW00
J1:
MOVA,VAL
CJNEA,#0BH,J3;判断是否为"ENTER"键
MOVR1,KEY_CNT
CJNER1,#06H,J4
MOVA,WORD_1;比较密码
CJNEA,3EH,J5
MOVA,WORD_2
CJNEA,3FH,J5
MOVA,WORD_3
CJNEA,40H,J5
MOVA,WORD_4
CJNEA,41H,J5
MOVA,WORD_5
CJNEA,42H,J5
MOVA,WORD_6
CJNEA,43H,J5
CLRP1.0
LCALLDLY_L
LJMPFINI
J5:
LCALLALARM_2
LJMPSTART
J4:
LCALLALARM_1
LJMPSTART
J3:
INCKEY_CNT;按下数字键
MOVA,KEY_CNT
CJNEA,#07H,K1
LCALLALARM_1
W10:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W11
LJMPSTART
W11:
MOVA,P3
CJNEA,#0F0H,W12
LJMPSTART
W12:
SJMPW10
LJMPSTART
LJMPSTART
K1:
LCALLSHIFTL
W20:
LCALLDISP;等待按键抬起
MOVA,P3
CJNEA,#0FH,W21
LJMPA0
W21:
MOVA,P3
CJNEA,#0F0H,W22
LJMPA0
W22:
SJMPW20
LJMPA0
ALARM_1:
SETBTR0;操作错误报警
JBTR0,$
RET
ALARM_2:
SETBTR0;密码错误报警
JBTR0,$
LCALLDLY_L
RET
3、声音报警子程序
定时器中断服务程序,用于声音报警,以下为程序代码:
INT_T0:
CPLP1.7
MOVTH0,#(65536-700)/256
MOVTL0,#(65536-700)MOD256
INCCNT_A
MOVR1,CNT_A
CJNER1,#30,RETUNE
MOVCNT_A,#00H
INCCNT_B
MOVR1,CNT_B
CJNER1,#20,RETUNE
MOVCNT_A,#00H
MOVCNT_B,#00H
CLRTR0
RETUNE:
RETI
4、左移子程序
当输入一个密码时,8位数码管显示的数字往左移动一位,实现代码如下:
SHIFTL:
MOVLED_BIT_6,LED_BIT_5
MOVLED_BIT_5,LED_BIT_4
MOVLED_BIT_4,LED_BIT_3
MOVLED_BIT_3,LED_BIT_2
MOVLED_BIT_2,LED_BIT_1
MOVLED_BIT_1,#40H
MOVKEY_6,KEY_5
MOVKEY_5,KEY_4
MOVKEY_4,KEY_3
MOVKEY_3,KEY_2
MOVKEY_2,KEY_1
MOVKEY_1,VAL
RET
5、右移子程序
当输入一个密码出现错误时,可以通过CLR按键往后退一位,8位数码管显示的数字往右移动一位,实现代码如下:
SHIFTR:
MOVLED_BIT_1,LED_BIT_2
MOVLED_BIT_2,LED_BIT_3
MOVLED_BIT_3,LED_BIT_4
MOVLED_BIT_4,LED_BIT_5
MOVLED_BIT_5,LED_BIT_6
MOVLED_BIT_6,#00H
MOVKEY_1,KEY_2
MOVKEY_2,KEY_3
MOVKEY_3,KEY_4
MOVKEY_4,KEY_5
MOVKEY_5,KEY_6
MOVKEY_6,#00H
RET
6、数码管显示子程序
本系统采用动态扫描的方式来显示数字,在第一时刻P0口输出的信号经74LS245和单片机的P3口的数字相组合成的不同的通道来选择送给第一个数码管显示,同理第二时刻第二个数码管显示数字,直到最后一个数码管显示。
当处于输入状态时候,显示“PC”(PLEASECODE),每输入一个字符,出现一个“-”表示密码,程序代码实现如下:
DISP:
CLRP2.7
MOVP0,LED_BIT_8
LCALLDLY_S
SETBP2.7
CLRP2.6
MOVP0,LED_BIT_7
LCALLDLY_S
SETBP2.6
CLRP2.5
MOVP0,LED_BIT_6
LCALLDLY_S
SETBP2.5
CLRP2.4
MOVP0,LED_BIT_5
LCALLDLY_S
SETBP2.4
CLRP2.3
MOVP0,LED_BIT_4
LCALLDLY_S
SETBP2.3
CLRP2.2
MOVP0,LED_BIT_3
LCALLDLY_S
SETBP2.2
CLRP2.1
MOVP0,LED_BIT_2
LCALLDLY_S
SETBP2.1
CLRP2.0
MOVP0,LED_BIT_1
LCALLDLY_S
SETBP2.0
RET
DLY_S:
MOVR6,#10
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
DLY_L:
MOVR5,#100
D2:
MOVR6,#100
D3:
MOVR7,#248
DJNZR7,$
DJNZR6,D3
DJNZR5,D2
RET
四.系统测试
(一)测试工具
keiluVision3
Proteus7professional
(二)指标测试
1.硬件测试
利用Proteus的ISIS电路板设计功能完成电路图的设计,并模拟所有元件的运行。
在选用键盘,选用八段数码管时候,多次对AT89C51的I/O接口进行测试运行,最终选用了74LS245作为I/O端的译码管。
做键盘接入时,P3引脚错误的连接使CPU无法解析正确的按键,在经过检查和更正之后,终于可以正确的识别按键输入,并做出相应的跳转,数码管也能正常的工作。
2.软件测试
在调试程序时,刚开始只编写出了数码管的时钟显示部分的程序,经过多次调试,删除都无法进行,以及确认键的进行。
最后发现是DISP数码管显示子程序出现了问题,数码管要相互切换使用,一种情况是输入正确的密码,一种情况是输入错误。
当输入错误的话,则蜂鸣器发出报警。
当时在调试回退按钮时,还出现了减乱的情况,后面经过分析程序,弄懂了是程序转换出现的问题。
(三)测试结果分析与结论
功能实现
依据调试后得出的结果来看,本设计在完成基本要求,电路需要判断键盘输入的数字是否与预设的密码相符,密码输入时,数码管显示“-”,防止密码泄露,系统支持输入错误之后的回退删除,还支持输入密码错误确认之后的声音报警,基本功能都实现了。
五.设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在指导老师徐老师和同学的帮助下,终于游逆而解。
非常感谢!
参考文献
【1】