《基于单片机的电子密码锁及程序.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁及程序.docx(14页珍藏版)》请在课桌文档上搜索。
1、基于单片机的电子密码锁设计摘要随着科技和人们的生活水平的提高如何实现家庭防盗这一问题也变的尤其突出,传统的机械锁由于构造简单,被撬事件屡见不鲜。电子密码锁保密性好,使用灵便性高,收到泛博用户的青睐。本设计是以单片机AT89C52作为密码锁的主控芯片与数据存储单元,结合外围的矩阵键盘输入、LCD显示、开锁、报警等,用C语言编写程序,并用KeiIUViSiOn4软件进行编译设计了一款可以更改密码,具有报警功能的电子密码控制系统。本设计采用矩阵键盘对密码进行输入,具有较高的优势,减少了I/O口的占用数目。密码的显示采用LCD显示屏实现,为确保安全性统一使用显示密码,当重新设置密码时按下“修改”键,L
2、CD显示屏显示数字。采用蜂鸣器摹拟报警系统,增加了密码锁的安全能力。软件使用C语言编程,运用自上而下的模块化设计思想,使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。测试结果表明,设计达到电子密码锁的功能。关键字:密码锁、AT89C52.矩阵键盘、报警一、设计背景随着社会科技的进步,锁已经发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等。在传统钥匙的基础上,加了一组或者多组密码,不同声音,不同磁场,不同声波,不同光束光波,不同图象来控制锁的开启,从而大大提高了锁的安全性。当今安全信息系统应用越来越广泛,特殊在机密保护、维护隐私和财产保护方面起到重大作用,而基于电子密码锁的
3、安全系统是其中的一部份,运用非常广泛,研究它具有重大的现实意义。电子密码锁可以在日常生活和现代办公中,住宅与办公室的安全防范、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。大大提高了主人物资的安全性。目前使用的密码锁种类繁多,各具特色。本文从经济实用的角度出发,采用AT89C52单机,研制了一款具有防盗自动报警功能的电子密码锁。该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。二、设计目的1 .了解单片机开辟系统的组成及结构;2 .掌握I/O口的操作方法;3 .能够熟练使用ProtUeS和kcil软件进行连线和编程,并熟练掌握仿真方法;4 .
4、掌握LCD显示屏的显示原理;5 .掌握C语言编程方法;6 .培养查找错误和改正错误的能力。三、设计要求本设计采用单片机为主控芯片,结合外围电路组成电子密码控制系统。设计主要功能有:1 .设置6位密码,密码通过键盘输入,若密码正确,则锁打开,LCD显示iiPasswordRightLockOPen业!原始密码在首次开锁时为OOOoO0,。2 .重新设置密码时,LCD显示“*$,按下“修改”键显示数值。3 .密码只能输入6位数字,无法输入多余数字。4 .具有自动报警功能:当密码输入错误三次,报警,蜂鸣器单秒。5 .LED数码管显示密码,为确保安全性所有密码均用*必表示。四、设计原理和硬件仿真方案1
5、 .矩阵键盘密码的输入用矩阵键盘实现,包括数字键和功能键。具体功能设计如表一:表一键盘具体功能设计表按键键名功能(T9数字键输入密码新建新建键设定新密码确认确认键比较密码修改修改键显示密码进入进入键允许输入密码取销取销键取销输入密码如图一所示,矩阵键盘的每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线即可组成有NM个按键的键盘。图一矩阵键盘本次设计需要O9十个数字按键、一个新建键、一个确认键、一个修改键、一个进入键和一个取销键共15个按键,所以选用4X4的矩阵按键。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执
6、行等待按键并确认有无按键按下的程序段,还耍对按键进行消抖处理。当确认有按键按下后,就要识别是哪一个按键被按下。本次设计使用的是线反转法。给行线置为OxOf,给列线置为OxfO,再将行列进行逻辑或者结果为Oxff,当有按键按下时相应的按键位行列均为0,行列逻辑或者不为Oxff,由此可利用行列逻辑或者后的值是否为Oxff来判断是否有按键按下。再根据扫描结果判断按下键的位置。给相应的按键赋值即可实现数字键和功能键。对功能键进行相应的软件编程即可实现按键功能。使用矩阵键盘能减少键盘和单片机接口所占用的I/O线数目,当按键较多的时候通常采用这种方法。2 .开锁电路在本次设计中用发光二极管代替电磁锁,二极
7、管Dl亮表示锁开,二极管灭表示没有开锁。如图二所示,当输入密码与内置密码相配合时将P2.1置0,二极管亮,否则二极管不亮。图二发光二级管电路3 .报警电路报警电路由单片机和蜂鸣器组成,如图三所示,当P2.O为低电平时蜂鸣器发出声音报警。每次输入的密码与正确密码进行比较,如果相同,锁开灯亮。如果输入错误则用一个变量来记录输入错误的次数,当输入密码错误达到三次时,蜂鸣器工作发出报警声音,本次设计使用的是声音持续3秒蜂鸣器报警,即可听到“嘟一一”3秒的响声。p.OAD:ro.WADIra.2ALGPI.3/AD3p.4ttD4FO.5/AKRI6/AWP17/AD7可口四P2.1/P2 2ZA10P
8、2SWkIlP2J/A.12P2.5Zi.13P2泌14亚RPlRESpAQKflA LSIP3. OJRXDP3. IHXDR3 2N0 段SBTTPMEJ l,J 迎 PnLEBiF3.7/RD血 211 212 丑 id 阵 【165SCKSDA AlA321C0:P27A15ii图三报警电路4 .LCD显示电路密码显示电路由单片机、排阻和LCD显示屏组成。显示电路如图四所示。为保证密码的保密1本设计采用显示所有输入密码,如图四所示。当重设密码时,按下“修改”键显示数字,如图五所示。本设计只允许输入数字密码6次,超过6次以后的数字无法输入。20pF.1.CDlLMOl:6LAInputP
9、asswordXTAL1IBKTAL2P2.QUOPESPACKEYSTAL图四LCD显示电路1.CDlPasswordRi9htOOOOOOIRVI图五重设密码LCD显示数字六、系统调试本次调试采用的是protues和keil软件进行仿真。首先运用keil软件编写电子密码锁的源程序,本设计主要运用C语言编写。源程序编写后运行生成目标文件供protues仿真调试。图七为LED显示六位密码的情况1.MO16L图七LCI)显示密码图当密码正确按下确认键发光二极管亮,锁开。如图八500图八密码正确锁开灯亮当密码输入错误三次蜂鸣器发出声音报警,如图九所示图九蜂鸣器报警由图九可以看到蜂鸣器接地端为蓝色,
10、即此时为低电平,所以蜂鸣器正在发出报警声音。Protues仿真电路图如图十所示图十protueS仿真电路图七、设计总结与展望课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。本设计经过多次修改和整理,可以满足基本的要求。密码正确,锁开;密码输入错误三次,报警;输入密码超过6位之后的数无效;LCD显示屏显示密码为财”在设计的过程中遇到了各种各样的问题,譬
11、如说断电密码保护的设计,由于电路和编程都过于复杂,本设计并未加入。在编程的过程中问题也是不少,由于程序较长,当实现了这个功能此外一个功能有不能很好的实现,所以要做到模块与模块之间的衔接。遇到的一些问题也经过努力克服。回顾此次单片机课程设计,至今我仍感触颇多。在设计过程中从理论到实践我们可以到不少不少东西,巩固了以前学过的知识,还懂得了如何将理论联系实际。惟独理论知识是远远不够的,惟独将理论运用到实际中对我们来说才是故意义的,这样才干真正的为社会服务。七、附录源程序清单:#include#include#defineucharunsignedcharstaticunsignedchartable
12、6=0,0,0,0,0,0;/DeclarefunctionsucharBusy_Check();voidInitialize_LCD();voidWrite_LCD_Data(uchardat);voidWrite_LCD_Command(ucharcmd);voidDisplay_String(ucharx,uchary,uchar*str);voidDisplay_char(ucharhang.ucharlie,charsign);/voidwrite_add(ucharaddress,uchardaAeT24CXx中的指定地址写入数据Ueharread_add(ucharaddress
13、)从AT24Cxx中的指定地址读取数据voidinit();ucharh=20;sbittouch=P2A1;sbittouch1=P2A2;sbitspeaker=P2A0;voiddelay(unsignedcharms/延时*ms(unsignedchari;while(ms一)(for(i=250;i0;i-)_nop_();_nop_();_nop_();_nop_();)unsignedcharkeyscan()扫描键盘(unsignedchartemp,y,j;unsignedcharanjian=Oxfe,Oxfd,Oxfb,0xt7;for(y=0;y4;y+)Pl=anji
14、any;temp=0x10;for(j=04y+)(if(!(Pltemp)(return(j+y*4);)temp=_crol_(temp,l);)IVoidjudgCo(Pl=OxfO;if(Pl!=Oxft)判断是否有按键(delay(50);delay(5();消抖if(Pl!=OxfO)(h=keyscan();)voidmain()(unsignedchara=1,i=0,k=0,l=1,m=1tn,f=O,s=O;intq;InitiaIize_LCD();init();touch1=0;/第一个while循环while(l)judge();if(h10)if(h=tablei)
15、k+;a+;i+;if(a=7)a=1;if(i=6)i=();h=16;jf(h=14)h=16;touch=1;touch1=0;k=0;1=1;q=0;)if(h=12)(if(k=6)touch=touch;)else1=0;q+;while(q=3)(Speaker=O;delay(200);delay(200);delay(2(X);Speaker=I;q=O;)h=14;)delay(255);k=O;h=16;while(l)(judge。;if(h=ll)while(m=l)(jue();touch1=touch1;if(h10)table11l=h;write_add(s,
16、h);s+;a+;n+;h=16;if(n=6)n=0;s=0;)if(h=15)(if(n=O)n=6;s=6;a-;sn;h=16;)if(h=13)m=O;)if(h=13)h=13;f=l;)if(h=14)(1=0;)if(h=13)(fbr(n=0;n;4K=13;l=0;f=1;)k=O;if(h=15)(a-;k-;i-;h=!6;)if(h=13)(if(f=l)(for(n=0;n6;n+)Display-char(2,n+1,(uchar)(tablen*;4E=0;)elsedelay(255);delay(255);1=l;a=1;k=();n=();m=1;h=16;)for(s=0;s6;s+)(tables=read_add(s);delay(50);)