在学习过程中,遇到了要使用很多个按键的情况,(没有同时按下的处理,没有用矩阵键盘)。一增加一个新按键,需要改动的地方太多,在网上看了一篇博客
https://blog.youkuaiyun.com/jiejiemcu/article/details/83097992
觉得它使用的方法不错,就进行学习研究,移植到stm32单片机上。这种编程思想值得学习,做个小总结。
typedef struct button
{
/* 下面是一个函数指针,指向判断按键手否按下的函数 */
uint8_t (*Read_Button_Level)(void); /* 读取按键电平函数,需要用户实现 */
char Name[BTN_NAME_MAX];
uint8_t Button_State : 4; /* 按键当前状态(按下还是弹起) */
uint8_t Button_Last_State : 4; /* 上一次的按键状态,用于判断双击 */
uint8_t Button_Trigger_Level: 2; /* 按键触发电平 */
uint8_t Button_Last_Level: 2; /* 按键当前电平 */
uint8_t Button_Trigger_Event; /* 按键触发事件,单击,双击,长按等 */
Button_CallBack CallBack_Function[number_of_event];
uint8_t Button_Cycle; /* 连续按键周期 */
uint8_t Timer_Count; /* 计时 */
uint8_t Debounce_Time; /* 消抖时间 */
uint8_t