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

技术标签: C语言按键短按自锁  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42362003/article/details/117071169

智能推荐

ja-netfilter 2022.1 配置-程序员宅基地

文章浏览阅读3.6w次,点赞45次,收藏46次。ja-netfilter 2022.1 配置 日常使用的软件中有很多有意或无意被加入网络访问的代码。有些并非恶意,有些则是。并非恶意的像一些软件的在线激活验证,如dbeaver、smartgit等。恶意的像有些软件本身就有盗取用户隐私数据的情况,有些软件则是被一些别有用心的人二次加工放入偷取用户数据的代码。我们通常会使用防火墙来阻断这些软件的恶意访问。但防火墙也不是万能的,比如:跨平台问题、https下无法精准阻断某个url访问、部分防火墙不能阻断dns访问。于是就有了我今天开源的这个项目:通用的_ja-netfilter

java/jsp/ssm高校奖学金评定系统【2024年毕设】_基于ssm的高校奖学金评定系统-程序员宅基地

文章浏览阅读100次。springboot基于springboot框架的服装电商平台的设计与实现。springboot基于SpringBoot的慧有便读平台的设计与实现。springboot基于Springboot的企业cms内容管理系统。springboot基于SpringBoot的猫咖管理系统。springboot基于Java的比亚迪汽车大数据评分系统。springboot基于新高考改革下的志愿填报服务系统。springboot基于用户购买行为的商品推荐系统。springboot校园社坛系统的设计与实现。_基于ssm的高校奖学金评定系统

hexo-matery主题美化(四)_matery美化博客-程序员宅基地

文章浏览阅读1.4k次。这是最后一篇关于matery博客美化的文章,去掉banner的颜色动画、添加背景壁纸、修改滑动条、修改导航栏、页脚及文章卡片标签的颜色及修改目录样式!_matery美化博客

Arthas 开源 Java 诊断工具(服务器反编译class)_arthas 反编译命令-程序员宅基地

文章浏览阅读2.1k次。arthas 使用服务器环境编译类#1、进入arthas目录cd /root/arthas-packaging-3.3.9-bin#2、执行arthas命令java -jar arthas-boot.jar#3、找到自己需要进入的java进程,输入对应前面的序号【比如 1】1#4、查询自己所找的对应的类加载器hash码【后继用于编译】,比如我要找的类为com.tansun.tcp.sys.msg.action.BaseMsgSysAction输入下方命令:sc -d com._arthas 反编译命令

tc275单片机的内核_英飞凌TC275_bootloader源码 TC275单片机基于autosar的bootloader工程代码(Bootloader engineering code of tc...-程序员宅基地

文章浏览阅读1.4k次。压缩包 : f9a27655e546fd0d4bf5ed97eda6479f.zip 列表英飞凌TC275_bootloader源码/英飞凌TC275_bootloader源码/.cproject英飞凌TC275_bootloader源码/.htcproject英飞凌TC275_bootloader源码/.project英飞凌TC275_bootloader源码/.settings/英飞凌TC27..._英飞凌tc275芯片bootloader开发

SimpleFOC(三)—— AS5600角度读取_as5600磁编码器中文手册-程序员宅基地

文章浏览阅读3.2w次,点赞25次,收藏137次。目录一、硬件介绍1、磁编码器说明:2、硬件连接二、程序演示1、模拟电压获取角度2、I2C通信获取角度三、程序拓展一、硬件介绍1、磁编码器说明:  ◆AS5600与两极磁铁配对,可以输出12位分辨率的磁性旋转位置,支持IIC通信,还可以输出模拟电压和PWM信号。官方例程中主要演示了模拟电压和IIC通信两种角度获取方式。  ◆模拟电压模式,Aout引脚输出0—5V对应0°—360°,  ◆I2C模式,读取0x0C/0x0D两个寄存器,获取12bits的角度值,0—4096对应0°—360°,2_as5600磁编码器中文手册

随便推点

关于传递函数的频率响应和低通滤波器_低通滤波器传递函数-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏20次。关于传递函数的频率响应和低通滤波器参考资料:【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析_哔哩哔哩_bilibili以前关于这部分只是知道了而已,并没有用MATLAB认真试验过。这里借着DR_CAN老师的课程重新复习一下。下面讨论一个简单的一阶线性系统的传递函数:G(s)=as+a(1)G(s)=\frac{a}{s+a} \tag1G(s)=s+aa​(1)分析式(1)的频率响应,将s=jωs=j\omegas=jω代入,可得G(jω)=a_低通滤波器传递函数

GY906 温度的传感器-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏28次。这里写目录标题外形注意事项代码实际效果外形注意事项引脚设置为开漏输出模块可以3.3v供电代码代码来自STM32 单片机 GY-906 MLX90614 红外温度读取这位大哥的.c#include "mlx90614.h"/* Private typedef -----------------------------------------------------------*//* Private define -----------------------------------_gy906

二分法求解方程的根java_快速求解方程的根——二分法与牛顿迭代法-程序员宅基地

文章浏览阅读777次。今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论,今天和大家聊点有用的东西。我们都知道,工业上的很多问题经过抽象和建模之后,本质还是数学问题。而说到数学问题就离不开方程,在数学上我们可以用各种推算、公式,但是有没有想过在计算机领域我们如何解一个比较复杂的方程?如果之前没有想过,那你可能得想一想,因为以后很有可能会在面试题当中遇到。二分法我们要介绍的第一个方法是二分法。说到二..._二分法求方程的根java

类似百度搜索输入keyword进行找到含keyword相关内容_keyword事件-程序员宅基地

文章浏览阅读727次。实现在文本框内输入某关键词,对应搜索并列出出相应的内容_keyword事件

Centos7搭建maven私服nexus3-程序员宅基地

文章浏览阅读718次,点赞28次,收藏28次。针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-Baks9FZr-1713070530762)]上述的面试题答案都整理成文档笔记。

Python入门习题(43)——CCF CSP认证考试真题:小明放学_csp小明放学python-程序员宅基地

文章浏览阅读1.2k次。CCF CSP认证考试真题(201812-2):小明放学问题描述解题思路参考答案测试用例小结问题描述试题编号: 201812-2试题名称: 小明放学时间限制: 1.0s内存限制: 512.0MB问题描述:题目背景  汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安..._csp小明放学python