本帖最后由 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,保存键值并响应; 以上就是这次分享的长按和短按的实现,代码也没有做优化,我相信各位大佬会有很多更加优秀的代码,这里抛砖引玉,**大家一起分享学习一下。
|