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

📄 key.asm

📁 关于凌阳单片机的应用--语音播报电子钟。功能为实时当前的时间。
💻 ASM
字号:
//=================================================================
//		key.asm		键盘功能
//=================================================================

.INCLUDE   hardware.inc

.PUBLIC    _Key_Scan_ServiceLoop;

.DEFINE C_DebounceCnt	0x0050; //13ms 去抖
.DEFINE C_CONTINUE   	0xB00;  //第二次以后有效


.EXTERNAL  _Key
.EXTERNAL  _KeyPressFlag;  //无键按下时清0;有键按下时B0=1;
                             //第二次以后有效B15=1
.EXTERNAL _SleepFlag

.RAM
.VAR    Key_Buff;           //本次键值暂存单元
.VAR    Key_Debounce;       //计数单元
.VAR    KeyScanLineBuff;


.CODE   
.PUBLIC Key_Scan_Init
Key_Scan_Init: .PROC
       r1=0x0000
       [_Key]=r1
       [Key_Buff]=r1
       [_KeyPressFlag]=r1
       retf
      .ENDP
 
_Key_Scan_ServiceLoop: .PROC
         r1=0x0001;                      // Clear watch dog
		 [P_Watchdog_Clear]=r1;
         r2=[P_IOA_Data]
         r2&=0x00ff
         jnz F_SomeKeyIsPressed
         r1=0x0000
         [Key_Buff]=r1      
         [_KeyPressFlag]=r1    //清0
         r1=1 
         [_SleepFlag] = r1   //置睡眠标志
         retf
//-----------------------------//
 F_SomeKeyIsPressed:    
         r3=[_KeyPressFlag]    //有键按下  B0=1
         r3|=0x0001
         [_KeyPressFlag]=r3   //置按键标志
             
         r3=0 
         [_SleepFlag] = r3      //清睡眠标志
         
         r1=[Key_Buff]    //读上次键值
         [Key_Buff]=r2    //暂存本次键值
         cmp r1,r2
         je L_KS_StableTwoSample
         r1=0x0000
         [_Key]=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:      
        [_Key]=r1   //存有效键值  
        r1=C_CONTINUE
        [Key_Debounce]=r1
        retf
      .ENDP
        
 

⌨️ 快捷键说明

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