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

📄 keyboard.c

📁 TMS320LF2407 DCMotor
💻 C
字号:
#include "regs240x.H"

//==================================                                    
volatile ioport unsigned int port0a;		//KBD scan(0-3)
volatile ioport unsigned int port0b;      //KBD scan(4-5)
volatile ioport unsigned int port0c;      //KBD input(0-3)
volatile ioport unsigned int port0d;      //KBD input(4-5)

#define KBDSCANLOW 	port0a;      
#define KBDSCANHIGH	port0b;
#define KBDINLOW 	port0c;
#define KBDINHIGH	port0d;  

#define KEYBUFFERLEVEL 	64   
#define KEYWIDTH		6
#define KEYHEIGHT		6

//key value defination        
#define PAGEUP		50
#define PAGEDOWN    51                              
#define ENTER		52
#define CANCEL		53
#define BACKSPACE	54
#define UP			55
#define DOWN        56
#define LEFT		57
#define RIGHT		58
//key map
static unsigned int keymap[KEYHEIGHT*KEYWIDTH] = {
//  0    1     2    3      4  	 5   6 7 8  9  10        11  12  14  16           18  20  22         24	
	LEFT,RIGHT,DOWN,CANCEL,ENTER,255,8,9,UP,13,BACKSPACE,255,4,5,6,7,PAGEDOWN,255,0,1,2,3,PAGEUP,255,255,
//					  	                                       13  15         17    19  21       23 
//	25  26	27  28  29  30  31  32  33  34  35		为得到的物理键值,作为数组序号
  	255,255,255,255,255,255,255,255,255,255,255		//为用户自定义的键盘映像
};
/*
static unsigned int keymap[KEYHEIGHT*KEYWIDTH] = {
//  0       1   2 3 4 5   6 7 8 9 1011  12    14  16    18  20        22    24	
	NUMLOCK,255,1,4,7,255,/,0,2,5,8,255,*,DEL,3,6,9,255,-,1,ENTER,255,+,255,255,
//					  	                  13    15  17    19      21    23 
//	25  26	27  28  29  30  31  32  33  34  35		为得到的物理键值,作为数组序号
  	255,255,255,255,255,255,255,255,255,255,255		//为用户自定义的键盘映像
};
*/        
unsigned int keybuff[KEYBUFFERLEVEL];		//Key Input Buffer, level 16 in all
unsigned int keyold;            //Oldest key of not processed
unsigned int keynew;            //Newest key of inputted
                     
void KBDInit(void){
	keynew = 1;
	keyold = 0;
	
    XINT1CR = 0x03;	//Falling edge | low polarity | enable INT1
    IFR = 0xFFFF;		//Write 1s into IFR to clear any INT flag existed
	IMR = 0x21;			//Unmask only INT1
	asm("	CLRC	INTM ");			//Enable all inttrupts.		
}                     


/*void interrupt c_int1()
{   
	int i;  
	int portin[4],keyx,keyy;
	    
	asm("	SETC	INTM ");			//Disable all inttrupts.
	//========================= 
    //=========================  
    XINT1CR = 0x8001;
    IFR = 0xFFFF;		//Write 1s into IFR to clear any INT flag existed
    asm("	CLRC	INTM ");			//Enable all inttrupts.
}  
*/                     
void interrupt c_int6()
{   
	int i;  
	int portin[4],keyx,keyy;
	    
	asm("	SETC	INTM ");			//Disable all inttrupts.
	//========================= 
	if( keynew != keyold )
	{	i = 0;            
    	portin[i++] = KBDSCANHIGH;
    	portin[i++] = KBDSCANLOW;
    	portin[i++] = KBDINHIGH;
    	portin[i++] = KBDINLOW;   

		keyx = (0x3f-((portin[1] & 0x0f) | (portin[0] << 4) & 0x030));
		keyy = (0x3f-((portin[3] & 0x0f) | (portin[2] << 4) & 0x030));
		
		for( i=0;i<KEYHEIGHT;i++ ){
			if( (keyx & (1<<i)) ){
				keyx = i;         
				break;
			}		
		}
		for( i=0;i<KEYWIDTH;i++ ){
			if( (keyy & (1<<i)) ){
				keyy = i;         
				break;
			}		
		}            
		keybuff[keynew++] = keymap[keyy + keyx * KEYWIDTH]; 
		if( keynew > KEYBUFFERLEVEL ){
			keynew = keynew - KEYBUFFERLEVEL ;
		}
    }
    //=========================  
    XINT1CR = 0x8003;

    asm("	CLRC	INTM ");			//Enable all inttrupts.
}  

⌨️ 快捷键说明

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