漫谈LiteOS之开发板-用户按键与LED灯(基于GD32450i-EVAL)
4 用户按键与LED灯
1 GD32450i-EVAL硬件回顾
GD32450i-EVAL开发板有4个按键,分别为Reset复位键、Wakeup键、Tamper键和User按键。同时还有3个LED灯,分贝为LED1、2、3。
2 目的
通过用户按键控制LED的实验,即使用四个按键中的Tamper按键进行对于LED1的控制。这里与中断的不同的是使用GPIO轮询模式来检测IO端口的输入值,如果输入为低电平,将等指定待延时时间。之后再次检测IO端口的输入状态。如果输入仍然为低电平,表明按键成功按下,翻转LED1的输出状态。通过上述方式,来学习使用GPIO来控制LED灯和按键,同时学会使用SysTick来控制时延。当然上述实验也可以使用不同的按键控制不同的LED灯。只需要对函数参数进行简单的修改即可。
3 硬件原理
3.1 LED灯原理
如图1所示,LED灯的阴极接地,而阳极通过电阻后接到了MCU的PF引脚上,因此可见当引脚PF(GPIO)输入为高电平时LED灯点亮,当其输入为低电平时LED灯熄灭。
图1 LED灯原理图
3.2 按键驱动原理
如图2所示,该图显示了GD32450i-EVAL开发板的除复位reset按键的其余3个按键Wakeup、Tamper、以及USER按键。其原理相同,以Tamper为例,都是当按键按下时,引脚PC13(GPIO)此时接到GND上,当按键弹起时,引脚PC13(GPIO)接到高电平上。
图2 按键驱动原理图
4 程序简介
其程序大部分与中断控制LED灯的方式相似但是控制方式是轮训的方式,具体如下:
// 初始化按键
gd_eval_key_init(KEY_TAMPER,KEY_MODE_GPIO);
//配置SysTick时钟定时器
systick_config();
// 初始化LED灯
gd_eval_led_init(LED1);
while(1){
// 查看Tamper按键的状态
if(RESET == gd_eval_key_state_get(KEY_TAMPER)){
//延时100ms
delay_1ms(100);
//再次查询Tamper按键状态
if(RESET == gd_eval_key_state_get(KEY_TAMPER)){
//为位操作寄存器和位清除寄存器写数据
gpio_bit_write(LED1_GPIO_PORT, LED1_PIN, (bit_status)((1 - gpio_output_bit_get(LED1_GPIO_PORT, LED1_PIN))));
}
}
}
5 实验效果
本实验中的Tamper按键相当于一个LED1的“开关”。当我们将程序下载到开发板后,首先按reset按键。。按下Tamper按键会使得LED1点亮,当再次按下Tamper按键时,LED1将会熄灭。具体实验效果如下图所示。
图3 LED灯点亮
图4 LED灯熄灭
- 点赞
- 收藏
- 关注作者
评论(0)