这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 识别按键长短扫描?

共17条 2/2 1 2 跳转至
高工
2013-06-06 15:45:11     打赏
11楼
党和国家向来注重思想教育,还望得到您的思想洗礼,愿洗耳恭听。。。

工程师
2013-06-06 16:29:24     打赏
12楼

呵呵,没必要说的这么官方吧。互相学习交流

我的做法是做一个状态机,也就是用switch和case组成的,

刚开始执行状态0(step=0)判断按键是否被按下,如果按下进入状态1(step=1)否则继续在状态0等待按键按下。

进入状态1(step=1)之后继续判断按键是否被按下达到消除抖动的问题,如果按下进入状态2(step=2)否则返回状态0(视为抖动)。

进入状态2(step=2)之后继续判断按键是否被按下达到消除抖动的问题,如果按下进入状态3(step=3)否则返回状态0(视为抖动)。

进入状态3(step=3)之后,判断按键是否仍处于按下状态,如果仍是按下状态定义变量开始计数(这个变量在状态2里要清零,当计数达到设定值的时候认为长按,然后长按处理,将计数变量清零-如果想快速增加在这里可以不清零,可以赋值成一个小于长按设定的那个值具体的值可以看你想要的加减速度。例如音量加减按键确定是长按之后可以快速的加减。),否则跳到状态4(step=4)按键弹起。

进入状态4(step=4)之后,如果按键仍处于按下状态就返回状态3,否则是弹起(短按的处理时在这里执行)返回状态0。


高工
2013-06-06 19:41:19     打赏
13楼

按键状态机确实是个很好的解决方案,我在此有一个疑问,在实现长短按键的识别的过程中,计数会不会占用CPU的时间呢?因为实时性的要求,不得不考虑这一点。

多谢大侠的指点,在此表示衷心的感谢!


高工
2013-06-06 19:46:30     打赏
14楼

肯定是用定时器啦~

拿个delay()设计按键也就是在教材上用用,如果你用到项目里面,不被老大骂死才怪


工程师
2013-06-08 10:57:57     打赏
15楼

恩,是,正因为不能让CPU一直在那空等待,实际应用中不能用空等待,所以很多都采用计数的方式,还有就是跑小系统。这样让CPU等待某个事件发生的时候可以继续处理其他的任务,不至于在等待的时候耽误了其他的处理。


高工
2013-06-08 11:23:03     打赏
16楼
我是在uCOSII下用的,过几天把代码搞搞,多谢指点

专家
2016-06-20 14:29:19     打赏
17楼
不错的例子,学习了。

共17条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]