代码拉取完成,页面将自动刷新
一直在做代码模块化的工作,分享一个自己写的按键扫描模块,欢迎大家试用。
本模块计划长期更新,本人能力有限,有错误之处欢迎指正交流,我将根据大家的反馈进行修改优化,提供更可靠的软件模块给大家。
更新说明
2016年6月15日: 本模块目前更新至V1.10,相比于采用switch状态机的V1.00版本,V1.10的状态机采用了状态转移表来实现,在增加状态数量和功能的前提下,不仅提高了执行效率,同时减少了10%的FLASH消耗。
本模块可灵活配置如下参数:
本模块可以为上层提供:
按键事件(瞬态):
按键状态(稳态):
M0+内核 + IAR 下 Low优化等级:
内容 | 区域 | 大小 | 说明 |
---|---|---|---|
代码/只读数据 | Flash | 468字节 | 程序416字节 + 52字节的状态转移表 |
配置参数/状态/接口变量 | RAM静态储存区 | n*20 + 8字节 | n为按键数量 |
临时变量/函数调用开销 | RAM栈区域 | 40字节 | 无 |
除了带有一般按键的驱动功能,为了区别短时按下和长时按下,增加了长按识别的功能
V1.00版本代码采用了switch方式的状态机,是一种典型的状态机实现方式,形式简单,面向过程,易于理解; 其状态可以分为:
V1.10版本采用了状态转移表,先分析出当前状态下有哪些事件会造成状态迁移,然后在当前状态下罗列出可能的事件组合将会迁移至的各个状态。例如:在各个状态下,有两个事件会导致状态改变:1. 按键按下和释放的瞬间状态;2. 计时是否结束。则可能的组合就为:1.按下计时未结束;2.按下计时结束;3.释放计时未结束;4.释放计时结束。至此,我们只需要考虑清楚在某个当前状态下,发生这四种事件组合后因迁移的下一个状态即可。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。