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

📄 key.asm

📁 EVB061Test-KEY程序 凌阳61板的测试程序
💻 ASM
字号:
//========================================================================================
// Progarm: The head file for key.asm in assembly view
// Arranged by: Andy Hsu
// Last modified date: 
// 		2000/06/23: first version
//		2000/07/20: modified
//
// Functions:
//  F_Key_Scan_Initial;
//  F_Key_Scan_ServiceLoop;
//  F_Key_DebounceCnt_Down;
//
//	call F_SP_GetCh;		
//========================================================================================

//========================================================================================
// Progarm: The head file for key.asm in assembly view
// Arranged by: Andy Hsu
// Last modified date: 
// 		2000/06/23: first version
//		2000/07/20: modified
//
// Functions:
//  F_Key_Scan_Initial;
//  F_Key_Scan_ServiceLoop;
//  F_Key_DebounceCnt_Down;
//
//	call F_SP_GetCh;		
//========================================================================================
.INCLUDE hardware.inc;

.external F_SP_INT_64Hz									


.PUBLIC	F_Key_Scan_Initial;
.PUBLIC F_Key_Scan_ServiceLoop;
.PUBLIC F_Key_Scan_ServiceLoop_2;
.PUBLIC F_Key_DebounceCnt_Down;
.PUBLIC _SP_GetCh;
.PUBLIC	F_SP_GetCh;

.PUBLIC R_KeyStrobe;

//////////////////////////////////////////////////////////////////
// RAM Define Area								
//////////////////////////////////////////////////////////////////
.RAM
.VAR	R_DebounceReg;						//for keyboard scan
.DEFINE C_DebounceCnt			0x0002;		

.VAR	R_DebounceCnt;						//for keyboard scan
.VAR	R_KeyBuf;							//for keyboard scan
.VAR	R_KeyStrobe;						//for keyboard scan

.CODE
//////////////////////////////////////////////////////////////////
// Function: Initialization for F_Key_Scan_ServiceLoop
//////////////////////////////////////////////////////////////////     
F_Key_Scan_Initial:
		r1 = 0x0000;					//
		[R_DebounceReg] = r1;			//
		[R_KeyBuf] = r1; 				//
		[R_KeyStrobe] = r1;				//
		r1 = C_DebounceCnt;				//
		[R_DebounceCnt] = r1;			//reset debounce counter
		retf;

//////////////////////////////////////////////////////////////////
// Function: Get Key code from key pad(8 x 1 key pad)
// Input: Port IOA b7-b0
// Output: R_KeyStrobe b7-b0
//          | 	  |     |     | 
// +Vcc --- x --- x ... x --- x ---   
//          |     |     |     |
//          IOA.7             IOA.0
// Note: 1)link F_DebounceCntDown is necessary 
// Destory register: r1, r2                                            
////////////////////////////////////////////////////////////////// 
F_Key_Scan_ServiceLoop:
		
     	r1 = [P_IOA_Data];			// get key data from IOA   
    	//r1 = [P_IOB_Data];			// get key data from IOB
	    	
        r1 = r1 and 0xff;				//
        r2 = [R_DebounceReg];			//
        [R_DebounceReg] = r1;			//
        cmp r2,[R_DebounceReg];			//
        je	L_KS_StableTwoSample;		//
        
        r1 = C_DebounceCnt;				//debounce time setting
        [R_DebounceCnt] = r1;			//
        retf;							//
        
L_KS_StableTwoSample:
		r1 = [R_DebounceCnt];			//
		jz	L_KS_StableOverDebounce;	//
		retf;
	
L_KS_StableOverDebounce:        
		[R_DebounceCnt] = r1;			//
		r2 = [R_DebounceReg];			//
		r1 = [R_KeyBuf];				//
		[R_KeyBuf] = r2;				//
		r1 = r1 xor 0x00ff;				//
		r1 = r1 and [R_KeyBuf];			//
		r1 = r1 and 0x00ff;				//
		r1 = r1 or [R_KeyStrobe];		//
		[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
		retf;		
	
//////////////////////////////////////////
// 
//////////////////////////////////////////
F_Key_Scan_ServiceLoop_2:
	
	
		r1 = [P_IOA_Buffer];			// PortA.7 low(scan line +Vcc)
		r1 &= 0xFF7F;		
		[P_IOA_Buffer] = r1;
		
     	r1 = [P_IOA_Data];			// get key data from IOA   
    	//r1 = [P_IOB_Data];			// get key data from IOB
    	r1 &= 0x000F;					//
	    r2 = r1; 						// key from +Vcc
    	r3 = r2 xor 0xffff;				// Be a +Vcc mask
    
    	// delay here
	    nop;
    	nop;
    	nop;
	    
	 	r1 = [P_IOA_Buffer];			// PortA.7 high(scan line)
		r1 |= 0x0080;					//
		[P_IOA_Buffer] = r1;			//	
		   
		r1 = [P_IOA_Data];				//
		//r1 = [P_IOB_Data];			// get key data from IOB
		r1 &= 0x000F;					//
		r1 ^= r2;						// possible bits by scan line
		r1 &= r3;						// do +Vcc mask   
		
		r1 = r1 lsl 4;					//
		r1 |= r2;						//
    	//r2 = r2 lsl 4;				//
		//r1 |= r2;						//	    	
		    
        r1 = r1 and 0xFF;				// mask bit[0..7]
        
        r2 = [R_DebounceReg];			//
        [R_DebounceReg] = r1;			//
        cmp r2,[R_DebounceReg];			//
        je	L_KS_StableTwoSample_2;		//
        
        r1 = C_DebounceCnt;				//debounce time setting
        [R_DebounceCnt] = r1;			//
        retf;							//
        
L_KS_StableTwoSample_2:
		r1 = [R_DebounceCnt];			//
		jz	L_KS_StableOverDebounce_2;	//
		retf;
	
L_KS_StableOverDebounce_2:        
		[R_DebounceCnt] = r1;			//
		r2 = [R_DebounceReg];			//
		r1 = [R_KeyBuf];				//
		[R_KeyBuf] = r2;				//
		r1 = r1 xor 0x00ff;				//
		r1 = r1 and [R_KeyBuf];			//
		r1 = r1 and 0x00ff;				//
		r1 = r1 or [R_KeyStrobe];		//
		[R_KeyStrobe] = r1;				//save stable key code to R_KeyStrobe
		retf;

//////////////////////////////////////////////////////////////////
// Function: debounce counter down count
//////////////////////////////////////////////////////////////////
F_Key_DebounceCnt_Down:
		r1 = [R_DebounceCnt];			// Debounce subroutine for F_IO_Key_Scan:
		jz	L_DebounceCntZero;			// stop count if zero
		r1 -= 0x0001;					//
		[R_DebounceCnt] = r1;			//
L_DebounceCntZero:						//
		retf;  							//	


//****************************************************************
// Function: Get Keycode for I/O Port                                 
// Destory register: r1, r2                          
//****************************************************************
_SP_GetCh:					
F_SP_GetCh:
		//push	BP,BP to [SP];
  		//BP = SP + 1;
		  
		r1 = [R_KeyStrobe];				// Get Key code
        r2 = 0x0000;					// Clear KeyStrobe for next key	
        [R_KeyStrobe] = r2;				//
        //pop		BP,BP from [SP];
        retf;


//========================================================================================        
// End of key.asm
//========================================================================================
     

//========================================================================================        
// End of key.asm
//========================================================================================

⌨️ 快捷键说明

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