【GD32F307E-START】+按键的测试
[复制链接]
调试了几天,软件、硬件I2C都没有结果,挺抑郁的,为了找点成就感,增添信心,今天测试了按键。
开发板上有两个按键,一个是复位键,另一个是用户键(User Key),首先测试轮询法按键。参照范例,首先在主程序开始时调用按键初始化函数,注意按键名称不能用丝印上的User Key,而要用KEY_WAKEUP,如果您非用KEY_USER,那就得修改引脚的宏定义。初始化函数的另一个参数是按键的工作模式,首先用轮询模式,初始化的代码如下:
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_GPIO);
然后在主循环中写下捕捉按键及延时消抖和处理的代码:
/* check whether the button is pressed */
if(RESET == gd_eval_key_state_get(KEY_WAKEUP)){
/* delay 100ms for software removing jitter */
delay_1ms(100);
/* check whether the button is pressed */
if(RESET == gd_eval_key_state_get(KEY_WAKEUP)){
; //按键处理代码
}
}
接着测试按键的中断模式,按键初始化的代码参数修改为:
gd_eval_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
然后修改在中断处理函数,板上按键的引脚是A0,则应修改中断0的处理函数。我没有在中断函数中直接处理按键,而是使用全局变量keyn来传递按键信息,代码如下:
void EXTI0_IRQHandler(void)
{
/* delay 100ms for software removing jitter */
delay_1ms(100);
/* check whether the button is pressed */
if(RESET == gd_eval_key_state_get(KEY_WAKEUP)){
keyn++;
}
exti_interrupt_flag_clear(EXTI_0);
}
最后在主循环中进行按键处理,我是用一个变量记录按键次数,然后在LCD屏幕上显示,代码如下:
if(keyn > 0){
keys++;
LCD_write_value(60,2,3,0,1,keys);
keyn = 0;
}
测试过程见下图:
|