按键检测是一种很基础的嵌入式应用,该案例提供了一种低资源消耗,非阻塞式的按键检测功能,能区分长按,短按。还可以根据自己需要添加连按触发事件。
/********************************************************************
* name :
* description : 按钮开关检测,按下为低电平,松开为高电平。
* Input :
* Output :
* Return :
********************************************************************/
void SwtichDec(void)
{
uint16_t sGapTime = 200; //消抖时间
static uint32_t sSWTimer = 0;
static uint8_t sCnt = 0;
uint32_t sTime = 0;
sTime = HAL_GetTick();
if(sTime > sSWTimer)
{
sSWTimer = sTime + sGapTime;
if(HAL_GPIO_ReadPin(UpDown_GPIO_Port,UpDown_Pin) == GPIO_PIN_SET) //按钮释放
{
if(sCnt >= 4)
{
/*******长按触发事件 *******/
/**************************/
}
else if(sCnt >= 1)
{
/*******短按触发事件 *******/
/**************************/
}
sCnt = 0;
}
else //按钮按下
{
sCnt++;
}
}
}