经典按键防抖动

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档