📄 key.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 + -