久趣下载站

当前位置: 首页 » 游戏攻略 » 多功能按键驱动模块 MultiButton 工程简介

多功能按键驱动模块 MultiButton 工程简介

MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块。该项目非常精简,只有两个文件。它支持无限扩展按键,并采用按键事件的回调异步处理方式,可以简化程序结构,去除冗余的按键处理硬编码,让按键业务逻辑更清晰。


Github地址:
https://github.com/0x1abin/MultiButton

通过此工程可以学习到按键各种类型事件、状态机的思想以及单向链表语法。工程支持的按键事件包括短按、长按等。


在头文件multi_button.h中包括:

(1)定义了按键时间相关参数;

(2)定义了按键的事件类型;

(3)定义按键链表结构体,这里使用了位域操作,解决字节的存储空间问题。


在源码文件multi_button.c中包括:

(1)对按键时间参数进行初始化;

(2)对按键对象结构体进行初始化,初始化成员包括按键句柄,绑定GPIO电平读取函数,设置有效触发电平;

(3)初始化按键完成之后,进行按键绑定操作,将绑定按键结构体成员,按键触发事件,按键回调函数;

(4)按键启动:也就是将按键加入链表当中,启动按键。这里选择的插入方式是头部插入法,在链表的头部插入按键节点,效率高,时间复杂度为O(1);

(5)按键删除:将按键从当前链表中删除。使用到了二级指针删除一个按键元素。与链表中成员删除方法相同;

(6)按键滴答函数:每间隔Nms触发一次按键事件,驱动状态机运行;

(7)读取当前引脚的状态,获取按键当前属于哪种状态;

(8)按键处理核心函数,驱动状态机。

工程代码应用


以在freertos中应用为例,包括:

(1)按键对象的定义及时间参数定义;

(2)按键回调函数包括读取按键电平函数和各按键事件处理函数的编写;

(3)按键初始化操作及启动按键功能;

(4)在while(1)中添加按键滴答函数。

思考

使用中有如下问题值得思考:

(1)组合键和矩阵按键如何实现?在函数uint8_t read_button_GPIO(uint8_t button_id)中进行组合键和矩阵按键返回值的自定义。

(2)多个按键时,按键参数进行区分?去抖时间,短按时间,长按时间可以放在一个数组中区分,各个按键定义各自的参数。

(3)现在按键事件较多的情况时,需要多个绑定的事件函数?可以将按键事件函数统一放在一个数组中进行初始化注册。



↓↓↓

更多技术内容和书籍资料获取,入群技术交流敬请关注“明解嵌入式”

↓↓↓









猜你喜欢
本类排行