| 本帖最后由 lilijin1995 于 2023-7-6 10:24 编辑 
 今天想和大家分享一个触摸/轻触按键的长按和短按实现;GitHub有好轮子MultiButton,本来我也想着直接套用,奈何MCU资源太有限,ROM是连Flash都没有的,是支持1000 次写操作MTP ;
 实习参加工作时候有继承公司的一套I2C驱动触摸芯片代码如下:
 这段代码支持12个触摸按键的,实现的效果是短按释放响应,长按5S响应,轮询周期是10ms;这段代码有个缺点是定义了很多散乱的全局变量,可以通过结构体去整合优化,可能看起来可读性更强; 接着分享我现在工作中遇到的,如下: void User(void)
{
   static u8 bTouchKey = 0;
   static u16 Touchtick = 0;
   KeyCode = D_KeyNull;
   if(TouchResult)                        //test
   {
      if(bTouchKey==0)
      {
         bTouchKey = 1;    
      }else if(bTouchKey==1)
      {
          Touchtick+=1;
          if(Touchtick>=300)
          {
            Touchtick=0;
            bTouchKey=2; 
            
           KeyCode=D_KeyLD;             
          }
      }  
   }
   else
   {
      if(bTouchKey==1)
      {
         KeyCode=D_Key;         
      }
      bTouchKey = 0;
      Touchtick=0;
   }
}
我们介绍一下这部分代码,bTouchKey是按键状态切换标志,Touchtick是长按计时tick,也是10ms轮询一次;KeyCode保存键码,区分长按短按;TouchResult是扫到按键触摸; 短按实现思路: bTouchKey在按键按下赋1,表示按键按下,如果没有超时3S,那么释放掉会响应保存键值; 长按实现思路: 同上如果超时3S,bTouchKey赋值3,保存键值并响应; 以上就是这次分享的长按和短按的实现,代码也没有做优化,我相信各位大佬会有很多更加优秀的代码,这里抛砖引玉,**大家一起分享学习一下。 
 |