开源库介绍
MultiButtonMultiButton
一个高效、灵活的多按键状态机库,支持多种按键事件检测。
将MultiButton添加进入工程
使用git工具下载源码
==安装git工具==可以参考:视频-安装git
在工程中创建Bsp文件夹,专门用于放单片机的底层驱动代码的文件,做到程序的分层设计,这也方便后续工程的直接迁移使用,在软件中,直接进去这个Bsp文件夹中,运行Git Bash,下载源码!
git clone https://github.com/0x1abin/MultiButton.git
或者git clone https://gitclone.com/github.com/0x1abin/MultiButton.git(使用GitHub镜像)
整个文件的结构是这样的:

排除不需要的文件
将除了Bsp\MultiButton\multi_button.c ,Bsp\MultiButton\multi_button.h ,Bsp\MultiButton\README.md 这三个文件之外的文件/文件夹,排除编译。只需要右键单击文件/文件夹,然后选择排除编译就可。
将创建的文件加入编译器
最重要的是,将创建的文件,添加进编译,和keil类似,入口在--工程->属性,具体操作如下:

这样就可以正常的编译,并在工程中被应用。
编写应用代码
接下来,README.md中有这个库的介绍和使用说明,直接看到快速开始部分,照做。
我创建了一个新的按键相关的文件,专门写案件相关的初始化和驱动函数Bsp\bsp_multibutton\bsp_multibutton.c和Bsp\bsp_multibutton\bsp_multibutton.h同样需要将这些加入进编译器配置
编写bsp_multibutton.c文件
以PA2和PA0做演示,前提将PA2配置为按键输入,PA0配置为LED灯的输出。那这个演示的代码实现的效果就是,按下按键,灯点亮,再次按下灯熄灭,就是灯在亮灭之间循环。
这个是GPIO相关的函数解释:GPIO库函数解释
#include "bsp_multibutton.h"
#define BUTTON1_GPIO_Port GPIOA
#define BUTTON1_Pin GPIO_Pin_2
// 前向声明
void btn1_single_click_handler(Button *btn);
// 定义按键
static Button btn1;
// 实现对GPIO 读取函数
uint8_t read_button_gpio(uint8_t button_id)
{
switch (button_id)
{
case 1:
return GPIO_ReadInputDataBit(BUTTON1_GPIO_Port, BUTTON1_Pin);
default:
return 0;
}
}
// 按键回调函数
void btn1_single_click_handler(Button *btn)
{
// 使用三元运算符
uint8_t current_state = GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, current_state ? Bit_RESET : Bit_SET);
}
// 初始化按键
void bsp_multibutton_init(void)
{
// 初始化按键 (active_level: 0=低电平有效, 1=高电平有效)
button_init(&btn1, read_button_gpio, 0, 1);
button_attach(&btn1, BTN_SINGLE_CLICK, btn1_single_click_handler);
button_start(&btn1); // 开始检测按键
}编写bsp_multibutton.h文件
#ifndef __BSP_MULTIBUTTON_H
#define __BSP_MULTIBUTTON_H
#include "debug.h"
#include "multi_button.h"
void bsp_multibutton_init(void);
#endif //__BSP_MULTIBUTTON_H
评论
暂无评论