📄 keyboard.c
字号:
{
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 + -