打印
[开发工具]

基于有限状态机与STM32实现按键扫描

[复制链接]
888|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hehhehee|  楼主 | 2021-11-19 23:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
有限状态机其实是一种概念性机器,表示有限个状态以及在这些状态之间的转移和动作等行为的框图(在程序上)。

以我的程序绘成的图为例:


使用特权

评论回复
沙发
hehhehee|  楼主 | 2021-11-19 23:56 | 只看该作者
以高电平作为标志,在S1时检测输入电平是否为高,是高电平则运行至S2,否则保持在S1;

使用特权

评论回复
板凳
hehhehee|  楼主 | 2021-11-19 23:56 | 只看该作者
在S2时再次判断判断输入电平是否为高,若为低则说明刚刚的改变是干扰,回到S1,若为高电平则说明按键被按下,运行至S3;

使用特权

评论回复
地板
hehhehee|  楼主 | 2021-11-19 23:57 | 只看该作者
在S3可判断这次对按键的操作是长按还是短按,具体方法是判断电平是否还是为高,若为高则令状态机保持在S3,同时定义一个变量(建议用指针,具体见代码),使其一直自加。若为低则运行至S4;

使用特权

评论回复
5
hehhehee|  楼主 | 2021-11-19 23:58 | 只看该作者
在S4时判断那个变量是否大于某个数值,大于则为长按,小于则为短按,并执行相关的操作,执行完之后令状态机回到S1

使用特权

评论回复
6
hehhehee|  楼主 | 2021-11-19 23:58 | 只看该作者
这种写法是可以利用时间片的形式,每隔10ms运行一次状态机,即可实现消抖的目的,还可以对长按的时间精确控制。

使用特权

评论回复
7
hehhehee|  楼主 | 2021-11-19 23:59 | 只看该作者
运用状态机 时间片,大幅提升CPU的资源的利用率,而且效率高了不少。

使用特权

评论回复
8
kxsi| | 2021-12-11 09:56 | 只看该作者
如果数量不多还是可以的

使用特权

评论回复
9
aoyi| | 2021-12-11 09:56 | 只看该作者
实现的效率如何啊

使用特权

评论回复
10
drer| | 2021-12-11 09:58 | 只看该作者
这是一种轮询方式吗

使用特权

评论回复
11
gwsan| | 2021-12-11 10:00 | 只看该作者
会出现竞争吗

使用特权

评论回复
12
nawu| | 2021-12-11 10:02 | 只看该作者
单片机中怎么做状态机呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

837

帖子

0

粉丝