当前位置: 首页 > news >正文

零基础RT-thread第二节:按键控制

我这里依然使用的是野火开发板,F767芯片。
这一节写一下按键控制LED亮灭。
在这里插入图片描述
在这里插入图片描述
这是按键以及LED的原理图。
按键对应的引脚不按下时是低电平,按下后是高电平。
LED是在低电平点亮。
接下来是key.c:

/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2025-06-13     c       the first version*/#include "key.h"/* 初始化按键引脚 */
void key_init(void)
{rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT);rt_pin_mode(KEY2_PIN, PIN_MODE_INPUT);
}/* 获取指定按键状态 */
rt_bool_t key_state_get(rt_base_t pin)
{if(rt_pin_read(pin)){while(rt_pin_read(pin));return 1;}else {return 0;}
}

然后是key.h文件

/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2025-06-13     c       the first version*/
#ifndef APPLICATIONS_KEY_H_
#define APPLICATIONS_KEY_H_#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>#define KEY1_PIN GET_PIN(A, 0)
#define KEY2_PIN GET_PIN(C, 13)void key_init(void);rt_bool_t key_state_get(rt_base_t pin);#endif /* APPLICATIONS_KEY_H_ */

最后是main.c文件:

// main.c
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <key.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>#define LED_R_PIN    GET_PIN(H, 10)  // PH10 (122)
#define LED_G_PIN    GET_PIN(H, 11)  // PH11 (123)
#define LED_B_PIN    GET_PIN(H, 12)  // PH12 (124)static rt_base_t led_r_stat = PIN_LOW;
static rt_base_t led_g_stat = PIN_HIGH;
static rt_base_t led_b_stat = PIN_HIGH;int main(void)
{LOG_I("System startup!");rt_pin_mode(LED_R_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LED_G_PIN, PIN_MODE_OUTPUT);rt_pin_mode(LED_B_PIN, PIN_MODE_OUTPUT);rt_pin_write(LED_G_PIN, led_g_stat);rt_pin_write(LED_B_PIN, led_b_stat);while (1){if (key_state_get(KEY1_PIN)) {//key1控制红灯 led_r_stat = (led_r_stat == PIN_LOW) ? PIN_HIGH : PIN_LOW;rt_pin_write(LED_R_PIN, led_r_stat);}if (key_state_get(KEY2_PIN)) {//key2控制绿灯led_g_stat = (led_g_stat == PIN_LOW) ? PIN_HIGH : PIN_LOW;rt_pin_write(LED_G_PIN, led_g_stat);}rt_thread_mdelay(500);}return RT_EOK;
}

这段代码很简单,但其实我在写代码时遇到了很多问题,按键一直不管用,LED也不能正常点亮。然后我胡乱调试,突然间就可以了 ,具体是什么原因也没有找到,很可惜没有发现到底问题出在哪里。

不管怎么说,实验最后还是成功了。

相关文章:

  • MQTT 和 CoAP物联网通信协议之争:MQTT 与CoAP 深度对比分析
  • 如何编写高效的Prompt:从入门到精通
  • 前端基础知识CSS系列 - 03(em/px/rem/vh/vw)
  • CS144 lab0: warmup
  • Flutter网络请求完全指南:http与Dio库深度解析
  • js调试技巧
  • 微机原理与接口技术,期末冲刺复习资料(汇总版)
  • React配置别名路径完整指南
  • Spring MVC扩展消息转换器-->格式化时间信息
  • Python的“Rstudio“——Pycharm
  • 17.vue.js响应式和dom更新
  • LangChain执行引擎揭秘:RunnableConfig配置全解析
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——A
  • c 语言如何将 uint8_t *tg_pFrames的数据给 uint8_t **ppJpg
  • 数据库管理员密码重置指南:MySQL, Oracle, PostgreSQL
  • 华为OD机考-货币单位换算-字符串(JAVA 2025B卷)
  • Cursor ReAct Agent技术架构
  • OpenLayers 创建坐标系统
  • 自注意力 vs 卷积 vs 循环层:长距离依赖建模的终极对决
  • 2.3.3 07年T2
  • 公安部/宁波seo营销平台
  • 宝鸡手机网站开发/少儿编程
  • 如何建设网站 知乎/网上做推广怎么收费
  • 旧宫做网站的公司/排名检测
  • 金乡网站建设哪家便宜/山东疫情最新情况
  • 饰品网站设计方案/海淀区seo引擎优化