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

📄 keyscan_new.asm

📁 基于凌阳单片机数字电子钟的C语言源代码 基于凌阳单片机数字电子钟的C语言源代码
💻 ASM
字号:
//=================================================================
//		key.asm		键盘功能
//=================================================================

.INCLUDE   SPCE061A.inc
.PUBLIC    _keyscan
.DEFINE C_DebounceCnt	0x0050; //13ms 去抖
.DEFINE C_CONTINUE   	0xB00;  //第二次以后有效
.EXTERNAL  _keyvalue
.EXTERNAL  _keypressflag;  //无键按下时清0;有键按下时B0=1                             //第二次以后有效B15=1
.RAM
.VAR    Key_Buff;           //本次键值暂存单元
.VAR    Key_Debounce;       //计数单元
.VAR    KeyScanLineBuff;
.CODE   
.PUBLIC  _keyinitial
_keyinitial: .PROC
       r1=0x0000
       [_keyvalue]=r1
       [Key_Buff]=r1
       [_keypressflag]=r1
       r1&=0xfff0
       [P_IOA_Dir]=r1
       [P_IOA_Attrib]=r1
       [P_IOA_Data]=r1
       retf
      .ENDP
_keyscan: .PROC
         r1=0x0001;                      // Clear watch dog
		 [P_Watchdog_Clear]=r1;
         r2=[P_IOA_Data]
         r2&=0x000f
         jnz F_SomeKeyIsPressed
         r1=0x0000
         [Key_Buff]=r1      
         [_keypressflag]=r1    //清0
         r1=1 
         retf
//-----------------------------//
 F_SomeKeyIsPressed:    
         r3=[_keypressflag]    //有键按下  B0=1
         r3|=0x0001
         [_keypressflag]=r3   //置按键标志        
         r1=[Key_Buff]    //读上次键值
         [Key_Buff]=r2    //暂存本次键值
         cmp r1,r2
         je L_KS_StableTwoSample  //相等则跳转
         r1=0x0000
         [_keyvalue]=r1
         r1=C_DebounceCnt    //初始化计数单元
         [Key_Debounce]=r1  
         retf
        
   
L_KS_StableTwoSample:       
	     r1=[Key_Debounce]
         jz L_KS_StableOverDebounce
         r1-=1              //计数减 1
         [Key_Debounce]=r1    
         retf   
         

L_KS_StableOverDebounce:   //形成键码
		r1=[Key_Buff]       //暂存值

        r3=0x8000    //是第一次有效吗?
        test r3,[_keypressflag]   
        jz Key_First_Avail

        r1|=0x8000       //连续按键有效         ///////////////////////
        jmp  Key_Get_Value
        
Key_First_Avail:    //第一次有效        
       r3=[_keypressflag]    //有键按下  B15=1
       r3|=0x8000
       [_keypressflag]=r3   
       
Key_Get_Value:      
        [_keyvalue]=r1   //存有效键值  
        r1=C_CONTINUE
        [Key_Debounce]=r1
        retf
      .ENDP
        
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -