初始化仓库

This commit is contained in:
2025-08-31 21:43:17 +08:00
commit be600d0769
45 changed files with 22852 additions and 0 deletions

69
Source/button.c Normal file
View File

@@ -0,0 +1,69 @@
#include "button.h"
uint32 button_press_time = 0; // 按钮按下时间计数
static volatile button_status_enum button_status = BUTTON_NO_PRESS; // 按钮LED状态
void button_init()
{
gpio_mode(BUTTON_LED_R, GPO_PP);
gpio_mode(BUTTON_LED_G, GPO_PP);
gpio_mode(BUTTON_LED_O, GPO_PP);
gpio_set_level(BUTTON_LED_R, 0);
gpio_set_level(BUTTON_LED_G, 0);
gpio_set_level(BUTTON_LED_O, 0);
gpio_pull_set(BUTTON_NO_PIN, PULLUP); // 设置按钮引脚
gpio_pull_set(BUTTON_NC_PIN, PULLUP); // 设置按钮引脚
gpio_mode(BUTTON_NO_PIN, GPIO); // 设置按钮引脚为输入模式
gpio_mode(BUTTON_NC_PIN, GPIO); // 设置按钮引脚为输入模式
// PINIPH |= 0x01;
// PINIPL |= 0x01;
// P0IM0 &= 0x3F;
// P0IM1 &= 0x3F;
// P0INTE |= 0xC0;
}
void button_1ms_callback()
{
if(gpio_get_level(BUTTON_NO_PIN) == 0)
{
button_press_time ++;
if(button_press_time >= 10000) // 防止溢出
{
button_press_time = 10000; // 限制最大值
}
}
else if(gpio_get_level(BUTTON_NC_PIN) == 0)
{
button_press_time = 0;
button_status = BUTTON_NO_PRESS; // 按钮未按下
}
if(button_press_time >= BUTTON_LONG_PRESS_TIME)
{
button_status = BUTTON_LONG_PRESS; // 设置按钮状态为长按
}
else if(button_press_time >= BUTTON_SHORT_PRESS_TIME && button_status != BUTTON_SHORT_PRESS_HANDLED)
{
button_status = BUTTON_SHORT_PRESS; // 设置按钮状态为短按
}
}
button_status_enum button_get_status()
{
if(button_status == BUTTON_SHORT_PRESS)
{
button_status = BUTTON_SHORT_PRESS_HANDLED; // 短按已处理
return BUTTON_SHORT_PRESS;
}
else
{
return button_status;
}
}
void button_led_set(button_led_enum led)
{
gpio_set_level(BUTTON_LED_R, led == BUTTON_LED_R);
gpio_set_level(BUTTON_LED_G, led == BUTTON_LED_G);
gpio_set_level(BUTTON_LED_O, led == BUTTON_LED_O);
}