;**************各类子程序********************************
;**** 注意清楚缓冲区时AT1...AT6不应在初始化中执行,以 ***
;**** 防两缓冲区都为0,相同开锁 ***
;********************************************************
CLR_BUF:MOV R7, #06H
MOV R0, #6FH
LOOP1:MOV A, #00H
MOV @R0, A
DEC R0
DJNZ R7,LOOP1
RET
;*************初始化显示缓冲区以及其他缓冲区**************
INITPS:PUSH ACC
PUSH PSW
MOV R7, #06H
MOV R1, #PS1
MOV A, #00H
INIT_PS:MOV @R1, A
DEC R1
DJNZ R7, INIT_PS
POP PSW
POP ACC
NOP
RET
INITAT:PUSH ACC
PUSH PSW
MOV R7,#06H
MOV R1,#AT1
MOV A, #00H
INIT_AT:MOV @R1, A
DEC R1
DJNZ R7, INIT_AT
MOV TIMERS,#00H ;密码输入的次数清零。
POP PSW
POP ACC
RET
;************* 按键识别子程序 ***************************
SBIE:MOV R2, #0EFH ;识别按键子程序,数据送A保存,课本P146页。
MOV R4, #00H
LK4:MOV A, R2
MOV P0, A
NOP
MOV A, P0
JB ACC.0,LONE
MOV A, #00H
AJMP LKP
LONE:JB ACC.1,LTWO
MOV A, #08H
AJMP LKP
LTWO:JB ACC.2,LTHR
MOV A, #10H
AJMP LKP
LTHR:JB ACC.3,NEXTT ;判断下一列
MOV A, #18H
LKP:ADD A, R4
PUSH ACC
LK3:ACALL KS
JNZ LK3
POP ACC
RET
NEXTT:INC R4
MOV A, R2
JNB ACC.7,KND
RL A
MOV R2, A
AJMP LK4
KND:AJMP CH_KEY
KS:MOV P0, #0FH
NOP
MOV A, P0
CPL A
ANL A, #0FH
NOP
RET
CH_KF:CLR C
MOV A, BUFF ;判断是数字按键还是功能按键,为1表示功能键
CJNE A, #17H, KY
KY:JC SET_CH ;假若是数字按键则标志置为0
SETB FLAG1 ;假若是功能按键则标志置为1
AJMP CHKE_END
SET_CH:CLR C
MOV A, BUFF
SUBB A, #00H
JNZ EN_CH
SETB FLAG1
AJMP CH_END
EN_CH:MOV A, BUFF
SUBB A, #03H
JNZ DIG
SETB FLAG1
AJMP CH_END
DIG:CLR FLAG1
上一篇:电子密码锁程序