设首页|收藏

首页  了解我们  站内产品  文章中心  上传下载  电子爱好者联络  在线留言  论坛

 

首页>   51程序实例> 

经典按键防抖动51汇编程序

;四独立按键控制四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

 

  

地址:温州市龙湾区永中镇永兴街道永裕路153号 邮政编码:325024 Email:xdx77@rf315.net
   联系电话:13968800798 传真号码:0577-86939903
   版权所有 2003-2007 温州电子实验室

浙ICP备06042433号