;对P0.1脚的按键进行判断,按下为低,无键按下为高,含软件消抖、放键等待,超时5s跳至Timeout ORG 0000H LJMP MAIN ORG 1000H MAIN: MOV R6,#00H;用于标识按键时长,清零 MOV A,P0 ANL A,#01H;假定按键按下时,引脚被拉低,松开时,引脚被拉高 JNZ MAIN;P0.1为高,无键按下,返回 CALL DELLY;延时消抖 MOV A,P0 ANL A,#01H JNZ MAIN;按键时间未符合要求,认为是抖动或误动作,返回 KeyDown: CALL DELLY INC R6 MOV A,#200;用200作为按键时间参照 CLR C;51没有不带借位减法,固先清借位位 SUBB A,R6 JC Timeout;有借位,R6大于200,认为按键时间超过5s,跳至超时 MOV A,P0 ANL A,#01H JZ KeyDown;按下后没有放键,返回,继续计时 ;按键有效,并且时间小于5s,添加需要执行的代码 LJMP MAIN
Timeout: MOV A,P0 ANL A,#01H JZ Timeout;时间到仍没有放键,循环检测,等待放键 ;按键超时,添加需要执行的代码 LJMP MAIN
DELLY:;延时函数 PUSH ACC MOV ACC,#0F0H;根据需要,调整参数。 D1: MOV R7,#0FFH;根据需要,调整参数。 D2: DJNZ R7,D2 DJNZ ACC,D1 POP ACC RET
END |