C语言按键短按自锁,FlexibleButton: 灵活的按键处理库(Flexible Button)| 按键驱动 | 支持单击、双击、连击、长按、自动消抖 | 灵活适配中断和低功耗 | 按需实现组合...

FlexibleButton

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

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

获取

Git 方式

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 下载软件包。

资源统计

ARMCC -O0 优化的情况下,FlexibleButton 资源占用如下:

CODE:798 字节

RO DATA:0

RW DATA:13 字节

ZI DATA:0

快速体验

FlexibleButton 库中提供了一个测试例程 ./examples/demo_rtt_iotboard.c,该例程基于 RT-Thread OS 进行测试,硬件平台选择了 RT-Thread IoT Board Pandora v2.51 开发板。当然你可以选择使用其他的 OS,或者使用裸机测试,只需要移除 OS 相关的特性即可。

如果你使用自己的硬件平台,只需要将 FlexibleButton 库源码和例程加入你既有的工程下即可。

DEMO 程序说明

该示例程序可以直接在 RT-Thread stm32l475-atk-pandora BSP 中运行,可以在该 BSP 目录下,使用 menuconfig 获取本软件包。

确定用户按键

typedef enum

{

USER_BUTTON_0 = 0, // 对应 IoT Board 开发板的 PIN_KEY0

USER_BUTTON_1, // 对应 IoT Board 开发板的 PIN_KEY1

USER_BUTTON_2, // 对应 IoT Board 开发板的 PIN_KEY2

USER_BUTTON_3, // 对应 IoT Board 开发板的 PIN_WK_UP

USER_BUTTON_MAX

} user_button_t;

static flex_button_t user_button[USER_BUTTON_MAX];

上述代码定义了 4 个按键,数据结构存储在 user_button 数组中。

程序入口

int flex_button_main(void)

{

rt_thread_t tid = RT_NULL;

user_button_init();

/* 创建按键扫描线程 flex_btn,线程栈 1024 byte,优先级 10 */

tid = rt_thread_create("flex_btn

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值