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

📄 keyboard.c

📁 嵌入式实时操作系统uc/OS-II于s3c2410的开发测试程序2源代码
💻 C
字号:
#include	"..\INC\includes.h"               /* uC/OS interface */

void Read_value(int data);
void __irq Keyboard_Int(void);

volatile U16 value=16;
volatile U32 keyend;					   						   
unsigned char Scandata[4][4]={  
                         		{15,14,13,12},
                          		{11,10,9,8},
                          		{7,6,5,4},
                         		{3,2,1,0} 
                             };
unsigned char  st[4][4]= {  
                           {0x8e,0x86,0xa1,0xc6},
                           {0x83,0x88,0x90,0x80},
                           {0xf8,0x82,0x92,0x99},
                           {0xb0,0xa4,0xf9,0xc0}
                         };

U16 Test_keyboard()
{
	int i;
	unsigned int save_B,save_G,save_E,save_UE,save_F,save_UF;
	keyend=0;
	save_B=rGPBCON;
	save_F=rGPFCON;
	save_E=rGPECON;
	save_UE=rGPEUP;
	save_UF=rGPFUP;
	save_G=rGPGCON;	
	
	rGPBCON &= 0x3ffffd;
	rGPBCON |= 0x01;  //GPB0 OUT
	
	rGPBDAT = 0x0;
	
	rGPECON=rGPECON & 0xffC03d45;	
	rGPECON=rGPECON | 0x145;    //GPE0\1\3\4:Output;GPE2,GPE7~GPE10:Input
	rGPEUP=rGPEUP | 0x1b;	    //GPE0\1\3\4 pull-up DISABLE	

	rGPEDAT = rGPEDAT & 0xffe4; //GPE0\1\3\4:Output0
	 
	rGPGCON &= 0xffffffd5;
	rGPGCON |= 0x15;            //GPG0,1,2  IO about smg
	
	rGPGDAT=0x0;
	rSMG0= 0xb6;
	rGPGDAT=0x7;     

	     rGPEDAT = rGPEDAT & 0xfffe;//置GPE0为低,扫描键盘第四行
	  	 rGPEDAT = rGPEDAT | 0x1a;	//GPE1、3、4为高
	  	 i=3;	//KEY 0 1 2 3 	
	  	 Read_value(i);
	  	 rGPEDAT = rGPEDAT & 0xfffd;//置GPE1为低,扫描键盘第三行
	  	 rGPEDAT = rGPEDAT | 0x19;	//GPE0、3、4为高
	  	 i=2;   //KEY 4 5 6 7 
	  	 Read_value(i);
		 rGPEDAT = rGPEDAT & 0xfff7;//置GPE3为低,扫描键盘第二行
	  	 rGPEDAT = rGPEDAT | 0x13;	//GPE0、1、4为高
	  	 i=1;   //KEY 8 9 A B 
	  	 Read_value(i);
	  	 rGPEDAT = rGPEDAT & 0xffef;//置GPE4为低,扫描键盘第一行
	  	 rGPEDAT = rGPEDAT | 0x0b;	//GPE0、1、3为高
	  	 i=0;   //KEY C D E F
	  	 Read_value(i);
	  	 return value;
	  	 	
}
			  	               
void Read_value(int data)
{   
	 unsigned int keydata1,keydata2;
	 
	 keydata1=(rGPEDAT>>7) & 0xf;
	 Delay(100);
	 keydata2=(rGPEDAT>>7) & 0xf;	
	 if(keydata1==keydata2)
	 
	 {
	 switch(keydata1)
	 	  {
	 		
	 	    case(0x7)://KEY 0 4 8 C
	   		
	   			rGPGDAT=0x0;             
	   			rSMG0= st[data][3];
	   		    rGPGDAT=0x7;             
	   			value=Scandata[data][3];
	   			break;
	   			
	   		case(0xb)://KEY 1 5 9 D
	   		
	   			rGPGDAT=0x0;             
	   			rSMG0= st[data][2];
	   			rGPGDAT=0x7;             
	   			value=Scandata[data][2];
	   			break;
	   			
	   		case(0xd)://KEY 2 6 A E
	   		
	   			rGPGDAT=0x0;            
	   			rSMG0= st[data][1];
	   			rGPGDAT=0x7;             
	   			value=Scandata[data][1];	
	   			break;
	   			
	   		case(0xe)://KEY 3 7 B F
	   		
	   			rGPGDAT=0x0;            
	   			rSMG0= st[data][0];
	   			rGPGDAT=0x7;             
	   			value=Scandata[data][0];
	   			break;	
	   		
	   		default:
	   			break;   	
	   		}				 	
	  } 
	  
}

⌨️ 快捷键说明

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