STM32CubeMX | MultiButton:一个小巧简单易用的事件驱动型按键驱动模块实现按键单机、双击、多击、长按

本文主要是介绍STM32CubeMX | MultiButton:一个小巧简单易用的事件驱动型按键驱动模块实现按键单机、双击、多击、长按,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32CubeMX | MultiButton:一个小巧简单易用的事件驱动型按键驱动模块实现按键单机、双击、多击、长按


目录

  • STM32CubeMX | MultiButton:一个小巧简单易用的事件驱动型按键驱动模块实现按键单机、双击、多击、长按
      • 简介
      • STM32基础工程生成
      • 移植使用
      • 效果测试


开发测试环境:

  • WIN10
  • STM32F103RB
  • STM32CubeMX

本章博客涉及代码,关注以下公众号,回复关键字stm32key获取下载链接!


简介

MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

这是作者写的简介,目前作者已经收获五百多个star,该源码非常小巧且很易于理解,可以实现按键单机、双击、长按、长按保持、按键按下时的事件、按键弹起时的事件等,使用起来非常方便,附上源码下载链接:

源码下载:https://gitcode.net/mirrors/0x1abin/MultiButton


STM32基础工程生成

本博客基于STM32使用STM32CubeMX生成基础代码。

时钟配置:

按键配置(我的按键是按下为低电平):

调试打印串口配置:

最后生成代码即可:


移植使用

MultiButton移植起来也是非常的简单,就只有一个头文件和源文件,将这两个文件加入我们的工程即可:

需要首先定义一个按键句柄:

struct Button button1;

定义获取按键状态的函数:

uint8_t read_button_pin(void)
{return HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_SET ? 1 : 0;
}

接下来就是实现按键事件的回调函数:

/// 读取按键状态
uint8_t read_button_pin(void)
{return HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_SET ? 1 : 0;
}/// 单击事件
void button_single_click_callback(void* arg)
{printf("%s\r\n", __FUNCTION__);
}/// 双击事件
void button_double_click_callback(void* arg)
{printf("%s\r\n", __FUNCTION__);
}/// 连击,如连续按3下
void button_press_repeat_callback(void* arg)
{struct Button* bt =  (struct Button *)arg;printf("%s:%d\r\n", __FUNCTION__, bt->repeat);  // repeat是变量用来记录按下的次数的
}/// 长按触发
void button_press_start_callback(void* arg)
{printf("%s\r\n", __FUNCTION__);
}/// 保持长按时一直触发
void button_press_hold_callback(void* arg)
{printf("%s\r\n", __FUNCTION__);
}

然后需要初始化并注册事件:

	// 初始化button_init(&button1, read_button_pin, 0);// 注册按键事件button_attach(&button1, SINGLE_CLICK, button_single_click_callback);button_attach(&button1, DOUBLE_CLICK, button_double_click_callback);button_attach(&button1, PRESS_REPEAT, button_press_repeat_callback);button_attach(&button1, LONG_PRESS_START, button_press_start_callback);button_attach(&button1, LONG_PRESS_HOLD, button_press_hold_callback);// 启动按键监测button_start(&button1);while (1){button_ticks();             // 按键轮训,每TICKS_INTERVALms查询一次HAL_Delay(TICKS_INTERVAL);    }

按键检测时长可以根据自己的需求进行更改,在头文件中的宏定义:


效果测试


ends…

这篇关于STM32CubeMX | MultiButton:一个小巧简单易用的事件驱动型按键驱动模块实现按键单机、双击、多击、长按的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/158945

相关文章

Python实现剪贴板历史管理器

《Python实现剪贴板历史管理器》在日常工作和编程中,剪贴板是我们使用最频繁的功能之一,本文将介绍如何使用Python和PyQt5开发一个功能强大的剪贴板历史管理器,感兴趣的可以了解下... 目录一、概述:为什么需要剪贴板历史管理二、功能特性全解析2.1 核心功能2.2 增强功能三、效果展示3.1 主界面

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Gradle在国内配置镜像加速的实现步骤

《Gradle在国内配置镜像加速的实现步骤》在国内使用Gradle构建项目时,最大的痛点就是依赖下载贼慢,甚至卡死,下面教你如何配置国内镜像加速Gradle下载依赖,主要是通过改写repositori... 目录引言一、修改 build.gradle 或 settings.gradle 的 reposito

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的