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

📄 keyboard.c

📁 用51单片机实现IR解码
💻 C
📖 第 1 页 / 共 2 页
字号:
			 {
			 Key_Code= Panel_Key_Backup;
			 Need_Send_Single_Key=0;
			}
			else
			   Key_Code=0xFF;
			
			Key_Scan_Buffer0=0xFF;
			Key_Scan_Buffer1=0xFF;
			Key_Scan_Buffer2=0xFF;
			Key_Scan_Buffer3=0xFF;
		}
			

} 

#else

#define  SET_KEY_OUT0_LOW       P2=0xFE   //KEY_OUT0=0;// KEY_OUT1=1;KEY_OUT2=1;KEY_OUT3=1;
#define  SET_KEY_OUT1_LOW  	      P2=0xFD //KEY_OUT0=1; KEY_OUT1=0;KEY_OUT2=1;KEY_OUT3=1;
#define  SET_KEY_OUT2_LOW        P2=0xFB  //KEY_OUT0=1; KEY_OUT1=1;KEY_OUT2=0;KEY_OUT3=1;
#define  SET_KEY_OUT3_LOW        P2=0xF7 //KEY_OUT0=1; KEY_OUT1=1;KEY_OUT2=1;KEY_OUT3=0;
#define  SET_KEY_OUT_CANCEL     P2=0xFF //KEY_OUT0=1; KEY_OUT1=1;KEY_OUT2=1;KEY_OUT3=1;
#define   KEY_INPUT_REGISTER      P2
#define GET_SIGNLE_KEY_TIMER 		0x80

void Get_Panel_Click_key()
{
 	U8 get_key_flag,  temp_key_code;
	
 	get_key_flag=0;
	temp_key_code=0xff;
	//check the first line input
                     switch(Key_Scan_Buffer0)
                	{
                	case 0x7:    //key4 presss
					    	Key_Code=0x44; // 0b 0100 0100
			//Tuner.FMFreq=4+9000;	 System_Flag_DispEvent=1; 
						break;
		      case 0xB:     //key3  press
					    	Key_Code=0x43;	// 0b 0100 0011	
			//	Tuner.FMFreq=3+9000;	 System_Flag_DispEvent=1; 
					    	break;
		        case 0xD:    	 //key2 presss
					    	Key_Code=0x42; // 0b 0100 0010
			//	Tuner.FMFreq=2+9000;	 System_Flag_DispEvent=1; 
			       		break;
			case 0xE:   //key1 presss
					    	Key_Code=0x41; // 0b 0100 0001
			//Tuner.FMFreq=1+9000;	 System_Flag_DispEvent=1;   	

						break;
                  	default:
					 	break;
                    	  }

			switch(Key_Scan_Buffer1)
                	{
                	case 0x7:    //key4 presss
					    	Key_Code=0x48; // 0b 0100 0100
						break;
		      case 0xB:     //key3  press
					    	Key_Code=0x47;	// 0b 0100 0011	
					    	break;
		        case 0xD:    	 //key2 presss
					    	Key_Code=0x46; // 0b 0100 0010
			       		break;
			case 0xE:   //key1 presss
					    	Key_Code=0x45; // 0b 0100 0001
						break;
                  	default:
					 	break;
                    	  }
			switch(Key_Scan_Buffer2)
                	{
                	case 0x7:    //key4 presss
					    	Key_Code=0x4C; // 0b 0100 0100
						break;
		      case 0xB:     //key3  press
					    	Key_Code=0x4B;	// 0b 0100 0011	
					    	break;
		        case 0xD:    	 //key2 presss
					    	Key_Code=0x4A; // 0b 0100 0010
			       		break;
			case 0xE:   //key1 presss
					    	Key_Code=0x49; // 0b 0100 0001
						break;
                  	default:
					 	break;
                    	  }
			switch(Key_Scan_Buffer3)
                	{
                	case 0x7:    //key4 presss
					    	Key_Code=0x50; // 0b 0100 0100
						break;
		      case 0xB:     //key3  press
					    	Key_Code=0x4F;	// 0b 0100 0011	
					    	break;
		        case 0xD:    	 //key2 presss
					    	Key_Code=0x4E; // 0b 0100 0010
			       		break;
			case 0xE:   //key1 presss
					    	Key_Code=0x4D; // 0b 0100 0001
						break;
                  	default:
					 	break;
                    	  }

			

		 	
}

void Get_Keyboard_Key()
{

          U8 temp_input;
	  BOOL  has_key_flag;

              has_key_flag=0;

			
		
	//scan the line0
       	SET_KEY_OUT0_LOW;
	
              Delay_xuS(1);
		temp_input=KEY_INPUT_REGISTER&0xF0;
		
		if(temp_input!=0xF0)
			{
			Key_Scan_Buffer0=temp_input>>4;
			has_key_flag=1;
		//	   Tuner.FMFreq=Key_Scan_Buffer0+1000;	 System_Flag_DispEvent=1;
			}

	//scan the line1			
		SET_KEY_OUT1_LOW;

              Delay_xuS(1);
		temp_input=KEY_INPUT_REGISTER&0xF0;
		if(temp_input!=0xF0)
			{
			Key_Scan_Buffer1=temp_input>>4;
			has_key_flag=1;
			//   Tuner.FMFreq=Key_Scan_Buffer1+2000;	 System_Flag_DispEvent=1;
			}
	//scan the line2
		SET_KEY_OUT2_LOW;
	
              Delay_xuS(1);
		temp_input=KEY_INPUT_REGISTER&0xF0;
		if(temp_input!=0xF0)
			  {
			  Key_Scan_Buffer2=temp_input>>4;
			  has_key_flag=1;
			    // Tuner.FMFreq=Key_Scan_Buffer2+3000;	 System_Flag_DispEvent=1;
			  }
  	//scan he line3
	       SET_KEY_OUT3_LOW;
	       Delay_xuS(1);
		temp_input=KEY_INPUT_REGISTER&0xF0;
		if(temp_input!=0xF0)
			{
			Key_Scan_Buffer3=temp_input>>4;
			has_key_flag=1;
			 //  Tuner.FMFreq=Key_Scan_Buffer3+4000;	 System_Flag_DispEvent=1;
			}

		SET_KEY_OUT_CANCEL;

		
	

		if(has_key_flag==1)
		{
		 Get_Key_Counter++;
	   	}
		else
		{
		No_Key_Counter++;
		}
		
            if(Enable_Get_Key==1)
            	{
		
			if(Get_Key_Counter>80)
				{

	                           if(Get_Key_Counter>No_Key_Counter+10)    //No_Key_Counter+10-100))
					{
						Get_Panel_Click_key();
						//Tuner.FMFreq=Key_Code-0x40+9000;	 System_Flag_DispEvent=1;   
						//Key_Code=0xff;
	                       	}
				      
					//process  the repeat key input 
				       if(Key_Code==KEY_FP_TRACK_DOWN
					   	||Key_Code==KEY_FP_TRACK_UP)
					  {
					           
                                   
						 	  if(Flag_Get_Hold_Key)
					            	{
					            	           //when get hold key ,we mask some key
								      if(Get_Key_Counter>80)
									 {
										         //the key is hold
										         No_Key_Counter=0;
											 Get_Key_Counter=0;
											// Key_Code=0xFF;
											
											  
		                                                   }
									else		
								 	        Key_Code=0xFF;
									
									 Need_Send_Single_Key=0;	
										
								 	
						        }
							 else
							  {      
							          Need_Send_Single_Key=1;
							                 Panel_Key_Backup=Key_Code;
							                 Key_Code=0xFF;
							            if(Get_Key_Counter>1000)
									  Flag_Get_Hold_Key=1;
							  }
						 						
							 Enable_Get_Key=1;
					            

				         }
				        else if(FP_Key_Hold_Enable_Table[Key_Code-0x40])    
						//	==KEY_FP_TUNER_AREA||Key_Code==KEY_FP_PROGRAM) 
					  {//process the Hold key

									//get the hold key and send it ,then disable the input until key release
							            if(Get_Key_Counter>3000)
								     {
									  Enable_Get_Key=0;
									 Need_Send_Single_Key=0;
									 Key_Code=Key_Code+0x80;
									
							            	}
							 		else
									{//only get the single press key,send the key after key release
							 		   Enable_Get_Key=1;
					            	                 Need_Send_Single_Key=1;
							                 Panel_Key_Backup=Key_Code;
							                 Key_Code=0xFF;

									}

					  }
					   else
					 {
				               Enable_Get_Key=0;
					         Get_Key_Counter=0;
	                                     No_Key_Counter=0;//No_Key_Counter=100;
                                         Flag_Get_Hold_Key=0;
					}

				}
            	}

		
		if(No_Key_Counter>10)//No_Key_Counter>130)
		{
			//Tuner.FMFreq=Get_Key_Counter;	 System_Flag_DispEvent=1;   	
                    Enable_Get_Key=1;
			No_Key_Counter=0;//No_Key_Counter=100;
			Get_Key_Counter=0;
			Flag_Get_Hold_Key=0;
			//send the backup key
			if( Need_Send_Single_Key)
			 {
			 Key_Code= Panel_Key_Backup;
			 Need_Send_Single_Key=0;
			}
			else
			   Key_Code=0xFF;
			
			Key_Scan_Buffer0=0xFF;
			Key_Scan_Buffer1=0xFF;
			Key_Scan_Buffer2=0xFF;
			Key_Scan_Buffer3=0xFF;
		}
			

} 

#endif







⌨️ 快捷键说明

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