长按 关机 短按开机 相关按键配置(低电平触发)
-
//============= 按钮任务函数,处理按钮事件 ===============
static int user_task_func(os_event_t *param)
{
switch(param->event_id)
{
case USER_EVT_BUTTON:
{
struct button_msg_t *button_msg;
const char *button_type_str[] = {
"BUTTON_PRESSED",
"BUTTON_RELEASED",
"BUTTON_SHORT_PRESSED",
"BUTTON_MULTI_PRESSED",
"BUTTON_LONG_PRESSED",
"BUTTON_LONG_PRESSING",
"BUTTON_LONG_RELEASED",
"BUTTON_LONG_LONG_PRESSED",
"BUTTON_LONG_LONG_RELEASED",
"BUTTON_COMB_PRESSED",
"BUTTON_COMB_RELEASED",
"BUTTON_COMB_SHORT_PRESSED",
"BUTTON_COMB_LONG_PRESSED",
"BUTTON_COMB_LONG_PRESSING",
"BUTTON_COMB_LONG_RELEASED",
"BUTTON_COMB_LONG_LONG_PRESSED",
"BUTTON_COMB_LONG_LONG_RELEASED",
};
button_msg = (struct button_msg_t *)param->param;
// co_printf("KEY 0x%08x, TYPE %s.\r\n", button_msg->button_index, button_type_str[button_msg->button_type]);if(button_msg->button_type == BUTTON_PRESSED) //短按按钮 { //if(button_msg->button_index == GPIO_PD4 ) //Key1 { co_printf("K2 Peleased A1\r\n"); Key_Num = 2; } } else if(button_msg->button_type == BUTTON_LONG_PRESSING) //长按按钮3S
// if(button_msg->button_type == BUTTON_LONG_RELEASED) //长按后释放3S
{
//if(button_msg->button_index == GPIO_PD4 )
{
co_printf("K1 BUTTON_LONG_PRESSING 5\r\n"); Key_Num = 5;
Power_OFF_After(); //关机前需要做的事
system_power_off(0xc6); //进入关机模式,电流2uA;
// system_sleep_enable(); //进入休眠;
}
}} break; } return EVT_CONSUMED;
}
GPIO初始化时如下配置:
//---------按键初始化 按钮 PD4 ---------
pmu_set_pin_dir(GPIO_PORT_D, BIT(4),GPIO_DIR_IN);
pmu_port_wakeup_func_set(GPIO_PD4); //使能低功耗唤醒
button_init(GPIO_PD4);