初始化仓库
This commit is contained in:
69
Source/button.c
Normal file
69
Source/button.c
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user