漫谈LiteOS之开发板-用户按键与LED灯(基于GD32450i-EVAL)
【摘要】 相信大家通过前面的学习,对GPIO、中断、LED的使用以及按键都不陌生,本文结合GPIO、用户按键以及LED灯进行了一个综合性的实验,来向大家介绍如何使用GPIO来控制LED灯和按键。希望对你有所帮助
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灯熄灭
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)