CH_KEY:LCALL KS ;检查有没有按键按下
JNZ LK1
AJMP CH_KEY
LK1:
LCALL T12MS
ACALL KS
JNZ LK2
RET
LK2:
NOP
LCALL SBIE ;按键识别子程序
MOV BUFF, A ;送缓冲区以识别是数字键还是功能键?
LCALL CH_KF ;判断按键功能。
JB FLAG1 ,KEY_FUN ;标志为1,则为功能键
;***********数字按键输入并且存放到缓冲区内等待比较***********
KEY_DIG:NOP ;设一标志,辨别输入是否满
;SETB TR0
INC TIMERS ;输入数字的位数
MOV A, TIMERS
CLR C
SUBB A, #01H
JNZ PS_2
MOV PS1, BUFF ;依照顺序存放密码
AJMP NEXT
PS_2:MOV A, TIMERS
SUBB A, #02H
CLR C
JNZ PS_3
MOV PS2, BUFF
AJMP NEXT
PS_3:MOV A, TIMERS
CLR C
SUBB A, #03H
JNZ PS_4
MOV PS3, BUFF
AJMP NEXT
PS_4:MOV A, TIMERS
CLR C
SUBB A, #04
JNZ PS_5
MOV PS4, BUFF
AJMP NEXT
PS_5:MOV A, TIMERS
CLR C
SUBB A, #05
JNZ PS_6
MOV PS5, BUFF
AJMP NEXT
PS_6:MOV A, TIMERS
CLR C
SUBB A, #06H
JNZ CH_KEY
MOV PS6, BUFF
NEXT:LCALL XSC
MOV R7, TIMERS ;比较输入的次数。
CJNE R7, #06H ,FULL
FULL:JC NEXT9
SETB BUF_FULL
MOV TIMERS,#06H
CLR L3
NOP
CLR P2.1
LCALL T100MSD
SETB P2.1
NOP
AJMP CH_KEY
NEXT9:CLR P2.1 ;密码输入一位,鸣叫一声。
CLR L3
LCALL T100MSD ;延时100ms
SETB L3
SETB P2.1
AJMP CH_KEY
;*****************功能按键比较并且跳转*************
KEY_FUN:
CLR FLAG1
CLR C
MOV A, BUFF
SUBB A, #03H ;按键CL跳转
JNZ EN_C
AJMP CL
EN_C:CLR C
MOV A, BUFF ;按键EN跳转
SUBB A, #00H
JNZ F1_C
AJMP EN
F1_C:CLR C
MOV A, BUFF
SUBB A, #1BH
JNZ F2_C
AJMP FU1
F2_C:CLR C
MOV A, BUFF
SUBB A, #1AH
JNZ F3_C
AJMP FU2
F3_C:CLR C
MOV A, BUFF
SUBB A, #19H
JNZ F4_C
AJMP FU3
F4_C:CLR C
MOV A, BUFF
SUBB A, #18H
JZ FU4
EXIT8:NOP
LJMP CH_KEY
;***************开门子程序 ********************************
CL:NOP
上一篇:电子密码锁程序