经典按键防抖动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经典按键防抖动.txt你看得见我打在屏幕上的字,却看不到我掉在键盘上的泪!自己选择45°仰视别人,就休怪他人135°俯视着看你。经典按键防抖动51汇编程序
作者:不详来源:本站整理发布时间:2006-11-22 12:46:24 发布人:admin
减小字体增大字体
;四独立按键控制四LED;
;四个独立按键对应四个独立的LED.
;当某一按键按下时对应的LED亮,当第二次按下时灭。
;四个LED只能有一个亮,初学者可以参考以下程式:
;当一直按下某一按键时对应的LED会闪动。
;---------------------------------------------------------
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
FLAG0 BIT 20H.0 ;LED0标记
FLAG1 BIT 20H.1 ;LED1标记
FLAG2 BIT 20H.2 ;LDE2标记
FLAG3 BIT 20H.3 ;LED3标记
K_OLD EQU 30H
K_NEW EQU 31H
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0030H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV 20H,#0FFH
MAIN1:
CALL K_SCAN ;键扫描
MOV A,K_NEW
CJNE A,K_OLD,MAIN2
JMP MAIN1
MAIN2:
CALL DELAY ;延时示去抖动
CALL K_SCAN ;再判断键是否按下
MOV A,K_NEW
CJNE A,K_OLD,MAIN3
JMP MAIN1
MAIN3:
JB ACC.0,LOOP1 ;K1按下 JB ACC.1,LOOP2 ;K2按下 JB ACC.2,LOOP3 ;K3按下 JB ACC.3,LOOP4 ;K4按下 JMP MAIN1
LOOP1:
JNB FLAG0,LOOP1A
MOV P0,#0FEH
MOV 20H,#0EH ;FLAG0=0 JMP MAIN1
LOOP1A:
MOV P0,#0FFH
MOV 20H,#0FH
JMP MAIN1
LOOP2:
JNB FLAG1,LOOP1A
MOV P0,#0FDH
MOV 20H,#0DH ;FLAG1=0 JMP MAIN1
LOOP2A:
MOV P0,#0FFH
MOV 20H,#0FH
JMP MAIN1
LOOP3:
JNB FLAG2,LOOP3A
MOV P0,#0FBH
MOV 20H,#0BH ;FLAG2=0 JMP MAIN1
LOOP3A:
MOV P0,#0FFH
MOV 20H,#0FH
JMP MAIN1
LOOP4:
JNB FLAG3,LOOP4A
MOV P0,#0F7H ;FLAG3=0 MOV 20H,#07H
JMP MAIN1
LOOP4A:
MOV P0,#0FFH
MOV 20H,#0FH
JMP MAIN1
;--------------------------------------------------------- ; 键扫描子程序
;--------------------------------------------------------- K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,#00H
MOV C,K4
CPL C
RLC A
MOV C,K3
CPL C
RLC A
MOV C,K2
CPL C
RLC A
MOV C,K1
CPL C
RLC A
MOV K_NEW,A
RET
;--------------------------------------------------------- ;延时子程序
;--------------------------------------------------------- DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
;可以将 K_SCAN 子程序更改为:
;K_SCAN:
; MOV P1,#0FFH
; MOV K_NEW,#00H
; MOV A,P1
; CPL A
; ANL A,#0F0H
; SWAP A
; MOV K_NEW,A