button drive
杰杰自己写的一个按键驱动,支持单双击、连按、长按;采用回调处理按键事件(自定义消抖时间),使用只需3步,创建按键,按键事件与回调处理函数链接映射,周期检查按键。
前言
前几天写了个按键驱动,参考了MulitButton的数据结构的用法,逻辑实现并不一样。
在这里感谢所有的开源开发者,让我从中学到了很多,同时网络也是一个好平台,也希望所有的开发者能形成良性循环,从网络中学知识,回馈到网络中去。感谢MulitButton的作者0x1abin,感谢两位rtt的大佬:大法师、流光。
Button_drive简介
Button_drive是一个小巧的按键驱动,支持单击、双击、长按、连续触发等(后续可以在按键控制块中添加触发事件),理论上可无限量扩展Button,Button_drive采用按键触发事件回调方式处理业务逻辑,支持在RTOS中使用,我目前仅在RT-Thread上测试过。
写按键驱动的目的是想要将用户按键逻辑与按键处理事件分离,用户无需处理复杂麻烦的逻辑事件。
Button_drive使用效果
单击与长按
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nhPnwqF-1571148176402)(https://github.com/jiejieTop/...]
双击
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtGvjTjq-1571148176403)(https://github.com/jiejieTop/...]
连按
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QUypOh2s-1571148176403)(https://github.com/jiejieTop/...]
连按释放
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfsbuM1W-1571148176404)(https://github.com/jiejieTop/...]
使用方法
创建按键句柄
Button_t Button1;
Button_t Button2;
创建按键,初始化按键信息,包括按键名字、按键电平检测函数接口、按键触发电平。
Button_Create("Button1", //按键名字
&Button1, //按键句柄
Read_Button1_Level, //按键电平检测函数接口
BTN_TRIGGER); //触发电平
......
按键触发事件与事件回调函数链接映射,当按键事件被触发的时候,自动跳转回调函数中处理业务逻辑。
Button_Attach(&Button1,BUTTON_DOWM,Btn2_Dowm_CallBack); //按键单击
Button_Attach(&Button1,BUTTON_DOUBLE,Btn2_Double_CallBack); //双击
Button_Attach(&Button1,BUTTON_LONG,Btn2_Long_CallBack); //长按
.......
周期调用回调按键处理函数即可,建议调用周期20-50ms。
Button_Process(); //需要周期调用按键处理函数
需要用户实现的 2 个函数:
<