GD32E231开发板上仅有一个用户按键"Wakeup",而我的项目中至少需要用户输入的两种状态,最简单的方法则通过识别用户的长按或短按。我是这样处理的,设置 按键为 中断方式,在中断处理程序中将全局变量keys = 1,这是中断处理程序的代码:
void EXTI0_1_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(EXTI_0)){
keys = 1;
gd_eval_led_toggle(LED4);
}
exti_interrupt_flag_clear(EXTI_0);
}
在main循环中检测到keys>0就跳转到按键处理程序,代码如下:
if(keys > 0) //有键按下
key_processing();
在按键处理程序中通过延时后再检测按键是否仍在按下状态,代码如下:
delay_1ms(100);
if(SET == gpio_input_bit_get(GPIOA,GPIO_PIN_0))
keys = 3;
delay_1ms(200);
if(SET == gpio_input_bit_get(GPIOA,GPIO_PIN_0))
keys = 6;
中断处理和主循环判断都很正常,但在按键处理中却不能达到目的,无论按键时间长短,keys始终为1。
我将中断处理程序里面的keys = 1改为keys++,注释掉按键处理这段代码,则返回的keys值会变化,但不能稳定地与按键时间长短对应。
整个五一节日都在反复调试工,至今仍无法得到满意的结果,请各位大侠帮忙看看是何原因,应该采取何种方式才能达到要求。先谢谢各位!
|