高级会员

- 积分
- 572
- 金钱
- 572
- 注册时间
- 2015-8-3
- 在线时间
- 113 小时
|
bool keyLastStatus = false;/*用来记录按键上一次电平状态*/
#define KEY_STATUS ((/*为引脚电平读取函数如:GPIO_PinRead(CORE_BOARD_KEY_GPIO, CORE_BOARD_KEY_GPIO_PIN) == KEY_ON*/)?true:false)
/*按键状态枚举值*/
typedef enum {
KEY_PRESS, /*按下*/
KEY_PRESSING, /*任然按下*/
KEY_RELEASE, /*弹起*/
KEY_NONE, /*未按下*/
}KeyState_t;
/*获取按键状态*/
KeyState_t GetKeyStatus(bool thisStatus,bool *lastStatus)
{
KeyState_t KeyState = KEY_NONE;
if ( (thisStatus) && (!(*lastStatus)) )
{
KeyState = KEY_PRESS;
}
else if ( (!thisStatus) && (*lastStatus) )
{
KeyState = KEY_RELEASE;
}
else if( thisStatus && (*lastStatus) )
{
KeyState = KEY_PRESSING;
}
else if( (!(thisStatus)) && (!(*lastStatus)) )
{/*其实这里可要可不要*/
KeyState = KEY_NONE;
}
*lastStatus = thisStatus;
return KeyState;
}
/*用法,此函数按一定周期定时执行*/
void KeyScan(void)
{
KeyState_t KeyState = GetKeyStatus(KEY_STATUS,&keyLastStatus);
if(KeyState == KEY_PRESS)
{
/*do something*/
}
if(KeyState == KEY_RELEASE)
{
/*do something*/
}
if(KeyState == KEY_PRESSING)
{
/*do something*/
}
}
|
|