老李的RT-THREAD学习03--按键操作
和点灯一样,按键操作也是最常用的功能,这一篇来把这个搞定
main.c 代码修改
这一篇很简单,在第2篇的基础上对代码略做修改即可,需要改3处
1 定义GPIO引脚
#define KEY0_PIN GET_PIN(I, 7)
2 设定GPIO方向
//按键的控制方向是输入
rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT);
3 加入控制代码
//LED0作为按键是否按下的指示
if(rt_pin_read(KEY0_PIN) == 0)
rt_pin_write(LED0_PIN, 1);
else
rt_pin_write(LED0_PIN, 0);
if(count % 30 == 0) //每30次循环从串口输出一次数据,即3秒一次
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(100); //每个循环时间改为100毫秒
编译,下载
LED1会闪烁
KEY0按键按下时,LED0会点亮,松开后LED0会熄灭
之所以将rt_thread_mdelay(100);从1000改为100,是为了闪得快些,看得清楚
每30次循环,即3秒,串口输出一行文字。
完整代码
//我的板子上的LED位于PB6和PH11,按键位于PI7
#define LED0_PIN GET_PIN(B, 11)
#define LED1_PIN GET_PIN(H, 6)
#define KEY0_PIN GET_PIN(I, 7)
#include <rtthread.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
//按芯片生成的工程,需要手动添加以下头文件,及后续操作代码
#include <rtdevice.h>
#include <board.h>
int main(void)
{
int count = 1;
//LED的控制方向是输出
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
//按键的控制方向是输入
rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT);
while (count++)
{
rt_pin_write(LED1_PIN, (count+1) % 2); //LED1闪烁
//LED0作为按键是否按下的指示
if(rt_pin_read(KEY0_PIN) == 0)
rt_pin_write(LED0_PIN, 1);
else
rt_pin_write(LED0_PIN, 0);
if(count % 30 == 0) //每30次循环从串口输出一次数据,即3秒一次
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(100); //每个循环时间改为100毫秒
}
return RT_EOK;
}
还有最后一件事,点赞 关注