wis98 发表于 2020-3-6 13:21:49

根据高手指点修改了长按短按识别程序,放到任务中,只有短按能识别,长按还是无法识别,程序如下:

根据高手指点修改了长按短按识别程序,放到任务中,只有短按能识别,长按还是无法识别,程序如下:

#define const_key_time_short120    //短按的按键去抖动延时的时间
#define const_key_time_long1   400   //长按的按键去抖动延时的时间

#define const_key_time_short220    //短按的按键去抖动延时的时间
#define const_key_time_long2   400   //长按的按键去抖动延时的时间

void task4_task(void * pvParameters)
{
          static int uiKeyTimeCnt1=0;
          static u8ucKeyLock1=0;
          static u8ucShortTouchFlag1=0;

while(1)      
      {



if(KEY2==1)//IO是高电平,说明两个按键没有全部被按下,这时要及时清零一些标志位
{
      ucKeyLock1=0; //按键自锁标志清零
      uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。   
            if(ucShortTouchFlag1==1)//短按触发标志
          {
             ucShortTouchFlag1=0;
               K2Sec_1=1;    //触发一号键的短按
          }
}
else if(ucKeyLock1==0)//有按键按下,且是第一次被按下
{
   uiKeyTimeCnt1++; //累加定时中断次数
   if(uiKeyTimeCnt1>const_key_time_short1)
   {
            ucShortTouchFlag1=1;   //激活按键短按的有效标志
   }

   if(uiKeyTimeCnt1>const_key_time_long1)
   {
            ucShortTouchFlag1=0;//清除按键短按的有效标志

      uiKeyTimeCnt1=0;
      ucKeyLock1=1;//自锁按键置位,避免一直触发

      K2Sec_1=2;    //触发1号键的长按

   }

}


printf("task-2:%d\r\n",K2Sec_1);

         vTaskDelay(100 / portTICK_RATE_MS);//增加延时节拍函数
      }
}

eric2013 发表于 2020-3-7 09:13:22

直接移植我们H7-TOOL里面的按键代码吧,比较好移植。

做了长按,短按,双击等支持。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=95468&extra=page%3D1

wis98 发表于 2020-3-7 10:52:08

上面的程序已经很简单了,只想搞清楚是嘛原因,求高手指点,可将程序复制到工程试试

eric2013 发表于 2020-3-7 11:04:53

wis98 发表于 2020-3-7 10:52
上面的程序已经很简单了,只想搞清楚是嘛原因,求高手指点,可将程序复制到工程试试

看了下,没看懂,让坛友帮你看看

{:33:}
页: [1]
查看完整版本: 根据高手指点修改了长按短按识别程序,放到任务中,只有短按能识别,长按还是无法识别,程序如下: