一、引言
出于安全、方便等方面的月要,许多智能锁(如指纹辨识·IC卡辨识)已相继问世,但这类产品的特点是针对特定指纹或有效卡,只能活用于保密要求高且仅供个别人使用的箱、柜、房间等。而且卡片式IC卡还有易丢失等特点,加上其成本一般较高,一定程度上限制了这类产品的普及和推广。
本文介绍一种由AT89C2051编程实规的密码锁,具有按键有效指示、输入错误指示、解码有效指示、控制开锁电平、定时中断、控制报警、密码修改等功能,可在意外泄密的情况下及时修改密码,8位密码共一亿组不重复保密性强灵活性高,适用范围广,特别适合家庭、宾馆等场所。
二、芯片介绍
AT89C2051是与MCS-51系列兼容的一种高性能单片机。它具有2K片内ROM,256字节片内RAM,8个辅助寄存器,在不附加任何外围电路的情况下,能实现大部分比较复杂的逻辑控制功能,进行外部RAM扩展还可用于数据采集动画广告牌控制等方面的应用。对存储容量要求不高的实际应用,AT89C2051确实是一种不可多得的高效能单片机。
芯片引脚排列如图7. 1-1所示。与51系列单片机类似,AT89C2051有两个P口,P1口和P3口。P1 口作为一般的I/O口,其中P1.1和P1.0可作为摸拟信号输人端口。P3口是双功能I/O口,除一般I/O功能外,P3.0和P3.1兼有串行发送和接收的功能,P3.2为外部中断输入,P3.3,P3.4分别为定时器0和1i的计数输人。XALT1、XALT2 为外部晶振端口。Vcc与GND分别接电流和地。
图7.1-1 AT89C2051引脚示意图
三、工作原理
为适应功能需求,对AT89C2051进行编程后,得到控制电路如图7.1-2所示。其中R1~R3、C1~C$为键盘愉入端口,UNLOCK(2脚)为解码正确条件下输出开锁电平,控制电控锁开启,EFFI(7脚)为有效按键提示,WARN(8脚)为错误输入警告,DANG (3脚)为六次误码输入条件一,产生报警电平,LOCK (6脚)为90秒定时中断,输出控制信号,防止长时间无效操作。该电路还可与其它报替电路配合完成防盗报警功能。整个控制功能实现流程如图7. 1-3所示。
图7.1-2 控制电路功能示意图
图7.1-3 工作原理流程
四、程序实现
根据工作流程结构,对AT89C2051编程实现怪序浦单及简要说明如下。
(1)时延子程序:
- DELAY:MOV R5,#30H
- DELAY1:MOV A,#0FFH
- LOOP:DEC A
- JNZ LOOP
- DJNZ R5,DELAY1
- RET
(2)修改密码子程序:
- CHPSW:
- MOV R0,#40H
- ANOTHER:
- ACALL INPUT
- MOV A,R7
- MOV @R0, A
- INC R0
- CLR P3.3 ;按键输入有效提示
- ACALL DELAY
- SETB P3.3
- DJNZ R4,ANOTHER
- RET
(3)扫描输入子程序:
- INPUT:
- MOV R6,#02H
- MOV R1,#40H
- LOP:
- ACALL DELAY
- MOV P1,#0FFH ;扫描码
- CLR P1.6
- MOV A,P1
- ANL A,#0FH ;检验有否按键
- CJNE A,#0FH,INKEY
- MOV P1,#0FFH
- CLR P1.5
- MOV A,P1
- ANL A,#0FH
- CJNE A,#0FH,INKEY
- MOV P1,#0FFH
- CLR P1.4
- MOV A,P1
- ANL A,#0FH
- CJNE A,#0FH,INKEY
- SJMP LOP
- INKEY:
- MOV@R1,P1
- INC R1l
- DJNZ R6,LOP
- DEC R1
- MOV A,@R1
- DEC R1
- CJNE A, 40H,INPUT
- RET
(4)时钟中断子程序:
- INT:
- PUSH ACC
- MOV TMOD,#01H
- MOV TL0,#00H
- MOV TH0,#00H
- SETB TR0
- SETB ET0
- SETB EA
- DJNZ R2,CONT
- CONTINUE:
- DJNZ 3AH,CONT
- CLR P3.2 ;时钟中断控制
- STOP:AJMP STOP
- CONT:
- POP ACC
- RETI
(5)主程序:
- ORG 0H
- SJMP START
- ORG 0BH
- SJMP INT
- START ;初始化
- MOV SP, #70H,
- SETB P3.0
- SETB P3.1
- SETB P3.2
- SETB P3.3
- MOV TMOD,#01H
- MOV TL0,#OOH
- MOV TH0 #00H
- SETB TR0
- SETB ET0
- SETB EA
- MOV R2,#0FFH
- MOV 3AH,#03H
- MOV R3,#06H
- PASSWORD: ;设置初始密码
- MOV R4,#08H;
- MOV R0,#40H
- MOV A,#07H
- MOV @R0,A
- INC R0
- INC A
- DJNZ R4,PASSWORD
- DETPW:
- MOV R4,#08H ;输入密码
- MOV R0,#30H
- AGAIN:
- ACALL INPUT
- MOV A,R7
- CJ R7,#0BH,IN
- ACALL CHPSW ;修改密码子程序
- JMP GETPW
- IN:
- MOV @R0,A
- CLR P3.3 ;按键有效提示
- ACALL DELAY
- SETB P3.3
- COMP: ;比较密码
- MOV R4,#08H
- MOV R0,#30H
- AGA1:
- MOV 50H,@R0
- ADD R0,#010H
- MOV A,@R0
- SUB R0,#010H
- CJNE A,50H,ONCEMORE
- INC R0
- DJNZ R4,AGA1
- CLR P3.0
- HERE:AJMP HERE
- ONCEMORE:
- CLR P3. 4 ;错误输入警告
- ACALL DELAY
- SETB P3.4
- DJNZ R3,GETPW
- CLR P3.1 ;六次错误输入报警
- THERE:AJMP THERE