[开发工具] 基于有限状态机与STM32实现按键扫描

[复制链接]
 楼主| hehhehee 发表于 2021-11-19 23:55 | 显示全部楼层 |阅读模式
有限状态机其实是一种概念性机器,表示有限个状态以及在这些状态之间的转移和动作等行为的框图(在程序上)。

以我的程序绘成的图为例:
521806197c8fa76e3a.png

 楼主| 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;
 楼主| hehhehee 发表于 2021-11-19 23:58 | 显示全部楼层
在S4时判断那个变量是否大于某个数值,大于则为长按,小于则为短按,并执行相关的操作,执行完之后令状态机回到S1
 楼主| hehhehee 发表于 2021-11-19 23:58 | 显示全部楼层
这种写法是可以利用时间片的形式,每隔10ms运行一次状态机,即可实现消抖的目的,还可以对长按的时间精确控制。
 楼主| hehhehee 发表于 2021-11-19 23:59 | 显示全部楼层
运用状态机 时间片,大幅提升CPU的资源的利用率,而且效率高了不少。
kxsi 发表于 2021-12-11 09:56 | 显示全部楼层
如果数量不多还是可以的
aoyi 发表于 2021-12-11 09:56 | 显示全部楼层
实现的效率如何啊
drer 发表于 2021-12-11 09:58 | 显示全部楼层
这是一种轮询方式吗
gwsan 发表于 2021-12-11 10:00 | 显示全部楼层
会出现竞争吗
nawu 发表于 2021-12-11 10:02 | 显示全部楼层
单片机中怎么做状态机呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

1252

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

89

主题

1252

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部