51单片机的LCD1602液晶屏密码锁汇编程序
;
输入次三次错误报警10S,输入正确开门,7秒后返回初态
;
以上参数均可在主程序里设定,修改系统密码在程序的结尾
ORG 0000H
;========== 主程序开始 ==============
MAIN:
MOV 30H,#07H
;输入密码为7位
最高只可设15位
MOV 43H,#250
;设定开门时间
14的倍数(实际上液晶显示器执行指令占用了时间,开门时间会比14*250MS大)
;44H号单元存放输入错误的次数
;46H为定时器1中断次数
MOV SP,#60H
MOV TH1,#3CH
SETB ET0
SETB ET1
START:
MOV R0,30H
SS1: MOV @R1,#00H
INC R1
MOV R1,#31H
;从31号单元开始存放按建输入的密码
CLR 21H
;密码超时标志
MOV 46H,#00H
;超时后对定时器中断次数清零,便于下一轮重新计时
INIT:
ACALL SELLCD
;设定液晶工作方式
setb EX0
;开中断,允许键盘输入
KEYIN:
JB
21H,ERR
;超时转到错误程序
clr EX0
;密码输入完后锁定键盘
;当使用边沿触发时用上面的指令为什么禁止不了中断???
;========== 密码判断程序 ============
COMP:
LOOP:
MOV R5,A
;正确
MATCH:
MOV A,#01H
ACALL LINE2
MOV DPTR,#TAB_1
ACALL DISPLAY
MOV 44H,#00H
;输入错误次数清零
CLR OPEN
;复位
;错误
ERR:
ACALL BACK
ACALL BACK
;输错提示音,鸣两下
INC
44H
MOV A,44H
EE0:
JC
ERROUT
;输错不到三次返回
MOV 44H,#00H
;清零
ACALL WRANING
;报警
ERROUT: JMP START
;=========== 按键中断服务程序 ==========
KEY_INT:push acc
clr ex0
MOV A,KEYNUMBER
;返回按键号
clr tr1
;按下确认后关毕定时器
mov 46h,#00h
;对中断次数清零
K1:
ADD A,#30H
;将按键号转换为ASCⅡ码
KEY_RTN:pop psw
setb ex0
;=========== 按键识别程序 ==========
SMKEY:
ANL A,#0FH
WKEY:
MOV B,A
;反转法查询
NOP
MOV A,P1
ANL A,#0F0H
ORL A,B
MOV P1,#0FH
;还原P1口初态
CJNE A,#0EEH,WKEY1
MOV KEYNUMBER,#00H
AJMP RETURN
WKEY1:
CJNE A,#0EDH,WKEY2
MOV KEYNUMBER,#01H
AJMP RETURN
WKEY2:
CJNE A,#0EBH,WKEY3
MOV KEYNUMBER,#02H
AJMP RETURN
WKEY3:
CJNE A,#0E7H,WKEY4
MOV KEYNUMBER,#03H
AJMP RETURN
WKEY4:
CJNE A,#0DEH,WKEY5
MOV KEYNUMBER,#04H
AJMP RETURN
WKEY5:
CJNE A,#0DDH,WKEY6
MOV KEYNUMBER,#05H
AJMP RETURN
WKEY6:
CJNE A,#0DBH,WKEY7
MOV KEYNUMBER,#06H
AJMP RETURN
WKEY7:
CJNE A,#0D7H,WKEY8
MOV KEYNUMBER,#07H
AJMP RETURN
WKEY8:
CJNE A,#0BEH,WKEY9
MOV KEYNUMBER,#08H
AJMP RETURN
WKEY9:
CJNE A,#0BdH,WKEY10
MOV KEYNUMBER,#09H
AJMP RETURN
WKEY10:
CJNE A,#0BbH,WKEY11
MOV KEYNUMBER,#0AH
AJMP RETURN
WKEY11:
CJNE A,#0B7H,RETURN
MOV KEYNUMBER,#0BH
;判断哪个键按下,返回相应按键号码
RETURN:
MOV P1,#0FH
ANL A,#0FH
JNZ RETURN
;等待按键松开
评论