标题:
分享已在项目中使用的多功能按键程序-基于stm32 Hal库的多功能按键程序
[打印本页]
作者:
Angle145
时间:
2021-7-18 12:06
标题:
分享已在项目中使用的多功能按键程序-基于stm32 Hal库的多功能按键程序
有需求的可以参考
在cubemx中将key引脚重命名为KEY,并设为下降沿触发、上拉。
其中断优先级要设置比systick中断要低。其他的具体使用请查看key.h
STM32单片机源程序如下:
#include "key.h"
KEY_PARAM key_param;
void key_once_click_result_calculate(void)
{
u32 priod_t=KEY_PRESS_TIMEOUT-key_param.press_time_count;
if(priod_t<1000)
{
if(key_param.fun_once_click!=NULL) key_param.fun_once_click();//单击
}
else if(priod_t<2500)
{
if(key_param.fun_once_click_2s!=NULL)key_param.fun_once_click_2s();//单击长按2s
}
else if(priod_t<KEY_PRESS_TIMEOUT)
{
if(key_param.fun_once_click_4s!=NULL)key_param.fun_once_click_4s();//单击长按2s
}
key_param.press_up_time_count=0;
key_param.bool_press=FALSE;
}
<blockquote>void key_timer_handler(void)
复制代码
#ifndef _KEY_H_
#define _KEY_H_
#include "main.h"
#define STRAIGHT_CLIK_NUM_MAX 3 //最多连续点击次数
#define KEY_PRESS_TIMEOUT 5000
#define NO_CLIK_TIMEOUT 500
//动作定义
typedef enum
{
KEY_NONE=0, //无按下 - 无功能
KEY_TIMEOUT, //超时 -
KEY_ONCE, //单击 -
KEY_DOUBLE, //双击 -
KEY_LONG_2S, //单击后长按2秒 -
KEY_LONG_4S //单击后长按4秒 -
}KEY_ACTION;
typedef struct
{
u32 press_time_count;
u32 press_down_time_count;
u32 press_up_time_count;
u8 press_result;
u8 press_count;
u8 funcode;
u8 bool_press;
u8 bool_press_double_start;
u8 bool_ok;
u8 bool_pass;
fun fun_click_down; //按键按下的事件
fun fun_click_up; //按键抬起事件
fun fun_once_click; //单击事件
fun fun_once_click_2s; //长按2S事件
fun fun_once_click_4s; //长按4秒事件
fun fun_once_click_timeout; //长按超时事件
fun fun_double_click; //双击事件
}KEY_PARAM;
extern KEY_PARAM key_param;
void key_handler(void);//放在按键中断函数中,按键中断优先级必须比systick的小。
#endif
/*使用说明
*配合HAL库使用
*需要在stm32xx_it.c中包含key.h头文件
*在按键中断函数中调用key_handler()函数
*在main函数中初始化绑定按键事件
*绑定按键事件未例:
key_param.fun_click_down=led_on;
key_param.fun_click_up=led_off;
key_param.fun_once_click_2s=device_report_start;
key_param.fun_once_click_4s=device_report_end;
key_param.fun_once_click_timeout=device_reboot;
其中led_on、led_off等是用户函数,即
void led_on(void);
void led_off(void);等
按键采用绑定功能函数形式,增加灵活性。
除了初始化绑定外,还可以进程中动态绑定或更改绑定。
*/
复制代码
51hei.png
(3.23 KB, 下载次数: 108)
下载附件
2021-7-18 14:37 上传
为了方便保存,上面2个文件打包下载(或者直接从网页复制粘贴也行):
stm32-hal多功能按键.zip
(2.05 KB, 下载次数: 42)
2021-7-18 19:37 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
bg4htp
时间:
2023-12-14 15:50
学习了,正在研究这玩意儿
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1