能防止多次试探密码的单片机密码锁

发布时间:2010-11-1 21:33    发布者:eetech
关键词: 单片机 , 密码 , 密码锁 , 试探
1 引言  

很多行业的许多地方都需要密码锁,但普通密码锁的密码容易被多次试探而破译。本文给出了一种能防止多次试探密码的密码锁设计方法,从而有效地克服了上述缺点。

2 硬件电路  

图1所示是笔者设计的一种密码锁电路。该密码锁主要是按照以下10条用户要求进行设计的:  

(1)共8位密码,每位的取值范围为1~8。  
(2)用户可以自行设定和修改密码。  
(3)按每个密码键时都有声、光提示。  
(4)若键入的8位开锁密码不完全正确,则报警5秒钟,以提醒他人注意。  
(5)开锁密码错3次要报警10分钟,报警期间输入密码无效,以防窃贼多次试探密码。  
(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1秒的提示音。  
(7)电磁锁的电磁线圈必须用脉冲驱动,每次通电时间不多于2秒,以防烧坏。  
(8)密码键盘上只允许有8个密码按键和1个发光管。锁内有备用电池,只有内部上电复位时才能设置或修改密码,因此,仅在门外按键是不能修改或设置密码的。
(9)密码设定完毕后要有2秒的提示音。  
(10)成本要比较低,硬件和软件都要尽可能简洁可靠,易于批量生产。  




根据总体要求分析,该密码锁电路所需要的I/O口线少于15个,若设计得当,程序不会超过200条指令,所以可选择质优价廉的AT89C1051/2051或者GMS1051/2051,而且不需要外接程序存储器和数据存储器及其它扩展部件。  

在图1所示电路中,P1口连接8个密码按键AN1~AN8,开锁脉冲由P3.5输出,报警和提示音由P3.7输出。BL是用于报警与声音提示的喇叭,发光管D1用于报警和提示,L是电磁锁的电磁线圈。

3 软件设计  

图2给出了该单片机密码锁电路的软件流程图。图中?AA1~AA8以及START、SET、SAVE是程序中的标号,是为了理解程序而专门标在流程图的对应位置的,分析程序时可以仔细对照参考。  

3.1 存储单元的分配  

该密码锁中RAM存储单元的分配方案如下:  

31H~38H:依次存放8位设定的密码,首位密码存放在31H单元;  
R0:指向密码地址;  
R2:已经键入密码的位数;  
R3:存放允许的错码次数3与实际错码次数的差值;  
R4至R7:延时用;  
00H:错码标志位。  

对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间比较少,因此,在无特殊要求时,可以从0030H单元(其它地址也可以)开始存放主程序。



3.2 源程序  

下面是该电子密码锁的软件源程序代码:  

ORG 0000H  
AJMP START  
ORG 0030H  
START:ACALL BP  
MOV R0,#31H  
MOV R2,#8  
SET: MOV P1,#0FFH  
MOV A,P1  
CJNE A,#0FFH,L8  
AJMP SET  
L8: ACALL DELAY  
CJNE A,#0FFH,SAVE  
AJMP SET  
SAVE: ACALL BP  
MOV @R0A  
INC R0  
DJNZ R2,SET  
MOV R5,#16  
D2S: ACALL BP  
DJNZ R5,D2S  
MOV R0,#31H  
MOV R3,#3  
AA1: MOV R2,#8  
AA2: MOV P1,#0FFH  
MOV A,P1  
CJNE A,#0FFH, L9  
AJMP AA2  
L9? ACALL DELAY  
CJNE A,#0FFH,AA3  
AJMP AA2  
AA3: ACALL BP  
CLR C  
SUBB A, @R0  
INC R0  
CJNE A,#00H,AA4  
AJMP AA5  
AA4: SETB 00H  
AA5: DJNZ R2,AA2  
JB 00HAA6  
CLR P3.5  
L3 MOV R5,#8  
ACALL BP  
DJNZ R4,L3  
MOV R3,#3  
SETB P3.5  
AJMP AA1  
AA6: DJNZ R3,AA7  
MOV R5,#24  
L5: MOV R4,#200  
L4: ACALL BP  
DJNZ R4,L4  
DJNZ R5,L5  
MOV R3,#3  
AA7: MOV R5,#40  
ACALL BP  
DJNZ R5,AA7  
AA8: CLR 00H  
AJMP AA1  
BP: CLR P3.7  
MOV R7,#250  
L2: MOV R6,#124  
L1: DJNZ R6,L1  
CPL P3.7  
DJNZ R7,L2  
SETB P3.7  
RET  
DELAY?MOV R7,#20  
L7: MOV R6,#125  
L6: DJNZ R6,L6  
DJNZ R7,L7  
RET  
END

4 应用说明  

若按键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才能开锁。否则不能开锁,同时开始报警。
本文地址:https://www.eechina.com/thread-35715-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表