⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_example.s

📁 非常经典的多按键防抖动的源程序
💻 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 + -