首页 > 代码库 > 键值转换--复杂按键事件识别程序(链接层)

键值转换--复杂按键事件识别程序(链接层)

复杂按键事件识别程序(链接层)


复杂按键包括多个按键的单按事件、长按事件、连按事件、组合按键事件等
本程序为链接层程序,处理和识别按键驱动层扫描到的按键信息g_u8KeyValue。(g_u8KeyValue的每一位表示一个按键)
单按事件在按下键松开时判定,其它按键情况在达到规定的时间后触发相应按键事件。

宏定义:

//宏定义各按键按下时的bit值
#define KEY_EVENT_NULL_CLICK     0x00
#define KEY_EVENT_CLOCK_CLICK    0x01   
#define KEY_EVENT_DOWN_CLICK     0x02 
#define KEY_EVENT_MODE_CLICK     0x04   
#define KEY_EVENT_LOCK_CLICK     0x08
#define KEY_EVENT_ONOFF_CLICK    0x10
#define KEY_EVENT_SETTING_CLICK  0x20
#define KEY_EVENT_UP_CLICK       0x40
#define KEY_EVENT_TIMING_CLICK   0x80
#define KEY_EVENT_LONG_KEY_CLICK 0xff  //长按标志

//组合键
#define KEY_EVENT_SETTING_UP_CLICK     0x60
#define KEY_EVENT_SETTING_ONOFF_CLICK  0x30
#define Key_EVENT_MODE_UP_DOWN_CLICK   0x46

#define KEY_PRESS_TIME  80      //单按按键事件按下的时间
#define KEY_SINGLE_TIME 1000    


 u8 g_u8KeyValue;

/*******************************************************************************
#Function      :   Link_KeyTrans 
#Description   :   按键转换   g_u8KeyValue 为 按键扫描出来的键值 即标志该时刻对应按键是否按下
#Parameter     :   NULL
#Return        :   NULL
#AuthorAndData :   huangzhigang 20140716  
*******************************************************************************/
void  Link_KeyTrans(void)
{
  static uint8_t KeyBackUp = KEY_EVENT_NULL_CLICK;   //键值备份
  
  static TIMER_T KeyDelayTime;
  App_TimeBase(MS_BASE, &KeyDelayTime);
  
  if(g_u8KeyValue =http://www.mamicode.com/= KEY_EVENT_SETTING_UP_CLICK)     //设置+上 组合键3s>




键值转换--复杂按键事件识别程序(链接层)