按键处理

来源:互联网 发布:centos安装git服务器 编辑:程序博客网 时间:2024/04/30 08:00

对于按键的单双击、长按等设计,需要使用一些定时器代替延时,提高效率,设计方法有很多种,下面介绍一种中断的处理方法:


1、中断后触发该函数

 void Board_keyCallback()
{
  if (PIN_getInputValue(Board_KEY_BUTTON))
  {
    //release button
    if (isLastButtonValueLongPress == 1)
    {
        //skip it
        isLastButtonValueLongPress = 0;
        return ;
    }
    sendButtonValue++;
    isRefreshButtonValue = BUTTON_REFRESH_MULTICLICK;
  }
  else
  {
    //press button
    isRefreshButtonValue = BUTTON_REFRESH_LONGPRESS;
    isLongPressTimes = 0;
  }


  此处添加定时器程序代码,定时触发下面的函数。

}



2:、1中定时器触发下面的函数

void Board_keyChangeHandler()
{
  if (appKeyChangeHandler == NULL)
  {
    return;
  }
  
  if (isRefreshButtonValue == BUTTON_REFRESH_MULTICLICK)
  {
    if (sendButtonValue > BUTTONVALUE_TRIPLE_CLICK)
        sendButtonValue = BUTTONVALUE_TRIPLE_CLICK;
   //此处发送按键状态点击次数给应用函数 

   (*appKeyChangeHandler)(sendButtonValue);
    sendButtonValue = 0;
    isRefreshButtonValue = BUTTON_REFRESH_NO_ACTION;
    isLongPressTimes = 0;
    isLastButtonValueLongPress = 0;
  }
  else if (isRefreshButtonValue == BUTTON_REFRESH_LONGPRESS)
  {
    isLongPressTimes++;
    if (isLongPressTimes > BUTTON_LONG_PRESS_TIMES)
    {   //此处发送按键状态长按给应用函数 
        (*appKeyChangeHandler)(BUTTONVALUE_LONG_PRESS);
        sendButtonValue = 0;
        isRefreshButtonValue = BUTTON_REFRESH_NO_ACTION;
        isLongPressTimes = 0;
        isLastButtonValueLongPress = 1;
    }
    else
    {
        Util_restartClock(&keyChangeClock, KEY_DEBOUNCE_TIMEOUT);
    }
  }
}



以上方法可实现单按键的长按以及多次点击事件。

0 0
原创粉丝点击