📄 key_example.s
字号:
经典按键防抖动51汇编程序(zt)
经典按键防抖动51汇编程序(zt)
cxjr 发表于 2006-10-12 12:41:00 阅读全文(496) | 回复(2) | 引用通告(0) | 编辑
;四独立按键控制四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
; RET
;---------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -