二、点灯基础实验

devtools/2025/1/20 6:43:51/

        嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。

如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通

2.1 打开初始工程,编写代码

          以下会实现BLINKY常亮,RGB灯挨个转换亮灭状态,出现不同颜色

#include <LPC11xx.h>// 粗糙的delay函数
void delay_1s()
{uint16_t i,j;for(i=0;i<30000;i++)for(j=0;j<200;j++);
}int main()
{// 使能GPIO时钟LPC_SYSCON -> SYSAHBCLKCTRL |= (1UL << 6);// 设置引脚为输出引脚LPC_GPIO1 -> DIR |= (1UL << 9); // PIO1_9 BLINKYLPC_GPIO2 -> DIR |= (1UL << 8);	// PIO2_8 GREENLPC_GPIO2 -> DIR |= (1UL << 9);	// PIO2_9 REDLPC_GPIO2 -> DIR |= (1UL << 10);// PIO2_10 BLUELPC_GPIO1 -> DATA &= ~(1UL << 9); //拉低点亮 while(1){LPC_GPIO2 -> DATA ^= (1UL << 8); // 状态反转delay_1s();LPC_GPIO2 -> DATA ^= (1UL << 9); // 状态反转delay_1s();LPC_GPIO2 -> DATA ^= (1UL << 10); // 状态反转delay_1s();}
}

2.2 函数封装

       为了之后更好使用,现在将这四个灯用函数封装,放在LED文件中。

路径包含:

先在工程下新建一个文件夹,我新建了一个code

如下图,option -> c/c++ -> path打开,选择文件夹

结果如下,其中.\是工程下的目录,有些工程文件进行移植时(直接复制粘贴工程),出现很长的路径,找不到别人引用的路径下的文件导致报错,问题就在这。需要改一下路径,把文件包含进来。需要文件时把文件放工程里一份会更好移植。

界面内文件结构处理,当往里面新加文件时,可以处理一下里面的分组也就是group,直接一堆放里面起始也行,换一下就一个作用,美观。

具体操作为,找到三个箱子(红绿白,魔术棒右边那个),也可以直接右击上方文件夹,选择manage project items, 界面如下

跟路径里差不多的操作,我改完是这样,然后点击ok即可(不点ok不保存)

右击,选择Add New Item

分别选.c .h 都存在code下面即可

然后往里写内容

LED.c

#include "LED.h"void LED_Init(void)
{// 使能GPIO时钟LPC_SYSCON -> SYSAHBCLKCTRL |= (1UL << 6);// 设置引脚为输出引脚LPC_GPIO1 -> DIR |= (1UL << 9); // PIO1_9 BLINKYLPC_GPIO2 -> DIR |= (1UL << 8);	// PIO2_8 GREENLPC_GPIO2 -> DIR |= (1UL << 9);	// PIO2_9 REDLPC_GPIO2 -> DIR |= (1UL << 10);// PIO2_10 BLUE
}

LED.h

#ifndef _LED_H_
#define _LED_H_#include <LPC11xx.h>#define LED_ON() LPC_GPIO1 -> DATA &= ~(1UL << 9); // 对应位给0
#define LED_OFF() LPC_GPIO1 -> DATA |= (1UL << 9); // 对应位给1
#define LED_Toggle() LPC_GPIO1 -> DATA ^= (1UL << 9); // 对应位异或1#define LED_G_ON() LPC_GPIO2 -> DATA &= ~(1UL << 8); // 对应位给0
#define LED_G_OFF() LPC_GPIO2 -> DATA |= (1UL << 8); // 对应位给1
#define LED_G_Toggle() LPC_GPIO2 -> DATA ^= (1UL << 8); // 对应位异或1#define LED_R_ON() LPC_GPIO2 -> DATA &= ~(1UL << 9); // 对应位给0
#define LED_R_OFF() LPC_GPIO2 -> DATA |= (1UL << 9); // 对应位给1
#define LED_R_Toggle() LPC_GPIO2 -> DATA ^= (1UL << 9); // 对应位异或1#define LED_B_ON() LPC_GPIO2 -> DATA &= ~(1UL << 10); // 对应位给0
#define LED_B_OFF() LPC_GPIO2 -> DATA |= (1UL << 10); // 对应位给1
#define LED_B_Toggle() LPC_GPIO2 -> DATA ^= (1UL << 10); // 对应位异或1void LED_Init(void);	#endif

main.c

#include <LPC11xx.h>
#include "LED.h"// 粗糙的delay函数
void delay_1s()
{uint16_t i,j;for(i=0;i<30000;i++)for(j=0;j<200;j++);
}int main()
{LED_Init();LED_ON();while(1){LED_G_Toggle();delay_1s();LED_R_Toggle();delay_1s();LED_B_Toggle();delay_1s();}
}

以上函数可达到与刚开始函数等效的结果。其中开启位置零、关闭位置一和反转位异或一涉及到位运算相关知识,如果不会自己去搜就行。

2.3 下载效果展示

编译下载后,效果如下

中间的BLINKY常亮,右上角的RGB三色灯变换颜色


http://www.ppmy.cn/devtools/152016.html

相关文章

Elasticsearch搜索引擎(二)

RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES&#xff0c;这些客户端的本质…

QT跨平台应用程序开发框架(3)—— 信号和槽

目录 一&#xff0c;基本概念 二&#xff0c;connect函数使用 2.1 connect 2.2 Qt内置信号和槽 2.3 一些细节 三&#xff0c;自定义信号和槽 3.1 自定义槽函数 3.2 自定义信号 3.3 带参数的信号槽 四&#xff0c;信号和槽的意义 五&#xff0c;信号和槽断开连接 六&…

React的应用级框架推荐——Next、Modern、Blitz等,快速搭建React项目

在 React 企业级应用开发中&#xff0c;Next.js、Modern.js 和 Blitz 是三个常见的框架&#xff0c;它们提供了不同的特性和功能&#xff0c;旨在简化开发流程并提高应用的性能和扩展性。以下是它们的详解与比较&#xff1a; Next、Modern、Blitz 1. Next.js Next.js 是由 Ve…

Electron 开发者的 Tauri 2.0 实战指南:安全实践

在桌面应用开发中&#xff0c;安全性至关重要。相比 Electron&#xff0c;Tauri 2.0 提供了更严格的安全模型和更完善的权限系统。本文将帮助你理解和实践 Tauri 的安全特性。 权限系统对比 Electron 的安全模型 在 Electron 中&#xff0c;我们通常这样处理安全&#xff1a…

Linux电源管理——Device Power Management Interface

目录 前言 1、device PM callbacks 2、dev_pm_ops 结构体 3、设备模型中的 dev_pm_ops 4、调用流程 5、platform bus suspend 6、suspend virtio_mmio driver 7、总结 References Linux Version&#xff1a;linux-5.4.239 前言 在一个操作系统中&#xff0c;外部设备…

Java 基础线程篇

一、线程声明及线程间通信 package org.example;import java.util.Random;public class ThreadTest {public void test1() {Thread t1 new Thread(()->{System.out.println("t1...");});Thread t2 new Thread(()->{System.out.println("t2...");}…

SpringBoot+Vue小区智享物业管理系统(高质量源码,可定制,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

三台 Centos7.9 中 Docker 部署 Redis 哨兵模式

三台 Centos7.9 中 Docker 部署 Redis 哨兵模式 1. 环境规划2. 配置 Docker Compose3. 配置 Redis 密码和持久化4. 配置哨兵5. 启动服务6. 验证 Redis 哨兵模式7. 注意事项 1. 环境规划 三台服务器的角色分配如下&#xff1a; IP Address容器端口角色192.168.15.128redis-mas…