作为一个搞电子嵌入式的你来说,按键驱动相信绝对不陌生,比如让你实现一些按键按下,按键松开,单击、双击、长按等不同的机制,你是否有一个很好的程序框架?前几天芯片之家1群里有个朋友(备注名:北京-单片机-顺顺)在群里分享了GitHub上一个很不错的按键驱动机制(作者:liu2guang),看了确实不错,移植很方便,并且附带RT-Thread的例子,这里分享给大家!公众号后台回复: 按键驱动 下载源代码。 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。 使用方法 1.先申请一个按键结构 struct Button button1; 2.初始化按键对象,绑定按键的GPIO电平读取接口read_button_pin() ,后一个参数设置有效触发电平
3.注册按键事件 button_attach(&button1, SINGLE_CLICK, Callback_SINGLE_CLICK_Handler); 4.启动按键
5.设置一个5ms间隔的定时器循环调用后台处理函数 while(1) { 特性 MultiButton 使用C语言实现,基于面向对象方式设计思路,每个按键对象单独用一份数据结构管理:
这样每个按键使用单向链表相连,依次进入 button_handler(struct Button* handle) 状态机处理,所以每个按键的状态彼此独立。 按键事件 事件 说明 PRESS_DOWN 按键按下,每次按下都触发 PRESS_UP 按键弹起,每次松开都触发 PRESS_REPEAT 重复按下触发,变量repeat计数连击次数 SINGLE_CLICK 单击按键事件 DOUBLE_CLICK 双击按键事件 LONG_RRESS_START 达到长按时间阈值时触发一次 LONG_PRESS_HOLD 长按期间一直触发 Examples #include 'button.h' |
|
来自: 西北望msm66g9f > 《编程》