《单片机技术》课程设计说明书密码锁.doc
单片机技术课程设计说明书 密 码 锁 系 、 部: 电气与信息工程系 学生姓名: 指导教师: 职称 讲师 专 业: 电气工程及其自动化 班 级: 电气本0904 完成时间: 2011.12.25 摘 要日常生活和现代办公中,住宅与办公室的安全防范,单位的文件档案,财务报表以及一些个人资料的保存等多以加锁的办法来解决,若使用机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性大打折扣,为满足人们对门锁的使用要求,增加其安全性,用密码电子锁代替传统机械锁应运而生。目前使用的电子密码锁种类繁多,各具特色,本设计从经济实用的角度出发,以80C51单片机为控制核心,研制了一款电子密码锁。本设计的硬件部分即为简单的单片机最小系统,通过编程,实现其电子密码锁的功能。该密码锁设计方法合理,简单易行,成本低,符合住宅,办公室用锁要求,具有一定的推广价值。关键词:密码锁;单片机ABSTRACTDaily life and the modern office, residential and office security, the unit of paper files, as well as some personal financial statements andother information stored in locked solutions to, the use of mechanical key lock, people often need to carry more than the keys, very convenient to use, and security compromised key is lost, to satisfy people's demands for the use of locks to increase their security, electronic lock with a password replace the traditional mechanical locks came into being. Currently use a wide range of electronic locks, distinctive, the design from the point of view, for the control of the 80C51 microcontroller core, developed an electronic lock.The design of the hardware part is simple smallest single-chip system,through programming, to achieve its electronic code lock functionThe lock design is reasonable, simple, low cost, in line with re- sidential, office with a lock request, the promotion of a certain valueKEYWORDS:code-lock;Single Chip Micro-Computer目 录1 密码锁设计课题任务、功能要求说明及总体方案介绍··················1 1.1 密码锁课题任务及功能要求··································1 1.2 密码锁设计总体方案介绍及工作原理说明······················12 密码锁硬件系统的设计···········································22.1 密码锁硬件系统各模块功能简要介绍··························22.2 密码锁电路原理图、PCB图、元器件布局图各1份··············22.3 密码锁元器件清单··········································23 密码锁软件系统的设计··········································33.1 密码锁设计使用单片机资源的情况···························33.2 密码锁设计软件系统各模块功能简要介绍及流程图·············3 3.2.1 键盘扫描程序········································4 3.2.2 显示程序············································5 3.2.3 密码判断程序········································6 3.2.4 错误报警程序········································73.3 密码锁设计程序清单·······································74 设计结论、缺陷分析、心得体会、教学建议·························84.1 密码锁的设计结论及使用说明································84.2 密码锁设计的缺陷分析······································84.3 心得体会··················································84.4 教学建议··················································8 结束语····························································9 致谢·····························································10 参考文献·························································11附录·····························································121 密码锁设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。该密码锁上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。1.2 设计课题总体方案介绍及工作原理说明(1) 原始密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“888888”共6位密码。 (2)密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入六位密码后,自动结束输入,并判断其正确性 (3)密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第八个按键,则进入修改密码(4)密码修改:可以任意输入“1-7”中的六位数字作为密码,密码输入时处于保密显示状态,六位密码输入结束确认后显示P.图1 设计总框图2 密码锁硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、独立式键盘、LED显示和报警系统组成,系统能完成开锁、错误报警、密码修改功能等功能,设计硬件系统如下: (1)单片机系统:此次课题采用一种是用以80C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。此次课题用单片机P1口与键盘相连,做输入口,P0口与显示器相连,输入段控码,P2口输入位控码。(2)独立式键盘接口电路:此次课程设计采用独立式键盘,与P1口相连,采用扫描法。(3)LED显示:此次课程设计6密码8显示器,按键后即显示,动态显示。P0口送示数据,P2口显示扫描,根据按键次数,第一位显示器显示第一次按的密码,第二位显示器显示第二次按的密码,第三位显示器显示第三次按的密码,依此第六位显示器显示第六次按的密码。(4)报警系统:此次课程设计,当输入密码错误后,系统报警,报警装置由一扬声器实现,从P3.1口输出脉冲,使扬声器鸣报警。2.2 密码锁电路原理图、PCB图、元器件布局图各1份电路原理图见附录1PCB 顶层图见附录2PCB 底层图见附录3元器件布局图见附录42.3 密码锁元器件清单 元器件清单见附录53 密码锁软件系统的设计3.1 密码锁设计使用单片机资源的情况原始密码存放在内部程序存储器中,78H-7FH单元做字形代码缓冲区,70H-77H单元做数据比较缓冲区,61H-66H作为新密码存放区,88H-8DH做密码缓冲区。3.2 密码锁设计软件系统各模块功能简介及流程图密码锁软件的设计主要包括:键盘扫描、密码显示、密码比较、密码修改、错误报警。程序设计总流程图如图2所示:图2 程序设计总流程图3.2.1 键盘扫描程序:本设计采用独立式键盘,共八个按键,程序开始时,先给P1口送高电平,有按键按下后,相应的P1口线会变为低电平,将P1口的电平取反,再送到20H中,20H为可位寻址区,通过查询20H的八位,即可得到是哪个按键按下,就可以转向每个按键所要执行的程序。键盘扫描程序流程框图如图3所示: 图3 键盘扫描程序流程图3.2.2 显示程序:本设计采用数码管共阳极显示,位控由P0口输出,段控由P2口输出,程序开始后,先对程序初始化,选好寄存器以及查表显示的表地址,先将低位位控码送到P2口,然后通过查表得到段控码,并送到该位,这样依次查完八位,使八位数码管显示,以此循环。显示程序流程图如图4所示:图4 显示程序流程图3.2.3 密码判断程序: 原密码存放在内部程序存储器中,程序开始后,上电后通过键盘输入六位密码来解锁,六位密码输入完后,会自动判断是否与原始密码相同,相同的话可以解锁,解锁后可以更改用户密码,若与原始密码不同,则出错报警,然后按复位键可以重新输入。修改完用户密码后若再解锁,步骤与上述相同。 密码判断程序流程图如图5所示:图5 密码判断程序流程图3.2.4 错误报警程序密码输入错误后,会进入自动错误报警,报警时数码管上会显示“ERROR”字样,蜂鸣器会响,与蜂鸣器连在一起的LED灯也会亮,从而实现错误报警。错误报警程序流程图如图6所示:图6 密码修改程序流程图3.3 密码锁设计程序清单程序清单见附录64 设计结论、缺陷分析、心得体会、教学建议4.1 密码锁设计结论及使用说明 该密码锁基本实现了开锁,修改用户密码,错误报警等功能,具有一定的应用推广价值。密码锁上电后,屏幕上会显示“P.”,通过键盘可以输入六位密码,密码输完后,可以自动判断与原始密码是否相同,若相同则开锁,若错误则按复位键回到原始”P.”;并可以任意输入1-7在数码管显示;按下第八个键可以修改用户密码,用户密码也应修改选取数字1-7的六位密码,按确认后又可回到输密码状态“P.”;在修改密码后,如果出现密码输入错误,则可按任意键返回到输密码状态重新输入密码。4.2 密码锁设计的缺陷分析 本设计的密码锁不能进行掉电保护,即用户修改密码后不能进行密码保存,掉电后密码就变为原始密码,在实际应用中还须进行改进,例如在硬件电路中加入存储芯片24C02。由于硬件电路的限制,按键过少,使有些功能缺失或复杂,在实际应用中可采用行列式键盘。4.3 心得体会回顾起此次单片机课程设计,让我感慨很多,从选题到定稿,从理论到实践,在整整两个星期的日子里,巩固了以前所学过的知识,而且学到了很多书本上所没有学到过的知识。在本次设计的过程中,我发现很多的问题,单片机课程设计的重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉得写好一个程序不是一件简单的事情。通过这次实习,我真正学到了不少东西,真正体会到了理论联系实际的重要性。课堂教学考虑到大多数同学的需求,主要强调基本知识,基本理论,基本方法,基本技能。而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。4.4 教学建议 在这一学期的单片机学习里,老师很系统的讲解了单片机这门课程,思路清晰、明了,我们也学会了很多。但老师在布置作业的时候有时有点即兴发挥,有时我们也搞不清到底哪些是做到作业本上,所以有时候会有点迷惑。希望老师在以后的教学过程中更出色,更完美。结束语通过近两周的设计,由单片机为控制核心的密码锁终于设计成功了,整个设计过程有苦有甜,从定稿到编程再到实物测试,整个过程是辛苦的,但我收获了很多,学到了许多课本上没有的东西,增强了自己的动手能力,还培养了自己查阅资料,自学的技能,总之,是获益匪浅的。此次设计的密码锁虽然基本上实现了其功能,但还有很多要改进的地方,比如掉电保护的实现,在以后的学习中,我还应该继续努力去完善。 此次课程设计虽然接近尾声,但我对单片机的学习和研究将永远不会停止。致谢设计终于能上句号,首先要感谢谢我的指导老师吴乐老师,她不仅在学术上予以指导,制定课程设计课题,并且给予我们极大的鼓励和支持,使我们能一直有坚定的信心和饱满的热情来完成我的设计。在设计过程中遇到很多问题吴老师总是引导我去寻找引发问题的的原因并提出解决问题的方法,我们在遇到问题时她总是不厌其烦的给我们指导,让我们走出困惑,最后还要感谢所有帮助过的同学,因为有了他们的帮助,我才能更好的完成任务。在此,祝老师工作顺利,身体健康,家庭幸福,祝同学们学业有成,心想事成。参考文献1 李广弟,朱月秀,冷祖祁.单片机基础(第3版)M.北京:北京航空航天 大学出版社,20072 常喜茂,孔英会,付小宁.C51基础与应用实例 M.北京:电子工业出版社,2009附 录附录1 原理图附录2 PCB顶层图:附录3 PCB底层图附录4 元器件分布图附录5 元器件清单 附录6 程序清单;单片机课程设计-密码锁;作者:黄生旺;日期:2011.12.6;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 ;P MOV 79H,#0FFH ;'灭' MOV 7AH,#0FFH ;'灭' MOV 7BH,#0FFH ;'灭' MOV 7CH,#0FFH ;'灭' 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 ;保护A MOVC A,A+DPTR; SUBB A,R0;密码值与输入值的比较 INC R0 JZ HERE;相等则转移过去继续判断按键 SETB 21H.1;不等则将21H.1置1HERE: MOV A,R4; CJNE R1,#7EH,LOOP; LJMP BIJIAO;/*判断是哪个按键,然后进行相应操作*/KEY11: MOV R0,#01H;送按键对应的数据 '01' SJMP ZZZKEY12:MOV R0,#02H;'02' SJMP ZZZKEY13:MOV R0,#03H;'03' SJMP ZZZKEY14:MOV R0,#04H;'04' SJMP ZZZKEY15:MOV R0,#05H ;'05' SJMP ZZZKEY16:MOV R0,#06H;'06' SJMP ZZZKEY17:MOV R0,#07H;'07' SJMP ZZZKEY18:MOV R0,#08H;'08' 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,#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 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 ;按复位键返回重新输入;/*密码输入正确后,可以任意输入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 BOOP1 ;*密码修改*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 20H.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 PANDUAN 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,#61H ;数据比较缓冲段 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 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,#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;错误提示表现为出现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 ;修改密码后,进入密码报错后按任意键可以重新输入 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; 位控,首先控制最低位为低电平 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 FH;判断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口都送高电平 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.5s延时程序*/DELAY400MS: ;误差 0us PUSH PSW MOV PSW,#08H MOV R7,#1DHDL1:MOV R6,#46HDL0:MOV R5,#61H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1POP PSW RETMAIN:DB 00H,08H,08H,08H,08H,08H,08H END