共享一个非常有用的按钮组件

在开发嵌入式系统或微控制器程序的过程中,我们经常遇到各种按钮要求,例如短按按钮,长按按钮和双击双击。

尽管这些功能并不难,但要编写好这些功能并不容易。

Internet上已经有这样的组件。

组件的功能如下:使用时,系统不会阻塞。

低耦合。

可以单击,双击和长按相同的按钮。

可以根据按钮的行顺序进行更改,例如高电平触发或低电平触发。

级别触发按钮检测组件的功能接口如下:1.初始化按钮/ ** * @name Init_Key_Struct * @brief初始化按钮* @param Update_Key_CallBack:更新按钮状态* @param Debug_CallBack:打印按钮调试信息* @retval 0:成功; * 1:Update_Key_CallBack == NULL; * / char Init_Key_Struct(void(* Update_Key_CallBack)(void),void(* Debug_CallBack)(unsigned char * debug_mess));参数Update_Key_CallBack用于更新键状态,即按下或释放,是的函数指针,该值不能为NULL。

参数Debug_CallBack用于打印按钮组件的异常信息,它也是一个函数指针。

如果不需要它,可以将此参数写入NULL。

2.注册按钮/ ** * @name Reg_Key * @brief添加注册按钮(注意:如果按钮已经注册,则再次注册将覆盖先前注册的相同按钮)* @param key_s:按钮状态* @param count :键计数* @param Trig_Mode_E:键触发模式* @param Key_Mode_E:键模式* @param Key_Click_CallBack:键触发回调* @retval 0:成功; * 1:Key_Click_CallBack == NULL; * 2:Key.Reg_Key_Num& gt; Key_Num_Max; * / Char Reg_Key(unsigned char * key_s,const unsigned short count,Trig_Mode_TypeDef Trig_Mode_E,Key_Mode_TypeDef Key_Mode_E,void(* Key_Click_CallBack)(void));参数key_s是按键的状态,即按键被按下或释放。

“在Update_Key_CallBack回调函数中。

参数计数是按钮计数,这意味着当按下按钮多少次时会触发相应的回调。

此回调是参数Key_Click_CallBack。

参数Trig_Mode_E表示按钮的启动方法。

该组件由枚举描述:/ ** * @简要键触发模式状态枚举* / typedef枚举(N_Trig = 0,/ *!< 0空* / L_Trig,/ *!< 1低级别触发器* / H_Trig,/ *!< 2高压Ping触发器* /} Trig_Mode_TypeDef;参数Key_Mode_E是按钮模式,共有三种类型:单击,双击和长按。

由枚举描述:/ ** * @简短按钮模式状态枚举* / typedef枚举{N_Click = 0,/ *!< 0空* / S_Click,/ *!< 1单击* / D_Click ,/ *!< 2双击* / L_Press,/ *!< 3长按* /} Key_Mode_TypeDef;参数Key_Click_CallBack是在相应模式下启动的回调函数,它是一个函数指针。

3.密钥检测/ ** * @name Key_Detect * @简短密钥检测* @param none * @retval 0:成功; * 1:Key.Update_Key_CallBack == NULL; * / char Key_Detect(void);使用此接口要检测按钮状态,请在使用此功能时定期召集。

当该函数返回0时,表示该函数已在运行。

如果返回1,则表示用于更新按钮级别状态的回调函数Update_Key_CallBack为空。

4.打印组件版本信息/ ** * @名称Get_Version_Mess * @简短打印Key_Detect组件版本信息* @param无* @retval返回Key_Detect组件版本信息* / char * Get_Version_Mess(void)我们分别是一,二和三这个按钮组件的核心功能,让我们看一下如何使用此组件。

以下是我使用Wildfire Overbearing F103开发板实现的示例。

该代码仅发布了部分内核:5.部分示例实现和说明// //单击按钮时的事件值#define KEY_SIGNAL 0 //长按按钮时的事件值#define KEY_LONG 1 //未发出按钮时的事件值#define KEY_NULL -1 / *按钮状态==>按下或释放* / uint8_t Key_Status = 0; / *键事件==>对应于单击,双击,长按* / int Key_Event = KEY_NULL; / *单击按钮时的回调* / void key_S_CallBack(void){Key_Event = KEY_SIGNAL;} / *长按该键时的回调* / void key_L_CallBack(void){Key_Event = KEY_LONG;} / *获取密钥状态* / void Get_Key_Status(void){Key_Status = HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);} / *打印调试信息* / void Print_Debug_mess(unsigned char * debug_Mess){ (“%s " debug_Mess);} / ** * @brief应用程序入口点。

* @retval int * / int main(voi

联系方式

位居电子保护元件及天线产品之领导地位的佳邦科技,为电脑、通信、消费性及车用电子市场提供了多元化的选择。为了让电子产品可以发挥更完善、有效率的功能,佳邦科技提供了完整的电路保护、电磁干扰/电磁防护、电源保护、RF天线产品线。佳邦在台湾保持元件及天线产品领先的地位。
在高度竞争的市场中大幅成长并达到效率的改善,产品良率的提升,以及成本效益的掌控,此外并要取得在先进电子保护元件与无线电射频天线市场的领导地位。

查看详情

在线咨询