commit ddc5aa6aace0ed05ae78f613e1d6c928a5fcc649 Author: lhye200 Date: Sat May 3 12:53:40 2025 +0000 添加 button/button.c diff --git a/button/button.c b/button/button.c new file mode 100644 index 0000000..7ee7520 --- /dev/null +++ b/button/button.c @@ -0,0 +1,62 @@ +// 文件编码: GB18030 +/* + * button.c + * + * Created on: 2025年4月19日 + * Author: LHYe200 + */ + + +#include "button.h" + +gpio_pin_enum BUTTON_PIN[BUTTON_PIN_NUM] = BUTTON_PINS; +uint8 button_state[BUTTON_PIN_NUM]; // 按键状态 +uint16 button_last_time[BUTTON_PIN_NUM]; // 持续按下时间 + +void Button_Init(void) +{ + for(int i = 0; i < BUTTON_PIN_NUM; i++) + { + gpio_init(BUTTON_PIN[i], GPI, GPIO_LOW, GPI_PULL_UP); // 按键引脚初始化为输入模式,默认拉高 + } + memset(button_state, 0, sizeof(button_state)); // 清除按键状态 + memset(button_last_time, 0, sizeof(button_last_time)); // 清除上一次按键状态 +} + +void Button_Scan() +{ + for(int i = 0; i < BUTTON_PIN_NUM; i++) + { + if(gpio_get_level(BUTTON_PIN[i]) == GPIO_LOW) // 按键按下 + { + button_last_time[i] += BUTTON_SCAN_TIME; // 持续按下时间增加 + } + else // 按键松开 + { + button_last_time[i] = 0; // 持续按下时间清零 + } + if(button_last_time[i] >= BUTTON_LONG_PRESS_TIME) // 长按 + { + button_state[i] = BUTTON_LONG_PRESS; // 设置为长按状态 + } + else if(button_last_time[i] >= BUTTON_SHORT_PRESS_TIME) // 短按 + { + button_state[i] = BUTTON_SHORT_PRESS; // 设置为短按状态 + } + else // 未按下 + { + button_state[i] = BUTTON_RELEASE; // 设置为未按下状态 + } + } +} + +uint8 Button_Get_State(uint8 button_num) +{ + if(button_num >= BUTTON_PIN_NUM) // 按键编号越界 + { + return -1; // 返回错误 + } + return button_state[button_num]; // 返回按键状态 +} + +