1、 拿到代码后,根据自己实际情况修改F_Key_Scan函数。
// 逻辑按键定义
#define KEYMAP_UNIT 0x01
#define KEYMAP_SET 0x02
#define KEYMAP_ADD 0x04
#define KEYMAP_DEC 0x08
uint8_t F_Key_Scan(void)
{
static bool key_up_sta=1;
static bool key_set_sta=1;
static bool key_dn_sta=1;
static bool key_uint_sta=1;
uint8_t KeyVal = 0;
if(0==HalGpioGet(KEY_UP))
{
KeyVal |= KEYMAP_ADD;
if (key_up_sta==1)
{
key_up_sta=0;
LOG("P0 press UP\r\n");
}
} else
{
key_up_sta = 1;
}
if(0==HalGpioGet(KEY_SET))
{
KeyVal |= KEYMAP_SET;
if (key_set_sta==1)
{
key_set_sta=0;
LOG("P1 press SET\r\n");
}
} else
{
key_set_sta=1;
}
if(0==HalGpioGet(KEY_DN))
{
KeyVal |= KEYMAP_DEC;
if (key_dn_sta==1)
{
key_dn_sta=0;
LOG("P2 press DN\r\n");
}
} else
{
key_dn_sta = 1;
}
if(0==HalGpioGet(KEY_UNINT))
{
KeyVal |= KEYMAP_UNIT;
if (key_uint_sta==1)
{
key_uint_sta=0;
LOG("P3 press UNINT\r\n");
}
} else
{
key_uint_sta = 1;
}
return (KeyVal);
}
2、 逻辑按键动作类型定义
会产生四种消息:长按、维持、松开、按下
#define KEYACT_SHORTPRESS 0
#define KEYACT_LONGPRESS 0x80
#define KEYACT_HOLDPRESS 0x40
#define KEYACT_RELEASE 0x20
3、 使用流程:
①将R_CurKey_TimeCnt放到8ms的定时器中,大于0自减。
if(R_CurKey_TimeCnt > 0)
{
R_CurKey_TimeCnt--;
}
②F_Key_Scan获取按键状态值。
③F_Get_Key_handler函数处理产生的按键,同时发送消息
④F_Proc_Key处理消息函数
4、 F_Proc_Key处理消息函数,消息可以自定义组合。