您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于AT89S52单片机的密码锁设计
基于AT89S52单片机的密码锁设计一、项目概述很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而破译。此项目给出了一种能防止多次试探密码的密码锁设计方法,从而有效地克服了上述缺点。这种能防止多次试探密码的单片机密码锁应用前景广泛。二、项目要求基于AT89S52单片机的密码锁设计,具体功能如下:(1)总共可以设置8位密码,每位密码值范围为1~8.(2)用户可以自行设定和修改密码。(3)按每个键时都有声音提示。(4)若键入的8位开锁密码不完全正确,则报警5s,以提醒他人注意。(5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防止窃贼多次试探密码。(6)键入8位开锁密码完全正确才能开锁,开锁时有1s的提示音。(7)电磁锁的电磁线圈每次通电5s,然后恢复初态(8)密码键盘上只允许有8个密码按键。锁内有备用电池,只有内部上电复位时才能设置和修改密码,因此,仅在门外按键是不能修改或设置密码的。(9)密码设定完毕后要有2s的提示音。三、系统框图设计按照系统设计的要求和功能,将系统分为主控模块、按键扫描模块、蜂鸣器、电源电路、复位电路、晶振电路、驱动电路几个模块,系统组成框图如下。主控模块采用AT89S52单片机。系统组成框图四、硬件设计4.1电路原理图系统硬件电路图如下所示,P1口接密码按键,开锁脉冲由P3.2输出,报警和提示音由P3.7输出,按键a~h分别代表数字1~8.若没有键按下,则P1.0~P1.7全是高电平;若某键被按下,则相应的口线为低电平。系统硬件电路图4.2元件清单基于AT89S52单片机的密码锁元件清单如表所示。元件名称型号个数用途单片机AT89S521控制核心晶振12MHz1晶振电路电容30Pf2晶振电路电解电容20Μf/10V1复位电路按键9按键电路三极管85502放大电路二极管IN40041蜂鸣器1报警电路电阻1kΩ1上拉电路电阻10kΩ1复位电路电阻4.7kΩ2放大电路继电器5V1控制对象电源+5V/0.5A1提供+5V电源五、软件设计5.1程序流程图如图所示给出了该单片机密码锁电路的软件流程图。图中AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程图的对应位置的,分析程序时可以仔细参考对照。该密码锁中的RAM存储单元的分配方案如下。31H~38H:依次存放8位设定的密码,首位密码存放在31H单元中。R0:指向密码地址。R2:已经输入密码位数。R3:存放允许错误密码次数3与实际错误密码次数的差值。R4~R7:延时用。00H:错码标志位。对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元开始存放主程序。单片机密码锁电路的软件流程图5.2程序清单基于AT89S52单片机的密码锁程序清单如下:#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitSPK=P3^7;sbitACT=P3^2;bitok_flag;staticucharindata[8];staticucharstatus=0x01;staticucharl,m;uchari,j;voidBP();voidDELAY();voidPASSWORD_SET();voidPASSWORD_IN();voidmain(){BP();PASSWORD_SET();for(i=0;i22;i++)BP();while(1){if(l3){PASSWORD_IN();if(!ok_flag){ACT=0;for(i=0;i8;i++)BP();ACT=1;l=0;}else{l++;for(i=0;i40;i++)BP();ok_flag=0;}}l=0;for(i=0;i24;i++){for(j=0;j200;j++)BP();}}}voidPASSWORD_SET(void){if(m8){switch(status){case0x01:{if(P1==0xFF){status=0x01;}else{DELAY();status=0x02;}break;}case0x02:{if(P1!=0xFF){BP();indata[m]=P1;m++;}status=0x01;break;}default:break;}}m=0;}voidPASSWORD_IN(void){if(m8){switch(status){case0x01:{if(P1==0xFF){status=0x01;}else{DELAY();status=0x02;}break;}case0x02:{if(P1!=0xFF){BP();if(P1==indata[m])ok_flag=1;m++;}status=0x01;break;}default:break;}}m=0;}voidBP(void){SPK=0;for(i=0;i250;i++){for(j=0;j124;j++){SPK=~SPK;}SPK=1;}}voidDELAY(void){for(i=0;i20;i++)for(j=0;j125;j++);}六、系统仿真及调试按键AN1~AN7分别代表数码1~7,按键AN0代表数码8。在没有按键按下时,P1.0~P1.7全是高电平1;若某个键被按下,相应的口线就变为低电平0。假如设定的密码是61234578,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1端口读入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。以此类推,存到32H至38H单元的密码值分别是FDH、FBH、F7H、EFH、DFH、7FH、FEH。开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再顺序按AN1、AN2、AN3、AN4、AN5、AN7、AN0才能开锁。否则不能开锁,同时开始报警。仿真图如下七、实物图八、结束语这个项目的制作让我对AT89S52的用途以及应用前景有了充分的认识。这次作品虽然并没有达到我自己的预期效果,这个让我相当惋惜。但是我却学习到了52单片机的工作原理,它是怎样实现密码锁功能的,充分展示了单片机的强大功能。不管是对程序还是电路,都能够亲身体会其中的任何知识。做完这个项目使我对单片器其他的功能有了浓厚的兴趣,想尝试一些其他的作品制作,我相信也会大大地提高自己的动手动脑能力。.
本文标题:基于AT89S52单片机的密码锁设计
链接地址:https://www.777doc.com/doc-7293794 .html