巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

时间:2021-05-16 18:00:12

       在做嵌入式产品时按键是最常用的输入信号了,按键多的时候我们可以实现很多的功能,有时候资源不够,但又需要实现较多的功能时,这就需要按键复用了,常常一个按键包含短按,长按,或者双击,N击,赋予不同的功能,这和具体项目有关。我们通常做的方法是识别I/O引脚电平,然后加以适当防抖处理,那么简单的按键单击功能就可以实现了。但当功能复杂时,这种处理方法就显得比较捉襟见肘了。比如:

1>想同时实现单击,和双击?

这时候就要加入一些时间检测。

2>同时短按和长按?

这时也要加入时间检测,在进一步,我想检测到长按时按键按下的过程中程序并没有一直停在按键检测循环里,而是一直在运行,识别到长按后,立刻执行相应动作。

3>同时实现短按,长按,以及多击(双击及以上)?

这个感觉就比较复杂了,其实原理都差不多,这里我们需要额外使用一个计数更新定时器,来作为时间检测。如果我们用的是操作系统的话,那么就可以创建一个按键扫描任务,每间隔固定时间扫描一次按键,然后获取按键值打包成消息发送出去。具体过程我不多说,原理很简单,主要是实现方法,大家看我的代码就会很明白了。

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

巧妙按键法,包含几乎所有可以实现的按键功能(单击,双击,N击,长按等功能)

G_My_Key为全局变量。

如有描述不详或错误之处,大家一起讨论,谢谢!