多功能密码锁Word格式文档下载.docx
《多功能密码锁Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《多功能密码锁Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
![多功能密码锁Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-2/2/b06056b8-785a-435b-a84e-81937651128e/b06056b8-785a-435b-a84e-81937651128e1.gif)
(一)系统硬件概述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
1、功能实现12
五、工作总结12
参考文献13
附录1系统电路图14
附录2系统主要元件清单15
附录3系统程序清单16
附录4系统使用说明书20
系统方案选择与论证
设计要求
设计数字密码锁,即将密码保存再程序存储器中,上电后,系统进入初始化状态,表示要求用户输入密码,密码由程序中的TABLE表设定,若用户输入密码正确,则显示输入密码正确信号,并进行相应的动作,在本系统中,是使LED灯点亮;
若用户输入密码错误,显示密码输入错误的信号,并使蜂鸣器发声,同时系统回到输入状态。
系统基本方案
主控模块的选择
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单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
基于前两种方案的比较,考虑到AT89S52,该芯片内部既有ROM,又与MCS-51兼容,而且ISP在线编程技术适用AT89S52芯片中,这样既降低了成本也无需反复插拔芯片,可避免损坏芯片管脚,同时可省去了仿真器和专用编程器,大大减低了操作难度和成本。
而且该单片机的性能稳定且内存达8KB。
综观上述方案的论证与比较,采用AT89S52作为单片机的芯片。
并行I/O扩展模块的选择
MCS-51单片机系统如果不作任何扩展,P0~P3口可作I/O接口使用。
但是再很多数据采集场合都需要扩展外部数据存储器,而且P3口也要优先考虑第二功能的使用,这样,真正可以用作I/O接口的仅仅为P1或P2、P3的部分未用引脚。
在一个实际应用系统中,需要很多I/O接口作为对外控制引脚,如控制键盘,显示电路等,这样就需要用到I/O扩展的问题
在本系统中,选用74LS245作为并行I/O扩展模块
显示模块的设计
LCD数码管液晶显示,有单片机驱动.它主要用来显示大量数据、文字、图形,能够显示的位数多,显示得清晰多样、美观,但同时液晶显示器的程序编写复杂,价格昂贵,从而降低了整个系统的性价比,故不采用此种方案。
LED数码管静态显示,电路容易理解且驱动的程序简单,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模块。
采用LED数码管动态扫描显示,价格低廉,不仅减少了对I/O口的浪费,而且能够同时驱动多个数码管。
其驱动程序容易编写和理解。
经过以上方案的比较,排除了前两种方案之后,最后选择方案三:
LED数码管动态扫描显示。
7SEG-MPX8-CC八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
本系统选用7SEG-MPX8-CC
键盘接口的设计
键盘接口电路是嵌入式系统设计中与用户进行人机交互的重要界面,实现向单片机输入命令的功能。
键盘由一组敞开的键盘开关组成,每个按键被赋予一个代码,称为键码。
键盘分为编码式键盘和非编码式键盘,由于编码式键盘硬件实现复杂,本系统采用实现简单的编码式矩阵键盘。
本系统使用4×
3矩阵式键盘,是比较常见的键盘排列方式,键盘由0~9的数字键和1个后退键、1个确认键构成。
系统各模块的最终方案
经过方案论证和比较,选出最优秀的系统框架如图片1所示。
图片1
系统硬件设计与实现
系统硬件概述
密码锁系统主要由六个部分构成,其核心是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
并行I/O扩展模块电路设计
利用74LS245实现并行I/O接口扩展是通过分时选通74LS245来实现的,利用如下指令实现对P1口的分时复用。
74LS245为三态输出的八组缓冲器和总线驱动器,8位输入有八个输入引脚(A0~A7),输出端同样由八个引脚(B0~B7)构成。
74LS245芯片使用双向数据缓冲器,所以输入输出方向是双向的,即不但能用于对外部设备的读数据操作也能进行写操作。
在本系统中,只需要使用其中的输出功能。
电路连接如图片3所示。
图片3
LED数码管显示模块设计
单片机P0口连接74LS245,由于74LS245的输出是低电位有效,因此采用共阳极的数码管。
通过单片机P0口输出的信号经过74LS245译码后输出给数码管显示。
由于采用的是动态方式因此我们使用的是P2口来组合选择通道,通过编程来实现数码管的动态显示。
电路连接图如图片4所示。
图片4
键盘接口模块的设计
键盘电路图如图片5所示。
图片5
系统软件设计
采用软件对系统进行编程比起硬件实现其功能要简单、快捷很多。
本系统的软件设计采用了汇编语言编程。
软件程序分为两部分:
第一部分为主程序;
第二部分为子程序。
其中子程序又分键盘扫描程序子程序、按键处理子程序、声音报警子程序、左移子程序、右移子程序、和数码管显示子程序等。
主程序中通过判断当前时间来跳转到相应的子程序来实现系统的各模块的功能。
下面就各个部分进行逐一说明。
主程序的设计
主程序开始时先初始化,初始化8位数码管的段码、初始密码,空间初始化,存储区清零,然后开始运行数码显示子程序,程序进出等待状态。
主程序的流程图如图片6所示。
图片6
子程序的设计
键盘扫描子程序的设计
键盘使用矩阵式键盘,由行和列组成,CPU对所有按键进行监视,一旦发现按键被按下,CPU经过程序加以识别,并转入相应键的处理程序,实现该键功能。
键盘设置再行列交叉点上,行列分别连接到按键开关的两端。
行线通过上拉电阻接到Vcc上。
平时按键无动作时,行线处于高电平状态,而当有按键按下时,行线电平状态将由此行线相连的列线电平决定。
键盘扫描子程序如下:
LSCAN:
MOVP3,#0F0H;
扫描行码
L1:
JNBP3.0,L2
LCALLDLY_S
JNBP3.0,L2
MOVLINE,#00H
LJMPRSCAN
L2:
JNBP3.1,L3
JNBP3.1,L3
MOVLINE,#01H
L3:
JNBP3.2,L4
JNBP3.2,L4
MOVLINE,#02H
L4:
JNBP3.3,A0
JNBP3.3,A0
MOVLINE,#03H
RSCAN:
MOVP3,#0FH;
扫描列码
C1:
JNBP3.4,C2
MOVROW,#00H
LJMPCALCU
C2:
JNBP3.5,C3
MOVROW,#01H
C3:
JNBP3.6,C1
MOVROW,#02H
CALCU:
MOVA,LINE;
计算键值
MOVB,#03H
MULAB
ADDA,ROW
MOVVAL,A
按键处理子程序
以下为按键处理程序,对不同的按键作出响应:
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
W02:
SJMPW00
J1:
MOVA,VAL
CJNEA,#0BH,J3;
判断是否为"
ENTER"
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
J4:
LCALLALARM_1
J3:
INCKEY_CNT;
按下数字键
MOVA,KEY_CNT
CJNEA,#07H,K1
W10:
CJNEA,#0FH,W11
W11:
CJNEA,#0F0H,W12
W12:
SJMPW10
K1:
LCALLSHIFTL
W20:
CJNEA,#0FH,W21
W21:
CJNEA,#0F0H,W22
W22:
SJMPW20
ALARM_1:
SETBTR0;
操作错误报警
JBTR0,$
RET
ALARM_2:
密码错误报警
声音报警子程序
定时器中断服务程序,用于声音报警,以下为程序代码:
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_B,#00H
CLRTR0
RETUNE:
RETI
左移子程序
当输入一个密码时,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
右移子程序
当输入一个密码出现错误时,可以通过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
数数码管显示子程序
本系统采用动态扫描的方式来显示数字,在第一时刻P0口输出的信号经74LS245和单片机的P3口的数字相组合成的不同的通道来选择送给第一个数码管显示,同理第二时刻第二个数码管显示数字,直到最后一个数码管显示。
当处于输入状态时候,显示“PE”,每输入一个字符,出现一个“-”表示密码,程序代码实现如下:
DISP:
CLRP2.7
MOVP0,LED_BIT_8
SETBP2.7
CLRP2.6
MOVP0,LED_BIT_7
SETBP2.6
CLRP2.5
MOVP0,LED_BIT_6
SETBP2.5
CLRP2.4
MOVP0,LED_BIT_5
SETBP2.4
CLRP2.3
MOVP0,LED_BIT_4
SETBP2.3
CLRP2.2
MOVP0,LED_BIT_3
SETBP2.2
CLRP2.1
MOVP0,LED_BIT_2
SETBP2.1
CLRP2.0
MOVP0,LED_BIT_1
SETBP2.0
DLY_S:
MOVR6,#10
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
DLY_L:
MOVR5,#100
D2:
MOVR6,#100
D3:
MOVR7,#248
DJNZR6,D3
DJNZR5,D2
四.系统测试
测试工具
keilc51v7.50
Proteus6.7
指标测试
硬件测试
利用Proteus的ISIS电路板设计功能完成电路图的设计,并模拟所有元件的运行。
在选用键盘,选用八段数码管时候,多次对AT89C51的I/O接口进行测试运行,最终选用了74LS245作为I/O端的译码管。
做键盘接入时,P3引脚错误的连接使CPU无法解析正确的按键,在经过检查和更正之后,终于可以正确的识别按键输入,并做出相应的跳转,数码管也能正常的工作。
软件测试
在调试程序时,刚开始只编写出了数码管的时钟显示部分的程序,经过多次调试,删除都无法进行,以及确认键的进行。
最后发现是DISP数码管显示子程序出现了问题,数码管要相互切换使用,一种情况是输入正确的密码,一种情况是输入错误。
当输入错误的话,则蜂鸣器发出报警。
当时在调试回退按钮时,还出现了减乱的情况,后面经过分析程序,弄懂了是程序转换出现的问题。
测试结果分析与结论
功能实现
依据调试后得出的结果来看,本设计在完成基本要求,电路需要键盘输入的数字判断是否与初始化的密码相符,密码输入时,数码管显示“-”,防止密码泄露,系统支持输入错误之后的回退,也支持密码错误之后的声音报警,基本功能都实现了。
五.工作总结
本次设计的作品基本上实现了基本功能,达到了作品的设计要求,能够应用到实际生活中。
在整个作品的制作中,比较困难的就是调试代码与电路的连接,从一开始调试连接就遭到失败,电路出现的种种的问题,但是我还是不怕失败,到最后终于把电路调试成功了,虽说电路小,但它也是我本次作品的重要电路之一,要是调试不出来也就不、无法检测到密码是否正确
虽然在作品制作过程中也出现了很多难解决的问题,但我还是坚持到最后了,积极的去想方案解决,在解决问题的过程中,我得到了很多锻炼,学会发挥我的主观能动性,通过寻求不同的渠道去弄懂和了解一些原理和电路。
在作品制作的过程中,我遇到了很多我不懂的知识点,但经过互联网和图书馆查阅资料,也懂得了很多新的知识点,学到了很多知识。
从这次的实训中让我知道了,无论在做什么事都不能半途而费,再怎么困难也要坚持到最后,无论最终的结果怎么样,都不要太在意只要我们付出过就足够了。
因此不应该太在意结果,更多的应该注重过程,这将会使我终身受益。
参考文献
《单片机原理及基于单片机的嵌入式系统设计》,中国水利水电出版社,2007年
TheL297StepperMotorControllerApplicationNote.
潘永雄.新编单片机原理与应用[M].西安:
西安电子科技大学出版社,2003.年
附录1系统电路图
附录2系统主要元件清单
序号
元件名称
元件规格型号
数量
备注
1
单片机
AT89C51
2
并行I/O扩展译码管
74LS245
3
数码管
7SEG-MPX8-BLUE
8段8位
4
电阻
RES
6
5
蜂鸣器
SOUNDER
发光二极管
LED-YELLOW
7
点触式开关
12
8
晶振
12MHz
附录3系统程序清单