標(biāo)題:
分享已在項(xiàng)目中使用的多功能按鍵程序-基于stm32 Hal庫的多功能按鍵程序
[打印本頁]
作者:
Angle145
時(shí)間:
2021-7-18 12:06
標(biāo)題:
分享已在項(xiàng)目中使用的多功能按鍵程序-基于stm32 Hal庫的多功能按鍵程序
有需求的可以參考
在cubemx中將key引腳重命名為KEY,并設(shè)為下降沿觸發(fā)、上拉。
其中斷優(yōu)先級要設(shè)置比systick中斷要低。其他的具體使用請查看key.h
STM32單片機(jī)源程序如下:
#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)
復(fù)制代碼
#ifndef _KEY_H_
#define _KEY_H_
#include "main.h"
#define STRAIGHT_CLIK_NUM_MAX 3 //最多連續(xù)點(diǎn)擊次數(shù)
#define KEY_PRESS_TIMEOUT 5000
#define NO_CLIK_TIMEOUT 500
//動(dòng)作定義
typedef enum
{
KEY_NONE=0, //無按下 - 無功能
KEY_TIMEOUT, //超時(shí) -
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; //長按超時(shí)事件
fun fun_double_click; //雙擊事件
}KEY_PARAM;
extern KEY_PARAM key_param;
void key_handler(void);//放在按鍵中斷函數(shù)中,按鍵中斷優(yōu)先級必須比systick的小。
#endif
/*使用說明
*配合HAL庫使用
*需要在stm32xx_it.c中包含key.h頭文件
*在按鍵中斷函數(shù)中調(diào)用key_handler()函數(shù)
*在main函數(shù)中初始化綁定按鍵事件
*綁定按鍵事件未例:
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;
其中l(wèi)ed_on、led_off等是用戶函數(shù),即
void led_on(void);
void led_off(void);等
按鍵采用綁定功能函數(shù)形式,增加靈活性。
除了初始化綁定外,還可以進(jìn)程中動(dòng)態(tài)綁定或更改綁定。
*/
復(fù)制代碼
51hei.png
(3.23 KB, 下載次數(shù): 108)
下載附件
2021-7-18 14:37 上傳
為了方便保存,上面2個(gè)文件打包下載(或者直接從網(wǎng)頁復(fù)制粘貼也行):
stm32-hal多功能按鍵.zip
(2.05 KB, 下載次數(shù): 42)
2021-7-18 19:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
bg4htp
時(shí)間:
2023-12-14 15:50
學(xué)習(xí)了,正在研究這玩意兒
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1