一、硬件电路:
AT89C2051是与MCS-51系列兼容的一种高性能单片机,具有2KB片内ROM、256字节片内RAM,可以不需扩展外程序、数据存储器,可满足一般的程序需求,从硬件组成可以看出该密码锁有一个3X4阵列的键盘,只需7条I/O引脚就可以了余下的I/O引脚可以开发其他控制功能,如:控制空调、电灯、风扇等。
二、功能实现
键盘扫描所用引脚P1.0-P1.6,其中P1.4-P1.6这3条引脚用于输出扫描信号,P1.0-P1.3这4条引脚用于检测按键的状态。P1.0-P1.6的状态组成的键码以及对应按键如表1所列。
在程序执行中,是先从P1.6送出“0”,再判别P1.3-P1.0的输入。所以,实质是在P1.6-P1.4送出“011”,接收P1.3-P1.0的输入状态,这时判别8,9,A这4个键。接着,在P1.6-P1.4送出“101”,接收P1.3-P1.0的输入,这时判别4,5,6,7这4个键。再而,在P1.6-P1.4送出“110”,接收P1.3-P1.0的输入,这时判别0,1,2,3这4个键的状态。
开锁电平UNLOCK的输出脚P3.0,当输入的键正确时则在P3.0输出开锁电平UNLOCK。
报警电平DANG输出脚P3.1。在6次误码输入的条件下,进行报警。
LOCK控制引脚P3.2,90S之后停止输入。
有效按键提示EFFI引脚P3.3。
错误输入警告WARN引脚P3.4。
另外,还有引脚5,4接石英振荡器的XTAL2,XTAL1端,组成石英振荡器电路,在图1中没有画出。引脚1用于复位。
三、密码锁的控制程序
密码锁的控制程序由延时子程序、修改密码子程序、扫描输入子程序、时钟中断子程序及主程序组成。程序框图如图2所示。它对输入的8位十进制密码进行判别,如果输入密码正确,则可以直接开锁或修改密码之后开锁。如果不正确,并且6次以上输入不正确,则报警并封锁输入口。
1.主程序:
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,#00H
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,#08H,IN
ACALL CHPSW ;修改密码子程序
JMP GETPW
IN: MOV @R0,A
CLR P3.3 ;按键有效显示
ACALL DELAY
SETB P3.3
COMP: MOV R4,#08H ;比较密码
MOV R0,#30H
AGAI: 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 ;6次错误输入报警
THERE: AJMP THERE
2.延时子程序
DELAY: MOV R5,#30H
DELAY1: MOV A,#0FFH
LOOOP: DEC A
JNZ LOOP
DJNZ R5,DELAY1
RET
3.修改密码子程序
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
4.扫描键盘输入子程序
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 AA,#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 R1
DJNZ R6,LOP
DEC R1
MOV A,@R1
DEC R1
CJNE A,40H,INPUT
RET
5.时钟中断子程序
INT: PUSH ACC
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#00H
SETB TR0
SETB ET0
SETB EA
DJNZ R2,CONT
CONTINUE
DJNA 3AH,CONT
CLR P3.2 ;时钟中断控制
STOP: AJMP STOP
CONT: POP ACC
RET1