基于单片机的电子密码锁设计1设计题目本次单片机原理与系统课程设计题目是基于单片机的电子密码锁设计,基本要求是设置4×4矩阵键盘输入密码;使用LCD1602液晶屏显示输入的密码;设置蜂鸣器,当输入错误三次及以上时,蜂鸣器响,并锁定系统;扩展部分要求输入密码时,显示输入值1s后,变为*。2设计目的电子密码锁克服了机械式密码锁密码量少、安全性能差的缺点,从而使密码锁具有更高的安全性和可靠性。由于电子密码锁的保密性高、使用灵活性好、安全系数高等特点,受到了广大用户的亲睐。本次设计是基于AT89C51的单片机控制的电子密码锁,采用矩阵键盘和液晶显示等完成开锁、修改密码、密码错误报警、正确灯亮以及显示密码等基本功能,并通过Protues软件进行了仿真。3设计方案及原理3.1总体设计方案本设计是基于AT89C51的单片机控制的电子密码锁,通过矩阵键盘输入密码。能完成开锁,修改密码,密码错误报警,LCD显示密码等基本的密码锁功能。通过keil软件编写程序,然后在仿真软件proteus上进行仿真。3.2系统组成框图系统电路中包括最小系统,4×4矩阵键盘作为系统的输入端。LCD显示模块,报警电路,开锁显示部分为系统的输出。系统组成框图如图1所示。图1系统组成框图时钟电路AT89C51复位电路矩阵键盘LCD液晶显示器报警电路开锁显示单片机原理及系统课程设计报告14硬件设计4.1矩阵键盘模块设计为了加强密码的保密性,采用一个4×4的矩阵式键盘可以任意设置用户的6位密码,从而提高密码的保密性,具体的操作说明如下:(1)启动时,液晶显示“WELCOMETOYOU”。(2)按下键盘上的“开锁”按键,这时便可以输入密码。(3)利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示相应的数字。等待一秒后自动变为“*”,然后系统将会检测输入的密码与初始密码是否相符。(4)如果输入的密码正确的话,LCD将会显示“youareright”,对应的LCD点亮;此时可以按“输入新密码”来修改密码,输入两次后点“保存新密码”即修改成功。(5)如果输入的密码是错误的,LCD将会显示“Thepasswordiswrong”,随后跳转到“inputnewcipher”提醒再次输入密码,如果三次输入的密码仍旧是错误的,液晶将会显示“Thisisthelasttime,”“Pleasetryittomorrow!”,对应蜂鸣器响,系统将会锁定,不能再输入密码了。键盘模块如图2所示。图2键盘模块P10P11P12P13P14P15P16P17P14P12P13P10P11P17P16P15C31uFXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C510123456789上锁输入新密码保存新密码未定义开锁清除单片机原理及系统课程设计报告24.2LCD液晶显示设计液晶显示模块:本系统设计的显示电路由液晶显示器LCD1602取代普通的数码管完成密码显示,并伴有提示信息,方便操作。液晶显示模块如图3所示。图3LCD液晶显示模块4.3状态控制模块采用AT89C51单片机作为控制芯片,通过仿真调试器keiluVision4软件编写程序控制灯亮和蜂鸣器响。状态控制模块如图4所示。图4状态控制模块5软件设计d0d1d2d3d4d5d6d7d0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7RSRWRSRWEEXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C51D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L234567891RP1RESPACK-8XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C51LS1D1LED-YELLOWR2220单片机原理及系统课程设计报告35.1液晶显示程序部分对LCD1602进行初始化。每一次按键输入的指令不同或主程序执行的指令不同,显示的字符串的内容和长度将会不同。5.2矩阵键盘的程序部分主要包括延时程序和键盘扫描,通过给P1端口,送入数据,逐步扫描看是否有键按下,通过按键的不同,将对应不同的功能或数字。5.3报警与开锁程序部分密码正确灯亮;三次错误时控制蜂鸣器响。程序主函数流程图如图5所示。开始按确认输入密码判断密码正确开锁灯亮第二次输入完成结束YNi==6YN小于三次Y报警N第二次输入修改密码图5主函数流程图6系统仿真及实际调试将编写的汇编程序调试生成一个.hex文件,然后在仿真软件proteus上进行仿真。仿真结果如图6所示。单片机原理及系统课程设计报告4图6仿真电路图7总结通过这次课程设计,我得到了一次用电子技术知识、单片机知识、C语言知识等知识的一次综合应用的机会,尤其对于软硬件的综合系统控制让我对电子世界的研究建立了浓厚的兴趣,同时我也对这些方面的知识有了更深的理解。本次课程设计每个人都是独立完成,这使我们能锻炼自己各方面的能力,并在以后的生活中加以改善。但就其应用来讲,由于自身能力有限,该设计作品还存在许多缺点,比如密码只有6位,每次必须输入固定密码才能开锁,同时如果忘记密码就无法通过其他简单操作方法开锁。在课程设计中碰到了很多的问题,感谢老师的精心指导,使我能够顺利地解决问题,少走了很多弯路,最终让系统趋于完善。同时,在后续的学习过程中我会继续努力争取解决上述问题。当然,通过这次课程设计,我也发现了自身的很多不足,在以后的学习中,我会不断的完善自我,让自己的水平更上一层楼。d0d1d2d3d4d5d6d7d0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7RSRWRSRWEEP10P11P12P13P14P15P16P17P14P12P13P10P11P17P16P15C122pFC222pFC31uFX1CRYSTALR110kXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C51D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L234567891RP1RESPACK-80123456789LS1D1LED-YELLOWR2220上锁输入新密码保存新密码未定义开锁初始密码:888888清除点击‘确定’后再输入密码密码输入正确后可以修改,输入新密码新密码连续输入两次相同时点保存即修改成功单片机原理及系统课程设计报告5参考文献[1]王思明,张金敏.单片机原理及应用系统设计[M].北京:科学出版社,2012.[2]彭伟.单片机C语言程序设计实训100例[M].北京:电子工业出版社,1996.[3]谭浩强.C程序设计[M].北京:清华大学出版社,2004.单片机原理及系统课程设计报告6附录程序清单:#includeat89x51.h#includekey.h#includelcd.hucharcodeshow_0[]=WELCOMETOYOU;ucharcodeshow_1[]=yourcipheris:;ucharcodeshow_2[]=******;ucharcodeshow_3[]=Thepasswordiswrong!;ucharcodeshow_4[]=Thisisthelasttime,;ucharcodeshow_5[]=Pleasetryittomorrow!;ucharcodeshow_6[]=youareright!;ucharcodeshow_7[]=inputnewcipher:;ucharcodeshow_8[]=Inputitagain!;ucharcodeshow_9[]=Establishessuccessful!;ucharcodeshow_10[]=(^_^);ucharinit_pswd[]={8,8,8,8,8,8};ucharpswd[6]={0};ucharpswd_1[6]={0};voidplay(uchar*j,uchark)//K是显示的个数,j是地址{uchari;for(i=0;ik;i++){dat_w(*(j+i));delay(20);}}main(){ucharj=0,i=0,a=0,sum_1=0,t=0;loop:init1();clear();gotoxy(1,0);play(show_0,16);gotoxy(2,0);play(show_0+17,13);/*********密码输入*********/do{key();//键盘扫描函数}while(ki!=15);init();clear();gotoxy(1,0);单片机原理及系统课程设计报告7play(show_1,15);gotoxy(2,0);a=0;i=0;do{flag=0;key();if(flag==1&&ki=9){init();flag=0;pswd[i]=ki;i++;cmd_w(0x80+0x40+a);//写命令a++;dat_w('0'+ki);//显示输入的密码delay(3000);if(i==6){delay(3000);init();clear();gotoxy(2,0);play(show_2,i);}}if(ki==14)//退出.break;if(ki==12)gotoloop;//上锁}while(i=6)