《大学毕设论文--单片机课程设计密码锁设计.doc》由会员分享,可在线阅读,更多相关《大学毕设论文--单片机课程设计密码锁设计.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。该密码锁上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。1.2 总体方案介绍及工作原理说明(1) 原始密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“888888”共6位密码。 (2)密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入六位密码后,自动结束输入,并判断其正确性 (3
2、)密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第八个按键,则进入修改密码(4)密码修改:可以任意输入“1-7”中的六位数字作为密码,密码输入时处于保密显示状态,六位密码输入结束确认后显示P.。图1 设计总框图2 密码锁硬件系统的设计2.1 密码锁硬件系统各模块功能简要介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、独立式键盘、LED显示和报警系统组成,系统能完成开锁、错误报警、密码修改功能等功能,设计硬件系统如下: (1)单片机系统:此次课题采用一种是用以AT89S52为核心的单片机控制方案。利用单片机灵活的编程设计和
3、丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。此次课题用单片机P1口与键盘相连,做输入口,P0口与显示器段控相连,输入段控码,P2口输入位控码。(2)独立式键盘接口电路:此次课程设计采用独立式键盘,与P1口相连,键按下则会使该端口变成低电平,单片机读P1口,通过对P1口数据的判断来确定哪一个键按下。(3)数码管显示模块:此次课程设计采用的是共阴数码管,P0口段控,P2口送位控,八个数码管共用八根段控,由位控决定在哪一位显示。本次采用的是数码管动态显示法,先给数码管送位控,再送位控,延时1ms左右让显示稳定,利用人眼的视觉反应时间,八位的滚动显示,人眼看来是静态的,从而实现了动态显示的
4、功能。(4)报警系统:此次课程设计,当输入密码错误后,系统报警,报警装置由一扬声器实现,给P3.1口规律性的赋低电平,使扬声器鸣报警、二极管发光。 (5)电源电路: 该密码锁设计了一个电源电路用一个发光二级管显示电源电路的通/断情况。另外,系统也可通过下载口接通电源,且都与单片机EA引脚连接给整个硬件系统供电。 (6)复位及振荡电路:时钟电路工作后,在REST管脚上加两个机器周期的高电平,芯片内部开始进行初始复位。本设计晶振选择频率为12MHZ,电容选择33pF。经计算得单片机工作的机器周期为:12(112M)=1us。(7)下载口: 该密码锁系统设计了一个下载口用于单片机系统的程序导入,附带
5、可以作为补充电源只用,即用一个引脚接电源VCC,因此可以实现程序输入和供电。2.2 密码锁电路原理图、PCB图、元器件布局分布图电路原理图见附录APCB 顶层图见附录BPCB 底层图见附录B元器件布局图见附录C2.3 密码锁元器件清单 元器件清单见附录D3 密码锁软件系统的设计3.1 密码锁设计使用单片机资源的情况原始密码存放在内部程序存储器中,78H-7FH单元做字形代码缓冲区,70H-77H单元做数据比较缓冲区,61H-66H作为新密码存放区,88H-8DH做密码缓冲区。3.2 密码锁设计软件系统各模块功能简介及流程图密码锁软件的设计主要包括:键盘扫描、密码显示、密码比较、密码修改、错误报
6、警。程序设计总流程图如图2所示:图2 程序设计总流程图3.2.1 键盘扫描程序:本设计采用独立式键盘,共八个按键,程序开始时,先给P1口送高电平,有按键按下后,相应的P1口线会变为低电平,将P1口的电平取反,再送到20H中,20H为可位寻址区,通过查询20H的八位,即可得到是哪个按键按下,就可以转向每个按键所要执行的程序。键盘扫描程序流程框图如图3所示:图3 键盘扫描程序流程图3.2.2 显示程序:本设计采用数码管共阳极显示,位控由P0口输出,段控由P2口输出,程序开始后,先对程序初始化,选好寄存器以及查表显示的表地址,先将低位位控码送到P2口,然后通过查表得到段控码,并送到该位,这样依次查完
7、八位,使八位数码管显示,以此循环。显示程序流程图如图4所示:图4 显示程序流程图3.2.3 密码判断程序: 原密码存放在内部程序存储器中,程序开始后,上电后通过键盘输入六位密码来解锁,六位密码输入完后,会自动判断是否与原始密码相同,相同的话可以解锁,解锁后可以更改用户密码,若与原始密码不同,则出错报警,然后按复位键可以重新输入。修改完用户密码后若再解锁,步骤与上述相同。 密码判断程序流程图如图5所示:图5 密码判断程序流程图3.2.4 错误报警程序密码输入错误后,会进入自动错误报警,报警时数码管上会显示“ERROR”字样,蜂鸣器会响,与蜂鸣器连在一起的LED灯也会亮,从而实现错误报警。错误报警
8、程序流程图如图6所示:图6 密码修改程序流程图3.3 密码锁设计程序清单程序清单见附录E4 设计结论、缺陷分析、仿真结果、心得体会、教学建议4.1 密码锁设计结论及使用说明 该密码锁基本实现了开锁,修改用户密码,错误报警等功能,具有一定的应用推广价值。密码锁上电后,屏幕上会显示“P.”,通过键盘可以输入六位密码,保密显示“口”形;密码输完后,密码正确则自动开锁,出现上“口”形,并可以任意输入1-7在数码管显示,若错误数码管会出现“ERROR”和蜂鸣器与LED灯间歇性鸣叫、闪烁报警,按复位键返回重输。密码正确后按下第八个键出现六“_”,“口”形显示保密输入六位新密码,完成后按第八个键确认后又可回
9、到输密码状态“P.”;在修改密码后,如果出现密码输入错误,也会出现“ERROR”字样和蜂鸣器与LED的报警,但可按任意键返回到输密码状态重新输入密码状态;现在可以摆脱复位键,可重复修改密码。4.2 密码锁设计的缺陷分析 本设计的密码锁不能进行掉电保护,即用户修改密码后不能进行密码保存,掉电后密码就变为原始密码,在实际应用中还须进行改进,例如在硬件电路中加入存储芯片24C02。由于硬件电路的限制,按键过少,使有些功能缺失或复杂,在实际应用中可采用行列式键盘。4.3 密码锁的仿真结果 为了能让本次课程设计的准确性特用Protues仿真软件做了仿真如图7:图7 仿真图P点的显示4.4 心得体会本次单
10、片机课程设计安排在临近期末。由于期末复习紧张,要在短时间内完成程序设计到硬件调试,我遇到很大的困难。首先在程序设计上,基于强大的网络资源和图书资源我很快的确定了设计方案和总体设计思路构建一个由数码管和独立按键以单片机为核心的电子密码锁。但是,从软件设计完成到实现仿真却并不简单。好在,前期在做单片机实验上积累了一定的程序设计和分析功底,经过反复调试和修改,到底还是实现了当初预定的功能。 通过这次实践课程,我不光学到了很多关于单片机应用的知识,同时也增长见识、开扩了专业方面的视野。另外,我感觉课程设计与实验课这样的实践课程对理论知识的巩固,动手能力的增强,综合素质的提高有着理论课堂学习无法比拟的效
11、果,是大学,尤其是应用型工科学院必不可少的学习单元。4.5 教学建议 经过为期半年的单片机学习,我们在王老师的指导下对单片机有了较系统的认识,有了一定了程序设计能力,掌握各个应用软件的使用。但是,我也有个人的感受:王老师在理论课上教学认真细致,实践课时习惯让同学们自我摸索,也许希望这样锻炼同学们独立解决问题的能力。但是,我们更希望在实践课时有更多机会得到老师的点拨和指导,这样会令我们的学习效率更高,积极性更高。那样,我相信我们的学习成绩将会更进一步,老师的教学效果将更突出。结束语作为本学期的单片机课程设计,由单片机为控制核心的密码锁从设计方案确定到原理图设计,到程序设计及软硬件结合调试,整个过
12、程有苦有甜,但我收获了颇多,学到了许多课本上没有的东西,增强了自己的动手能力,还培养了自己查阅资料,自学的技能,总之,是获益匪浅的。尤其在资料查阅和程序设计和调试上能力提高效果明显。此次设计的密码锁虽然实现了其基本功能,但还有很多要改进的地方,比如掉电保护的实现,必须在原有的电路上增加模块(比如24C52芯片),但由于时间紧凑,资源有限未能完成。在以后的学习中,我还应该继续努力去完善。 此次课程设计虽然接近尾声,但我对单片机的学习和研究将永远不会停止,我必将努力自我探索,不断自主学习,孜孜以求。致谢 期末考试结束了,我的单片机课程设计也要完成了。能够顺利完成密码锁的设计,当然要感谢王韧老师悉心
13、教授单片机的理论知识以及在实验课程上的严格要求。王老师在课程设计前期的单片机技术课的教授上认真细致,使我们夯实了理论知识基础;在单片机实验课上,王老师严格要求,使我们强化了实践动手能力、能够熟练的运用各种应用软件。并且,在我们遇到技术难题和设计瓶颈的时候适当的启发了我们。另外,在程序设计和硬件调试上,我很大程度上获得了班上同学的帮助,尤其是上期暑假参加过单片机培训的三位同学使我顺利完成了程序的后期完善。在设计结束之际,祝老师新年快乐,工作顺利,桃李满天下,祝同学们期末考试顺利,学有所成。参考文献1 李广第,朱月秀,冷祖祁.单片机基础M.北京:北京航空航天大学出版社,2007.6LiGuang
14、first, ZhuYueXiu, LengZuQi. Single chip microcomputer based M. Beijing: Beijing university of aeronautics &astronautics press, 2007.62 康华光.电子技术基础 模拟部分(第五版) M.北京:高等教育出版社,2006kang uh guano. Electronic technology foundation simulation part (fifth edition) M. Beijing: higher education press, 20063 阎石,数字
15、电子技术基础(第五版) M.北京:高等教育出版社,2006YanShi, digital electronic technology foundation (fifth edition) M. Beijing: higher education press, 20064 邱光源.电路(第五版) M.北京:高等教育出版社,2006QiuGuangYuan. Circuit (fifth edition) M. Beijing: higher education press, 2006附 录附录A:电路原理图图A 密码锁电路原理图附录B: PCB图图B1 电子密码锁PCB图顶层图B2 电子密码锁P
16、CB图底层附录C: 元器件分布图图C 电子密码锁元器件分布3D效果图附录D: 元器件清单表D 电子密码锁元器件清单附录E: 程序清单项目名称:密码锁项目功能:初始自动显示系统提示符“P.”, 进入准备工作状态。具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息并报警。电路描述:采用芯片AT89S52单片机,利用P1口与键盘相连,做输入口,P0口与显示器段控相连,输入段控码,P2口输入位控码,将P3.1口与蜂鸣器和二极管电路相连,产生错误报警。编程作者:喻鹏完成时间:2013年1月3日备
17、注: 78H7FH单元做字形代码缓冲区,70H77H单元做数据比较缓冲单元,MAIN为原始密码存放区,61H66H作为新密码的存放区,88H8DH为密码缓冲区。密码锁程序清单:ORG 0000HLJMP STARTORG 0100HSTART : MOV SP, #30H MOV R0, #70H MOV 6FH, #00H MOV R1, #78H MOV 20H, #00H CLR 21H.1 MOV A, #00H MOV DPTR, #MAIN MOV 78H, #0CH MOV 79H, #0FFH MOV 7AH, #0FFH MOV 7BH, #0FFH MOV 7CH, #0F
18、FH MOV 7DH, #0FFH MOV 7EH, #0FFH MOV 7FH, #0FFH LOOP: LCALL DISP LCALL KEYCL JB 20H.0, KEY11 JB 20H.1, KEY12 JB 20H.2, KEY13 JB 20H.3, KEY14 JB 20H.4, KEY15 JB 20H.5, KEY16 JB 20H.6, KEY17 JB 20H.7, KEY18 CLR CY DEC R0 MOV R4,A MOVC A, A+DPTR; SUBB A, R0;密码值与输入值的比较 INC R0 JZ HERE;相等则转移过去继续判断按键 SETB
19、21H.1;不等则将21H.1置1HERE: MOV A, R4; CJNE R1, #7EH,LOOP; LJMP BIJIAO/*判断是哪个按键,然后进行相应操作*/KEY11: MOV R0, #01H SJMP ZZZKEY12: MOV R0, #02H SJMP ZZZKEY13: MOV R0, #03H SJMP ZZZKEY14: MOV R0, #04H SJMP ZZZKEY15: MOV R0, #05H SJMP ZZZKEY16: MOV R0, #06H SJMP ZZZKEY17: MOV R0, #07H SJMP ZZZKEY18: MOV R0, #08H
20、 ZZZ: MOV R1, #0A3H; 送显示字形,保密输出显示“口”形 INC R0;将R0、R1、A加1 INC R1 INC A MOV 20H, #00H LJMP LOOP;返回再继续判断按键/*比较后对标志位进行判断*/BIJIAO: JB 21H.1, ERROR ;标志位等于1则进入错误提醒设置 MOV R1, #7FH ;密码正确后显示缓冲段 MOV 78H, #9DH ;上半口 MOV 79H, #0FFH ;灭 MOV 7AH, #0FFH ;灭 MOV 7BH, #0FFH ;灭 MOV 7CH, #0FFH ;灭 MOV 7DH, #0FFH ;灭 MOV 7EH,
21、 #0FFH ;灭 MOV 7FH, #0FFH ;灭BOOP1: MOV 20H, #00H LCALL DISP LCALL KEYCL JB 20H.0, KEY21 JB 20H.1, KEY22 JB 20H.2, KEY23 JB 20H.3, KEY24 JB 20H.4, KEY25 JB 20H.5, KEY26 JB 20H.6, KEY27 JB 20H.7, KEY28 ;第八个键按下,直接进入密码修改 CJNE R1, #77H,BOOP1 MOV R1, #7FH SJMP BOOP1 /错误提示则出现ERROR字样,并伴有蜂鸣声和LED灯闪烁/ERROR: MOV
22、 79H, #88H ;R MOV 7AH, #0C0H ;O MOV 7BH, #88H ;R MOV 7CH, #88H ;R MOV 7DH, #86H ;E MOV 7EH, #0FFH ;灭 MOV 7FH, #0FFH ;灭 MOV 78H, #0FFH ;灭LOOP2: MOV R5,#32H ;显示函数的循环次数 CLR P3.1 ;蜂鸣器和P3.1对应的灯隔0.5响灭LOOP1: LCALL DISP DJNZ R5,LOOP1 ;显示循环50次,约为0.4s SETB P3.1 ;取反P3.1口 LCALL DELAY400MS ;调延时0.4s SJMP LOOP2 ;按
23、复位键返回重新输入;/*密码输入正确后,可以任意输入17中的数字*/KEY21: MOV R1, #0F9H DEC R1 LJMP BOOP1KEY22: MOV R1, #0A4H DEC R1 LJMP BOOP1 KEY23: MOV R1, #0B0H DEC R1 LJMP BOOP1 KEY24: MOV R1, #99H DEC R1 LJMP BOOP1 KEY25: MOV R1, #92H DEC R1 LJMP BOOP1 KEY26: MOV R1, #82H DEC R1 LJMP BOOP1 KEY27: MOV R1, #0F8H DEC R1 LJMP BOO
24、P1 /*密码修改*/KEY28: MOV 78H, #0F7H ;_ MOV 79H, #0F7H ;_ MOV 7AH, #0F7H ;_ MOV 7BH, #0F7H ;_ MOV 7CH, #0F7H ;_ MOV 7DH, #0F7H ;_ MOV 7EH, #0FFH ;灭 MOV 7FH, #0FFH ;灭 MOV R0, #61H ;新密码存放区 MOV R1, #7DH ;显示代码缓冲区KOOP1: LCALL DISP MOV 20H, #00H LCALL KEYCL JB 20H.0, KEY31 JB 20H.1, KEY32 JB 20H.2, KEY33 JB 2
25、0H.3, KEY34 JB 20H.4, KEY35 JB 20H.5, KEY36 JB 20H.6, KEY37 JB 20H.7, KEY38 CJNE R1, #7EH,KOOP1 MOV R1, #78H SJMP KOOP1KEY31: MOV R0, #01H MOV R1, #0A3H SJMP PANDUAN KEY32: MOV R0, #02H MOV R1, #0A3H SJMP PANDUAN KEY33: MOV R0, #03H MOV R1, #0A3H SJMP PANDUAN KEY34: MOV R0, #04H MOV R1, #0A3H SJMP P
26、ANDUAN KEY35: MOV R0, #05H MOV R1, #0A3H SJMP PANDUAN KEY36: MOV R0, #06H MOV R1, #0A3H SJMP PANDUAN KEY37: MOV R0, #06H MOV R1, #0A3HPANDUAN:CJNE R1, #77H,THE1 SJMP KOOP1THE1: INC R0 DEC R1 SJMP KOOP1 KEY38: CJNE R1, #77H,THE ;确认密码修改成功(并判断是否满足密码要求) SJMP THE2 THE: LJMP KEY28;/*新密码执行*/THE2: MOV R0,#6
27、1H ;数据比较缓冲段 MOV R1,#78H ;显示缓冲段 MOV 20H,#00H CLR 21H.1 MOV DPTR,#0061H ;利用DPTR做间址寻址寄存器 MOV 78H,#0CH ;P MOV 79H,#0FFH ;灭 MOV 7AH,#0FFH ;灭 MOV 7BH,#0FFH ;灭 MOV 7CH,#0FFH ;灭 MOV 7DH,#0FFH ;灭 MOV 7EH,#0FFH ;灭 MOV 7FH,#0FFH ;灭TOOP: LCALL DISP LCALL KEYCL CLR CY JB 20H.0,KEY41 JB 20H.1,KEY42 JB 20H.2,KEY43
28、 JB 20H.3,KEY44 JB 20H.4,KEY45 JB 20H.5,KEY46 JB 20H.6,KEY47 JB 20H.7, KEY48 CJNE R1, #7EH,TOOP; LJMP BIJIAO1/*改密码后的密码输入时判断是哪个按键,然后进行相应操作*/KEY41:MOV A, #01H SUBB A, R0 SJMP KKKKEY42:MOV A, #02H SUBB A, R0 SJMP KKKKEY43:MOV A, #03H SUBB A, R0 SJMP KKKKEY44:MOV A, #04H SUBB A, R0 SJMP KKKKEY45:MOV A,
29、#05H SUBB A, R0 SJMP KKKKEY46:MOV A, #06H SUBB A, R0 SJMP KKKKEY47:MOV A, #07H SUBB A, R0KKK: JZ EY6 SETB 21H.1EY6: MOV R1, #0A3H;送显示字形,保密输出显示“口”形 INC R0 INC R1 MOV 20H, #00H LJMP TOOP;返回再继续判断按键KEY48:MOV 20H, #00H LJMP TOOP;返回再继续判断按键;*新密码的比较*BIJIAO1: JB 21H.1,ERROR1 ;标志位等于1则进入错误提醒设置 LJMP BIJIAO;错误提示
30、表现为出现ERROR字样,并伴有蜂鸣声和LED灯闪烁ERROR1:MOV 79H,#88H ;R MOV 7AH,#0C0H ;O MOV 7BH,#88H ;R MOV 7CH,#88H ;R MOV 7DH,#86H ;E MOV 7EH,#0FFH ;灭 MOV 7FH,#0FFH ;灭 MOV 78H,#0FFH ;灭LOOP3: MOV R5,#32H ;显示函数的循环次数 CLR P3.1 ;蜂鸣器和P3.1对应的灯隔0.5响灭LOOP4: LCALL DISP LCALL KEYCL MOV R7,20H CJNE R7,#00H,XXX ;修改密码后,进入密码报错后按任意键可以
31、重新输入 DJNZ R5,LOOP4 ;显示循环50次,约为0.4s SETB P3.1 ;取反P3.1口 LCALL DELAY400MS ;调延时0.4s LCALL KEYCL SJMP LOOP3 ;按复位键返回重新输入XXX: SETB P3.1 ;关报警器 LJMP THE2 ;跳过去重新输入;/*显示程序*/DISP: PUSH PSW ; 保护寄存器里面的数据 PUSH ACC PUSH DPH PUSH DPL MOV PSW,#08H MOV A,#00H ; 设置查表显示为首个数据 MOV R1,#78H ; 表首地址 MOV R3,#0FEH; 位控,首先控制最低位为低
32、电平 MOV R2,#08H; 循环显示的次数DOOP1:MOV P2,R3;先送位控到P2口 MOV A,R1 ;查表去字形代码 MOV P0,A ;送段控到P0口 LCALL DELAY1MS ;调1MS的延时程序 MOV A,R3 RL A MOV R3,A ;位控位左移一位 INC R1 ;将A,即查表向后推移一位 DJNZ R2,DOOP1 ;判断是否查询了八个缓冲字节 POP DPL ;出栈 POP DPH POP ACC POP PSW RET ;子程序返回;/*独立式按键处理*/KEYCL:PUSH PSW PUSH ACC LCALL KEYSM;调键扫,返回A的值 JZ F
33、H;判断A是否为0,为0则跳FH处返回 LCALL DISP;A不等于0,调去抖显示(代替延时程序8MS)程序 LCALL DISP LCALL KEYSM;再调键扫 JZ FH;再次判断A MOV B,A;A不为0,则确实有键按下KEYSF:LCALL KEYSM;判断键是否释放,调键扫 JZ KEY1;A=0则为释放了,跳KEY1保存键值到可位寻址单元 LCALL DISP;调延时 SJMP KEYSF;跳回判断键释放KEY1: MOV 20H,B;保存键值FH: POP ACC POP PSW RET;/*独立式按键扫描*/KEYSM: MOV P1, #0FFH ;给P1口都送高电平
34、NOP MOV A, P1 ;再把P1口的电平值送给A CPL A ;将A取反 RET;/*1ms延时子程序*/DELAY1MS:PUSH PSW MOV PSW, #08H MOV R7, #01H DL2: MOV R6, #8EH DL3: MOV R5, #02H DJNZ R5, $ DJNZ R6, DL3 DJNZ R7, DL2 POP PSW RET;/*0.4s延时程序*/DELAY400MS: ;误差 0us PUSH PSW MOV PSW,#08H MOV R7,#1DHDL1: MOV R6,#46HDL0: MOV R5,#61H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 POP PSWRETMAIN:DB 00H,08H,08H,08H,08H,08H,08H END30