其他分享
首页 > 其他分享> > 用于单片机中的小巧多功能按键支持库——收集

用于单片机中的小巧多功能按键支持库——收集

作者:互联网

按键在嵌入式开发中,是比较重要的,也是常见的外设,因此,很有必要学习,同事也要掌握编写基础的按摩驱动,通常情况下,最基本的情况下,都是使用状态机的框架来出来,因为尽管硬件电路上有滤波电路,但还是要软件滤波的。(软件滤波很多采集系统中都是用到的)。
在学习过程中,可以自己尝试编写简单的单机,组合按键单机等,锻炼思维。当然网上有很多的按键驱动库,值得收藏,其中思想是比较好的,可以学习其思路,同事也可以在了解功能后,移植到自己的项目中。

我这里就自己网上看到的,公众号分享的一些文章,特意整理一下,算是一个收集,以后用到了可以直接参考。

1==、
MultiButton:是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰

https://github.com/0x1abin/MultiButton  官网
https://zhuanlan.zhihu.com/p/128961191 比较详细的移植文档

2==、 FlexibleButton:是一个基于标准C语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。

该按键库解耦了具体的按键硬件结构,理论上支持轻触按键与自锁按键,并可以无限扩展按键数量。另外,FlexibleButton使用扫描的方式一次性读取所有所有的按键状态,然后通过事件回调机制上报按键事件。核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用C语言标准库API编写,也使得该按键库可以无缝兼容任意的处理器平台,并且支持任意 OS 和 non-OS(裸机编程)。

https://gitee.com/RT-Thread-Mirror/FlexibleButton  官网

https://mp.weixin.qq.com/s?src=11&timestamp=1613181394&ver=2887&signature=WN8P7Q1GwWKEI22eOcETmIQqrarmkOT*cBYof1sb3jgsketPgtUrdd8f36e6762DQIYqjTpzrW0crZr-2C7irEYa1GPbbt10-DY3QDbCjAwXGyKIDvMubpKZoxdslH8V&new=1 微信公众号有分享文章

3==、key_board - 用于单片机中的小巧多功能按键支持库(来自痞子衡的半月刊)
key_board 是网友 wei513723 维护的用于单片机中的小巧多功能按键支持库。

项目主页: https://gitee.com/wei513723/key_board

软件采用了分层的思想,并且做到了与平台无关,用户只需要提供按键的基本信息和读写io电平的函数即可,非常方便移植,同时支持多个矩阵键盘及多个单io控制键盘,目前已实现按下触发、弹起触发、长按自动触发、长按弹起触发、多击触发、连续触发等功能,并且能够随意组合(支持状态的同一时间轴和非同一时间轴),后续还会添加更多的功能。

4==、论坛里分享的驱动库
分享一个不错的【程序框架】+【按键状态机】+【LED状态机】程序:
http://www.openedv.com/thread-295380-1-1.html
本帖隐藏的内容

用了几年的前后台程序框架,稳定可靠,保证每次执行的任务都为最高优先级任务,楼下会对该程序框架做一些说明。
按键状态机:支持短按,长按,双击处理,程序简洁,简单易懂。
LED状态机:支持各个频率的LED闪烁,常亮,常暗操作。
注:该程序是从基于2G通讯项目中截取下来的两个模块,项目源码不好分享,有兴趣可以加我Q:842936992。

解压密码:123456789
程序框架 LED KEY.zip

具体可以看看原子论坛的帖子,就是没有一个整理好的,需要自己去看

5==、支持长按,短按,连续周期,组合键的按键程序。配置简单,移植方便 
http://www.openedv.com/forum.php?mod=viewthread&tid=314209&highlight=%B0%B4%BC%FC

主要实现功能:1、按键无冲,可以同时执行几个按键。
                      2、消抖不阻塞主程序,因此需要采用1个定时器的资源。
                      3、支持长按,短按识别。
                      4、支持连发,不连发模式。
                      5、移植真的很方便。
                      6、支持裸机和带实时系统使用。

移植说明:1、需要在key_app.h 的Key_Num枚举添加按键编号,有几个就添加几个。注意,最后的KeyCnt不能删除。
                2、编写Key_BspInit函数进行按键硬件的初始化
                3、编写Key_AddInit函数添加按键信息,里面的长按执行函数,短按执行函数自行编写。

附件是根据原子key示例代码改的,提供参考。好用的话可以给个赞吗?

更新日志:
1、增加组合按键,添加组合方法,在KeyGroup_Num枚举增加组合数,后调用Add_Change_KeyGP函数增加组合。
2、添加按键和组合函数都增加错误返回。
3、新增删除按键和删除组合函数,删除后重新添加则调用Add_Change_Key或者Add_Change_KeyGP进行添加。

4、按键和组合状态可以根据需要进行实时更新,调用Add_Change_Key或者Add_Change_KeyGP进行更新即可。
5、对应的按键状态都放入一个环形队列进行存储。
6、用户只需修改key_app.c,key.c不需要修改,增加部分注释。
Tips:目前这代码有小小bug,我已经修正了。过几天上传,你们先找找看吧。

更新日志:
1、修复一些bug
2、组合键增加按键顺序判断,由GetKeyNumStrict配置。若是ON,则按键组合必须按照配置组合顺序按下才能激活。若是OFF,则无顺序要求。---该功能暂时没测试,可以帮忙测试,发现bug可以回帖,我去修改。
3、按键硬件已经修改为原子mini板上的 IO,可直接用原子板子直接测试。把串口1连到电脑上,可以看打印信息。

ps:大家可以试下增大KeyCnt按键总数和KeyGPCnt组合数来试下多按键下的效果。我试了添加200个按键,效果也还行。有没有兄弟可以试下去做个机械键盘呢。

更新日志:
1、测试了严格判断按键顺序的组合键功能,修改bug。
2、移植只需修改key_app.c,具体修改地方已在注释中注明,主要是按键初始化函数和提供按键状态函数。主要移植文件为key.c,key_app.c和ringbuff.c。
     Timer.c只是为了提供一个1ms循环的环境,在带操作系统的情况下,可以不用,直接用1个任务代替,任务延时为1ms,如截图所示。
3、按键的配置和组合的配置 基本和stm32配置GPIO一样。需要注意的是,添加按键或者组合,自己需要添加枚举。枚举名可以自定义,添加按键和删除按键都需要用到这个枚举名,枚举的最后一个元素 KeyCnt和KeyGPCnt不能删除。

PS:最后,如果大家还需要什么按键上的功能,可以回帖。如果我觉得可以做,就会更新代码。

解压密码:yezijun666
demo_key_V2.3.zip


6==、安福莱也有自己的按键驱动库
我看了v4开发板的代码,基本上了解了,运用了fifo,类似于Windows下的按键功能,http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=2&filter=typeid&typeid=80
他里面没有使用状态机,而是软件定时器定时(10ms)扫描,具体没有移植测试过。

标签:组合,小巧,状态机,单片机,添加,key,按键,com
来源: https://blog.csdn.net/liming0931/article/details/113799934