用起来真心不错,功能强大。用的时候没注意,哪三行,可否分析一下?
就是下面的三行代码:
read_data = keydata^0xFFFF;
trg = read_data & (read_data ^ cont);
cont = read_data;
感谢分享 牛人,支持 自从开源了 FlexibleButton 按键驱动,目前已经有非常多的人关注,并应用到项目中。
同时,也有很多小伙伴帮助我修复了一些问题,提出了更多项目上的实际需求,因此,这几天准备迭代一个版本,感谢大家的支持。
谢谢分享,学习了! v2.0.0 版本正式输出了,下载链接:https://github.com/murphyzhao/FlexibleButton/releases/tag/2.0.0
[*]实现无限连击功能
[*]简化示例程序,增加组合按键演示
[*]整理代码
[*]按键结构体增加 id 属性,用于唯一区分按键
[*]按键结构体增加 max_combos_click_solt 属性,用于处理连击
欢迎下载体验。
## 获取
### Git 方式
```SHELL
git clone https://github.com/murphyzhao/FlexibleButton.git
```
### RT-Thread menuconfig 方式
```
RT-Thread online packages--->
miscellaneous packages--->
[*] FlexibleButton: Small and flexible button driver--->
[*] Enable flexible button demo
version (latest)--->
```
配置完成后,输入 `pkgs --update` 下载软件包。
## 快速体验
FlexibleButton 库中提供了一个测试例程 [`./flexible_button_demo.c`](./flexible_button_demo.c),该例程基于 RT-Thread OS 进行测试,硬件平台选择了 *RT-Thread IoT Board Pandora v2.51* 开发板。当然你可以选择使用其他的 OS,或者使用裸机测试,只需要移除 OS 相关的特性即可。
如果你使用自己的硬件平台,只需要将 FlexibleButton 库源码和例程加入你既有的工程下即可。
支持!学习!谢谢分享! 看起来不错呀,学习了。谢谢 看起来不错呀,学习了。
看起来不错呀,学习了。 感觉分享,我也试过用面向对象方式封装按键状态机 好的想法,谢谢 本帖最后由 chinaboy25 于 2020-2-15 20:06 编辑
很早以前的农民讲习所也是这样做的,不过你写的还是好些,当时我嫌弃一个字节保存一个按键电平,太浪费了;另外为啥无按键事件不用0;很别扭, chinaboy25 发表于 2020-2-15 17:08
很早以前的农民讲习所也是这样做的,不过你写的还是好些,当时我嫌弃一个字节保存一个按键电平,太浪费了; ...
原本我也是打算将 NONE 防到 enum 的第一个,后面发现这样不利于索引和遍历,所有就放后面了。也有听多软件包是这么用的。 谢谢共享~~~~~~ jacktau 发表于 2020-2-17 14:07
谢谢共享~~~~~~
感谢支持,一起学习交流{:lol:} chenfzg 发表于 2020-1-28 23:45
好的想法,谢谢
感谢支持,有好的想法建议,也可以交流{:smile:} 【更新日志】
昨天更新支持了腾讯的 TencentOS-Tiny 的官方板卡 EVB_MX+,新增基于 TencentOS 的例程,欢迎体验 https://github.com/murphyzhao/FlexibleButton/blob/master/examples/demo_tos_evb_mx_plus.c。
感谢楼主,正在51上移植,单按键OK,组合按键还不行,正在调试。 对按键库做了点修改: 因为按键的时间参数是一样的,所以从结构里提取了出来,以节省RAM. 可以共用另外一个结构或用宏代替。 不敢再回头看我第一个项目代码{:lol:} 感谢分享 本帖最后由 chinaboy25 于 2020-2-18 11:45 编辑
MurphyZhao 发表于 2020-2-17 13:59
原本我也是打算将 NONE 防到 enum 的第一个,后面发现这样不利于索引和遍历,所有就放后面了。也有听多软 ...
不懂,
能举个例吗?
不是if(keyread())吗?
谢谢共享~~~~~~ 感谢分享,收藏 支持一下楼主 楼主你好,我现在也做了个针对于MCU裸机的开源代码,能否授权我将你的这个按键部分合到我的代码中,作为第三方代码使用。这个是我代码的链接:https://gitee.com/notrynohigh/BabyOS 史上最强按键驱动学习下. chinaboy25 发表于 2020-2-18 10:21
不懂,
能举个例吗?
不是if(keyread())吗?
比如例程里面的这个遍历:
for (i = 0; i < USER_BUTTON_MAX; i ++)
{
user_button.id = i;
user_button.usr_button_read = common_btn_read;
user_button.cb = common_btn_evt_cb;
user_button.pressed_logic_level = 0;
user_button.short_press_start_tick = FLEX_MS_TO_SCAN_CNT(1500);
user_button.long_press_start_tick = FLEX_MS_TO_SCAN_CNT(3000);
user_button.long_hold_start_tick = FLEX_MS_TO_SCAN_CNT(4500);
if (i == USER_BUTTON_3)
{
user_button.pressed_logic_level = 1;
}
flex_button_register(&user_button);
} 32MCU 发表于 2020-2-18 17:08
史上最强按键驱动学习下.
感谢支持 怂包BB 发表于 2020-2-18 12:36
楼主你好,我现在也做了个针对于MCU裸机的开源代码,能否授权我将你的这个按键部分合到我的代码中,作为第 ...
可以在开源协议的范畴内自由使用{:smile:} 学习收藏 支持下 定义波 感谢分享,收藏一下 lnskngdc 发表于 2019-9-1 09:20
记得坛子里有个状态机的按键扫描也很经典,我一直在用
发一下连接 zhcj66 发表于 2020-3-29 23:13
发一下连接
我估计他说的是马潮老师那个按键状态机。 atommann 发表于 2020-3-30 00:06
我估计他说的是马潮老师那个按键状态机。
这个基本上也是一个状态机了 谢谢分享。 好东西好东西好东西好东西好东西
页:
1
[2]