本帖最后由 叶子君 于 2020-8-4 11:32 编辑
主要实现功能: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:最后,如果大家还需要什么按键上的功能,可以回帖。如果我觉得可以做,就会更新代码。
为了防止沉贴,回帖见加密密码
|