回馈开源----史上最强按键驱动
大家可曾听说过经典的3行代码按键扫描算法?这个按键扫描算法我一直有在用,但都是零零散散的代码,去年在做项目的时候,为了考虑通用性,对其进行了进一步封装。
该按键驱动使用事件机制上报按键状态,并解耦具体的按键硬件结构,理论上可以支持轻触按键和自锁按键,支持无限按键数量,一次扫描即可获取所有的按键状态。
- 支持单击、双击、长按
- 自动消抖
- 可灵活配置中断以及适配低功耗场景
- 支持按需组合按键
- 可扩展支持矩阵键盘
- C99 编写,支持裸机和任意 OS
源代码资源地址:https://github.com/murphyzhao/FlexibleButton
源代码中的按键扫描部分算法来自网络,仅有三行代码,非常精辟,值得学习,喜欢的朋友,不妨尝试用到自己的项目中,开源免费。算法来自网络,软件包也回馈网络,希望大家不再重复造轮子,以事半功倍。
还请各位大佬不吝指教,感谢 前排支持!!
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 我觉得把switch全部改成if语句就更加好了 技术文章 要支持一下。{:handshake:} 学习收藏 看起来很不错的样子
不过硬件按键是否应该叫 key?
button 一般是 UI 上的按钮吧
icoyool 发表于 2019-8-31 22:59
我觉得把switch全部改成if语句就更加好了
为什么?习惯? 了无 发表于 2019-8-31 22:57
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 ...
期待开源 谢谢分享,一直再用3行那个代码,学习一下你的 了无 发表于 2019-8-31 22:57
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 ...
谢谢楼主的分享也期待你的菜单框架!!{:lol:} 感谢分享 还是希望莫大这有源码,不知道低功耗是怎么实现,特别是长按事件。 支持一下 谢谢楼主的分享精神! 感谢楼主分享,有空试试 學習一下,感謝樓主的無私奉獻! 学习,感谢分享 感谢分享,学些了
感谢分享,再次学习 记得坛子里有个状态机的按键扫描也很经典,我一直在用 谢谢分享,经典的都值得学习 谢谢分享,那3行一直视为经典语句,一直都在使用,不知道这个驱动有没有提供类似键盘的机打输出事件,就是持续按下期间,固定机打间隔时间持续输出按下事件 zyw19987 发表于 2019-9-1 05:17
还是希望莫大这有源码,不知道低功耗是怎么实现,特别是长按事件。
长按估计比较难了,因为通常情况下键盘命令有按下、弹起、按住(自动重复)。 感谢分享 {:smile:} 支持支持 支持矩阵吗? 写的确实不错 比较喜欢multibutton,有多击,可查询也可以回调。 了无 发表于 2019-8-31 22:57
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 ...
期待,我一直也想开源,无奈苦于两点:
1、如何能最大程度低消耗以及能兼容低性能8位机和32位机。
2、如何兼容多种显示场合,黑白、彩屏、数码管(当然严格来说draw不实现交给用户就好,但是这样又高了一点点门槛~~) icoyool 发表于 2019-8-31 22:59
我觉得把switch全部改成if语句就更加好了
他们两个在使用上还是会有些区别的,后面我反汇编出来对比看看如何优化下 了无 发表于 2019-8-31 22:57
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 ...
期待{:smile:} wudicgi 发表于 2019-8-31 23:25
看起来很不错的样子
不过硬件按键是否应该叫 key?
因为 key 的译意太广泛了,在驱动里也多是 button driver,没见过 key driver{:lol:} zyw19987 发表于 2019-9-1 05:17
还是希望莫大这有源码,不知道低功耗是怎么实现,特别是长按事件。
嗯,后面我镜像一份 源码包 过来
低功耗需要结合自己的低功耗特性,如果是 STM32 没有使用低功耗框架的话,可以接一路唤醒中断触发按键扫描启动 谢谢,辛苦了! wye11083 发表于 2019-9-1 14:56
长按估计比较难了,因为通常情况下键盘命令有按下、弹起、按住(自动重复)。 ...
低功耗后,可以通过按键触发唤醒,这样本次的按键事件会丢掉(仅用于唤醒) fsmcu 发表于 2019-9-1 09:55
谢谢分享,那3行一直视为经典语句,一直都在使用,不知道这个驱动有没有提供类似键盘的机打输出事件,就是 ...
当时考虑过 Windows 的按键处理机制,但是不确定其用途,没有加上,如果有需求的话,后面这里的按键事件可以用更好的方式实现 感谢分享,MARK一下 感谢分享,MARK一下 +1 重新学习一下,高手写代码都不喜欢写注解 谢谢楼主的分享 只想问下:readme.md文件格式是自己写的,还是用什么文件来做的? 感谢分享,今后就直接调用了 chun2495 发表于 2019-9-2 10:15
只想问下:readme.md文件格式是自己写的,还是用什么文件来做的?
在gitbub上创建仓库时自动生成的readme文档 fuu 发表于 2019-9-2 10:47
在gitbub上创建仓库时自动生成的readme文档
我知道,我是说里面的格式,比如制表的哪些格式,不可能都是手打上去的吧! 收藏学习,感谢分享. MARK一下:史上最强按键驱动 看一下,谢谢分享 Ray______ 发表于 2019-9-1 16:22
期待,我一直也想开源,无奈苦于两点:
1、如何能最大程度低消耗以及能兼容低性能8位机和32位机。
2、如 ...
期待楼主开源 谢谢分享!!{:handshake:} 好东西 收藏 chun2495 发表于 2019-9-2 10:51
我知道,我是说里面的格式,比如制表的哪些格式,不可能都是手打上去的吧! ...
Markdown语言,了解一下 落叶知秋 发表于 2019-9-2 14:32
Markdown语言,了解一下
多谢! 貌似很不错的样子,好东西 感谢分享! 支持! 强,感谢分享 学习学习 感谢分享,功德无量
謝謝分享。{:smile:}
感谢分享,学习了 谢谢分享 mark 学习一下,试着用一用 谢谢分享! 本帖最后由 bsz84 于 2019-9-3 13:14 编辑
感谢分享! MurphyZhao 发表于 2019-9-2 09:09
嗯,后面我镜像一份 源码包 过来
低功耗需要结合自己的低功耗特性,如果是 STM32 没有使用低功耗框架的 ...
没看到源码。
低功耗的想法是,按键定时扫描,所以定时期间MCU是可能休眠的。这样低功耗的重点不是按键,是定时休眠的定时器管理才是难点。
对于低功耗的产品需要所有外设模块配合这种休眠管理模式。
期待你的佳作,一定要真正做过批量生产的低功耗产品才能体会。 非常感谢 感谢,来学习一下{:lol:} 感谢分享~~~~ 感谢分享学习一下 zuu0 发表于 2019-9-2 09:41
重新学习一下,高手写代码都不喜欢写注解
我是新手,我写了注解给自己看{:lol:} zyw19987 发表于 2019-9-3 06:20
没看到源码。
低功耗的想法是,按键定时扫描,所以定时期间MCU是可能休眠的。这样低功耗的重点不是按键, ...
嗯,后面我尝试在 NB-IOT 里面做个测试 chun2495 发表于 2019-9-2 10:51
我知道,我是说里面的格式,比如制表的哪些格式,不可能都是手打上去的吧! ...
markdown 格式,全手敲,也可以使用 IDE,如 Typora chun2495 发表于 2019-9-2 10:15
只想问下:readme.md文件格式是自己写的,还是用什么文件来做的?
markdown 格式,全手敲,不过也可以使用 IDE,如 Typora 软件
不过习惯了之后,都不需要看渲染出来的效果 占个座,谢谢分享! 谢谢分享 MurphyZhao 发表于 2019-9-3 10:07
markdown 格式,全手敲,不过也可以使用 IDE,如 Typora 软件
不过习惯了之后,都不需要看渲染出来的效 ...
原来如此!厉害了! 厉害了,感谢分享 按键程序MARK........ 按键程序MARK
学习收藏 学习和收藏 帖子发出去好像没法再编辑,就把源代码包放这里吧
谢谢分析,收藏学习了,正好最近要做按键的处理 谢谢楼主分享,谢谢83楼打包 vtouch 发表于 2019-9-13 07:27
谢谢楼主分享,谢谢83楼打包
照顾下没有梯子的{:smile:} 贰梓 发表于 2019-9-12 17:18
谢谢分析,收藏学习了,正好最近要做按键的处理
有疑问或者好的点子,可以一起交流 感谢大佬分享 强烈支持 小白想问一下 如果使用结构体了 就一定要配合链表实现扫描 但是一定要把链表的指针放在按键的结构体里吗? 要不要直接新建一个链表结构 指针可以是void*型 这样可以通用所有的类 比如按键啊 灯啊啥的 然后做一个新的链表 在创建对象时候 直接把这个结构体添加到对应类里面 这样链表结构也可以按照面向对象的写法写 方法就是添加一个链表或者删除一个链表 或者插入链表什么的 这样会不会通用性更强一点? 枚举变量确定数组大小 学习了 感谢{:lol:} markdown一下 感谢楼主分享 谢谢分享 拿来看看 支持支持 学习收藏 按键模块,收藏了。 MurphyZhao 发表于 2019-9-16 15:23
有疑问或者好的点子,可以一起交流
楼主您好,我使用了你的按键程序,现遇到三问题,
1,双击触发无效,调试查看click_cnt值无变化
其他单击短按长按都正常,不知道是不是我哪里没注意到
2,我看代码目前最大支持16按键,我若扩到32按键只需更改如下代码就可以了吧?
#define MAX_BUTTON_CNT 32
static uint32_t keydata = 0xFFFFFFFF;
static uint32_t key_rst_data = 0xFFFFFFFF;
3,按键输入每个都需要一个函数,这个对于按键较多的不够友好,希望能优化为只需一个函数就好了,
我改了一下 uint8_t(*usr_button_read)(uint8_tbuttonx);,改完后按键高低顺序反了,这个不知道楼主有无考虑优化一下 使用效果怎么样??? 谢谢楼主的分享 了无 发表于 2019-8-31 22:57
前排支持,我去看看咋样。过几天我也准备回报论坛,也开源一个论坛最强菜单架构。 ...
期待大神开源!
L7科创 发表于 2019-9-26 08:18
期待大神开源!
已经开源了。查看我的帖子
前排支持!!
页:
[1]
2