Files
2026-08-01 05:05:25 +08:00

32 lines
671 B
C

/**
* @file key.c
* @brief 单 GPIO 按键控制实现 (低电平有效, 软件消抖)
*/
#include "key.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
static int s_gpio = -1;
void key_init(int gpio)
{
s_gpio = gpio;
gpio_reset_pin(s_gpio);
gpio_set_direction(s_gpio, GPIO_MODE_INPUT);
gpio_set_pull_mode(s_gpio, GPIO_PULLUP_ONLY);
}
bool key_is_pressed(void)
{
if (s_gpio < 0) return false;
/* 低电平有效 + 简单消抖: 连续两次读到低电平才算按下 */
if (gpio_get_level(s_gpio) == 0) {
vTaskDelay(pdMS_TO_TICKS(20));
return (gpio_get_level(s_gpio) == 0);
}
return false;
}