基于HAL库的按键(KEY)库函数

编程入门 行业动态 更新时间:2024-10-09 06:24:25

基于HAL库的<a href=https://www.elefans.com/category/jswz/34/1768597.html style=按键(KEY)库函数"/>

基于HAL库的按键(KEY)库函数

key.c

/*********************************************************************************** @file      key.c* @brief     按键操作源文件* @author    Jia Yasen* @date      2022-6-20* @version   V0.0.1* @copyright @Etherealize*********************************************************************************/
/*-----------------------------Includes---------------------------------------*/
#include "key.h"
/*-----------------------------Function---------------------------------------*//*** @brief      按键扫描(持续触发)* @param[in]  None* @return     uint8_t 对应按键值* @retval     0       默认值,无操作*             1       KEY0对应值,表示KEY0按下,可在循环中查询是否为1来进行对应操作*             2       KEY1对应值* @details    持续触发,则确认按下后的那部分会在按下的时间里执行很多次,因为按下*             的时间有零点几秒,但是程序每几毫秒循环一次。所以在按下的时间里会执行多次*/
uint8_t KEY_Scan1(void)
{if(KEY0 == KEY_ON || KEY1 == KEY_ON){HAL_Delay(10);//延时10-20ms,软件消抖if(KEY0 == KEY_ON) {return KEY0_PRES;//此处的操作会多次执行}else if(KEY1 == KEY_ON) {return KEY1_PRES;//此处的操作会多次执行}//一般是按下触发事件,松开返回正常状态,不触发else return 0;}return 0;//没有按下默认返回0
}/*** @brief      按键扫描(单次触发)* @param[in]  None* @return     uint8_t 对应按键值* @retval     0       默认值,无操作*             1       KEY0对应值,表示KEY0按下,可在循环中查询是否为1来进行对应操作*             2       KEY1对应值* @details    单次触发:用key_up作为制约,按下后只会触发一次操作,直到松开才会使下一次按下发挥作用*/
uint8_t KEY_Scan2(void)
{//静态变量存储在静态存储区,只会在程序一开始的时候初始化一次,将局部变量静态化可以使变量独立于函数,而不是每次调用函数时重新初始化一次static uint8_t key_up = 1; //按键松开标志//用key_up作为约束,在第一次检测到按键按下并执行操作之后key_up变为0,在持续按住按键的之后几次扫描中都不会触发if(key_up && (KEY0 == KEY_ON || KEY1 == KEY_ON)){HAL_Delay(10);key_up = 0;if(KEY0 == KEY_ON){return KEY0_PRES;//}else if(KEY1 == KEY_ON){return KEY1_PRES;//操作只会触发一次}elsereturn 0;}else if(KEY0 == KEY_OFF && KEY1 == KEY_OFF) key_up = 1;//按键松开时key_up重置,下次再按下才会触发return 0;
}/*** @brief      按键扫描* @param[in]  mode 模式转换. 0:单次触发 1:持续触发* @return     uint8_t 对应按键值* @retval     0       默认值,无操作*             1       KEY0对应值,表示KEY0按下,可在循环中查询是否为1来进行对应操作*             2       KEY1对应值* @details    若持续触发,则确认按下后的那部分会在按下的时间里执行很多次,因为按下*             的时间有零点几秒,但是程序每几毫秒循环一次,所以在按下的时间里会执行多次.*             若单次触发:用key_up作为制约,按下后只会触发一次操作,直到松开才会*             使下一次按下发挥作用.*/
uint8_t KEY_Scan(uint8_t mode)
{static uint8_t key_up = 1; //按键松开标志if(mode) key_up = 1; //mode为1时,每次扫描都会重置key_up,操作就可以不断触发,持续触发if(key_up == 1 && (KEY0 == KEY_ON || KEY1 == KEY_ON)){HAL_Delay(10); // 软件消抖key_up = 0;if(KEY0 == KEY_ON){return KEY0_PRES;}else if(KEY1 == KEY_ON){return KEY1_PRES;}elsereturn 0;}else if(KEY0 == KEY_OFF && KEY1 == KEY_OFF) key_up = 1;//松开则刷新key_upreturn 0;
}/************************ (C) COPYRIGHT Etherealize*****END OF FILE***********/

key.h

/*********************************************************************************** @file      key.h* @brief     按键操作头文件* @author    Jia Yasen* @date      2022-6-20* @version   V0.0.1* @copyright @Etherealize********************************************************************************* @attention 1.本文件的函数均基于HAL库,按键KEY的初始化基于GPIO的初始化,GPIO对应引脚*            初始化为输入模式即可*            2.由于不同板子的对应引脚不同,使用前需先对照原理图修改KEY对应的引脚*********************************************************************************/
#ifndef __KEY_H__
#define __KEY_H__
/*-----------------------------Includes---------------------------------------*/
//根据使用的芯片型号进行修改
#include "stm32f1xx_hal.h" 
/*-----------------------------Define-----------------------------------------*/
//将KEYx定义为对应引脚的读取值
#define KEY0 HAL_GPIO_ReadPin(GPIOx,GPIO_PIN_x)
#define KEY1 HAL_GPIO_ReadPin(GPIOx,GPIO_PIN_x)
//给不同的KEY设定不同的对应数字,表示对应KEY按下;也表示不同的优先级,数字越小优先级越高;不用0,因为0是函数的默认返回值
#define KEY0_PRES 1
#define KEY1_PRES 2
//KEY_ON表示按键按下,KEY_OFF表示按键松开;使用前先根据原理图修改对应关系
#define KEY_ON GPIO_PIN_RESET
#define KEY_OFF GPIO_PIN_SET
/*-----------------------------Function---------------------------------------*/
uint8_t KEY_Scan1(void);
uint8_t KEY_Scan2(void);
uint8_t KEY_Scan(uint8_t mode);#endif
/************************ (C) COPYRIGHT Etherealize*****END OF FILE***********/

更多推荐

基于HAL库的按键(KEY)库函数

本文发布于:2024-03-10 00:19:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726530.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按键   库函数   HAL   KEY

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!