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

📄 key.c

📁 三星单片机S3C9234的键盘扫描与处理程序。
💻 C
字号:
/**************************************************
*库函数的申明与引用
**************************************************/
#include "..\inc\key.h" 
/**************************************************
*变量 
**************************************************/
//键盘的代码值
//__code const volatile unsigned char Grp_Code_Key[10]=
unsigned char Grp_Code_Key[11]=
{
	0x1D,//K2 POWER	
	0x1E,//K1 CLEAN	
	0x2E,//K4 HOUR	
	0x36,//K7 MINUTE	
	0x33,//K9 AUTO	
  	0x1B,//K3 1-4CUP	
	0x35,//K8 TSB
	0x2B,//K6 KEEP
	0x2D,//K5 PRO
	0x11,//exit
};                               

unsigned char Global_Data_Key    			  					; 			 	//键值全局变量
//unsigned char Global_Count_Key_Scan     					; 			 	//键扫描全局变量
unsigned char Global_Count_Beep       						; 			 	//蜂鸣器计数
unsigned char Global_Data_Beep										;				 	//蜂鸣器时间
unsigned char Global_Count_Keysure								;					//键值确认次数
unsigned char Global_Count_Backlight_15_Timer			;				  //背光15分钟计数
/**************************************************
*读键 
**************************************************/
unsigned char Key(void)
{
	unsigned char Internal_Data_Key_After   				;					//键数据缓存
	unsigned char Internal_Data_Key_Before  				;					//键数据缓存
	unsigned char Internal_Cycle_i				;

//----------------------读键值--------------------- 
	P1CONH &= 0xF0;   // 1.4 1.5 INPUT
	P1CONH |= 0x0A;	//OUTPUT 1.4 1.5
	P1CONL = 0xAA;	 // output 1.0 1.1.1.2.1.3
	P1 &= 0xC0;		//IO口清零
	P1 |= 0x38;	      //P1.3-P1.5置1
	P1CONH &= 0xF0; // INPUT 1.4 1.5
	//P1CONH |= 0x00;	//无用
	P1CONL = 0x2A;	//OUTPUT p1.0-p1.2
	Internal_Data_Key_After	= P1;
	Internal_Data_Key_After &= 0x3f; 
	if(Internal_Data_Key_After != 0x38)
	{
		P1CONH &= 0xF0;
		P1CONH |= 0x0A;	
		P1CONL = 0xAA;	
		P1 &= 0xC0;		
		P1 |= 0x07;	
		P1CONH &= 0xF0;		
		P1CONH |= 0x0A;	//OUTPUT 1.4 1.5
		P1CONL = 0x80;	//OUTPUT 1.3
		Internal_Data_Key_Before = P1;
		Internal_Data_Key_Before &= 0x3f;			
		if(Internal_Data_Key_Before != 0x07)
		{
		  Internal_Data_Key_Before |= Internal_Data_Key_After;
//----------------------查表--------------
			for(Internal_Cycle_i=0; Internal_Cycle_i!=10; Internal_Cycle_i++)
			{
				if(Internal_Data_Key_Before == Grp_Code_Key[Internal_Cycle_i])
				{								
					return Internal_Cycle_i;				
				}				
			}	
			Flag_Key_Key = 1;		
			return 	48;					
		}								
	} 
	return 0xFF; 
}
/**************************************************
*键值处理
**************************************************/
void KeyDataProcess(void)
{
	unsigned char Internal_Data_Key_Read;	
	
	
//--------------------读键值   
	Internal_Data_Key_Read = Key();	
	if(Internal_Data_Key_Read == 48)
	{
	 Bits_Data_Key &= 0x9e;// or 0x01 and by yang 清除时间按键标志
	  Global_Count_Keysure = 0;	
	}
	if(Global_Data_Key==9)
	
	{
		if(Internal_Data_Key_Read==0 || (Internal_Data_Key_Read>=4 && Internal_Data_Key_Read<=6))	
		{
			Flag_Key_Key = 1;
		}
	}
//------------------取键值
	if((Internal_Data_Key_Read==Global_Data_Key) && (Internal_Data_Key_Read!=0xFF))
	{		
		if(Global_Count_Keysure != 8)
		{ 
			Global_Count_Keysure++;			 
		}
		else
		{
			Flag_Key_Release = 1; 
		}
	}	
//--------------------保存键值  		
	if((Internal_Data_Key_Read != Global_Data_Key) && !Flag_Key_Key )
	{	
		Global_Data_Key = Internal_Data_Key_Read;	
		Flag_Key_Release = 0;   
         	Global_Count_Keysure = 0;		 
	}		
//-------------------键释放	
	if(Internal_Data_Key_Read == 0xFF)
	{		           
 		Flag_Key_Key = 0;   	
		Global_Data_Key = 0xFF;
		Bits_Data_Key   = 0x00;  
		Bits_Data_Key_1 &= 0xE0;		 
		Global_Count_Keysure = 0;
	}	 
//-------------------键值处理
	//if(Global_Count_Keysure==4) 
	//		Bits_Data_Key &= 0x87;
	if((Global_Count_Keysure==4) && !Flag_Key_Release)         
	{     			
//============================背光处理  
		Global_Count_Backlight_15_Timer = 0;
	
		switch (Internal_Data_Key_Read)
		{
		case 0:
			{	
				Flag_Key_Power = 1;	
			}
			break;
		case 1:
			{
				Flag_Key_Clean = 1;	
			}
			break;
		case 2:
			
			{	
				Flag_Key_Hour = 1;	
				Flag_Key_Rehour = 1;
			}
			break;
		case 3:
			
			{	
				Flag_Key_Minute = 1;	
				Flag_Key_Reminute = 1;
			}
			break;
		case 4:
			
			{
				Flag_Key_Order = 1;	
			}
			break;
		case 5:
			
			{
				Flag_Key_1_4_Cup = 1;		
			}
			break;
		case 6:
			
			{
				Flag_Key_Tsb = 1;	
			}
			break;	
		case 7:
			
			{
				Flag_Key_Keep_Warm = 1;		
		  	Flag_Key_Rekeep_Warm = 1;
			}
			break;
		case 8:
			
			{
				Flag_Key_Programmer = 1;	
			}
			break;
		case 9:
			
			{       
			  Flag_Clean_Clean=1;
			}
			break;
		default:
			{
			}
			break;
		}
		
	}

}

⌨️ 快捷键说明

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