;说
; 输入次三次过错报警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 ;等候按键松开
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/255883.html