[APM32E0] 状态机方式实现按键处理

[复制链接]
606|39
DawnFervor 发表于 2025-12-9 09:19 | 显示全部楼层
11楼的总结好棒。
楼主的状态机没有抬起消抖操作。
robertesth 发表于 2025-12-9 09:42 | 显示全部楼层
核心是明确状态边界,并注意原子性、低功耗、可扩展性。
biechedan 发表于 2025-12-9 16:37 | 显示全部楼层
避免在中断中处理复杂逻辑              
uiint 发表于 2025-12-10 10:28 | 显示全部楼层
支持双击、组合键?              
primojones 发表于 2025-12-10 12:40 | 显示全部楼层
在按键电路中添加RC滤波或使用硬件消抖芯片
abotomson 发表于 2025-12-10 15:21 | 显示全部楼层
推荐定时器中断扫描              
ingramward 发表于 2025-12-11 09:44 | 显示全部楼层
通过定时器中断周期性调用按键处理函数,避免阻塞主程序
albertaabbot 发表于 2025-12-11 11:51 | 显示全部楼层
短按/长按 通过回调函数或标志位通知主程序处理。
maqianqu 发表于 2025-12-11 16:32 | 显示全部楼层
检测到电平变化后,需连续多次采样一致才进入下一状态
cashrwood 发表于 2025-12-12 15:10 | 显示全部楼层
将按键触发后的业务逻辑放在回调函数中,与状态机分离,便于维护
loutin 发表于 2025-12-12 16:52 | 显示全部楼层
议使用定时器中断周期调用,避免主循环任务耗时导致按键响应延迟或误判
pixhw 发表于 2025-12-13 19:43 | 显示全部楼层
所有状态转换由 固定周期扫描 驱动
 楼主| 阳光爆裂 发表于 2025-12-13 21:14 | 显示全部楼层
楼上这几位是AI吧!
chenci2013 发表于 2025-12-14 08:29 | 显示全部楼层
状态机应为非阻塞设计,避免在状态处理中执行耗时操作
天鹅绒之夜 发表于 2025-12-14 16:42 | 显示全部楼层
这个状态机还有不少可以提高的地方。
xebjz 发表于 2026-1-1 10:36 | 显示全部楼层
应该再添加一个按键队列,按键的高低电平触发,是否支持连续触发,回调函数.按键到时自动执行函数,可以和main主程序循环解耦
花开了相爱吧 发表于 2026-1-22 15:53 | 显示全部楼层
按键状态机分 4 个核心状态:空闲、按下检测、长按、释放。先对按键采样消抖,空闲态检测到低电平则进入按下检测;持续低电平超阈值进入长按,检测到高电平则跳转释放态,完成一次按键事件判定,释放后回归空闲态。全程通过状态迁移表处理不同状态逻辑。

总结
  • 核心状态:空闲→按下检测→长按→释放,覆盖按键全生命周期;
  • 先消抖采样,再按电平时长触发状态迁移;
  • 状态机避免了冗余判断,按键处理更稳定。

破晓战神 发表于 2026-1-26 11:43 | 显示全部楼层
每个状态都有明确的转移条件,这样的设计使得按键处理变得简单直观。
雨下纪事 发表于 2026-3-25 10:03 | 显示全部楼层
APM32E030 用状态机实现按键处理:将按键状态分为空闲、按下、消抖、释放四态;通过定时器定时扫描 GPIO 电平,空闲态检测到低电平进入消抖态,延时后确认仍为低则进入按下态并执行按键逻辑,检测到高电平则进入释放态,消抖处理避免机械抖动导致误触发,逻辑稳定且占用 CPU 资源少。
总结
核心逻辑:划分四状态机,定时器扫描 + 消抖处理按键;
优势:避免误触发,占用 CPU 资源少,处理逻辑稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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