二、点灯基础实验

news/2025/1/19 11:17:13/

        嵌入式基础实验第一个就是点灯,地位相当于编程界的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/news/1564394.html

相关文章

Microsoft Sql Server 2019 执行计划

1、什么是执行计划 用户提交的 sql 语句,数据库查询优化器,经过分析生成多个数据库可以识别的高效执行查询方式。然 后优化器会在众多执行计划中找出一个资源使用最少,而不是最快的执行方案,给你展示出来,可以是 文本格式,也可以是图形化的执行方案。 2、为什么要读懂执…

idea本地jar包添加到项目的maven库 mvn install:install-file

背景 最近在开发项目中需要对接海康威视摄像头&#xff0c;进行视频、照片等数据的获取保存&#xff1b;海康提供的sdk的jar包是自己开发的&#xff0c;在maven库中是找不到的&#xff0c;在项目中需要手动指定jar包路径 <dependency><groupId>com.haikang</g…

ansible自动化运维实战--服务端安装、环境配置与测试(1)

文章目录 一、准备5台虚拟机二、ansible服务端安装2.1、epel-release安装与配置2.2、查询ansible源信息2.3、安装ansible2.4、检查ansible安装状态和命令 一、准备5台虚拟机 本文使用的系统是centos9&#xff0c;5台机子的IP规划以及主机名如下&#xff1a; 主机名IPansible1…

Hooks 使用规则

Hooks 使用规则 命名规则 Hook 必须 useXxx 格式来命名。 PS&#xff1a;这种命名规则也很易读&#xff0c;简单粗暴 调用位置 Hook 或自定义 Hook &#xff0c;只能在两个地方被调用 组件内部其他 Hook 内部 组件外部&#xff0c;或一个普通函数中&#xff0c;不能调用…

MySQL(高级特性篇) 06 章——索引的数据结构

一、为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录找到对应文章的页码&#xff0c;便可快速定位到需要的文章。MySQL中也是一样的道理&#xff0c;进行数据查找时&#xff0c;首先查看查询条件…

C语言工具SNPRINTF函数

该函数包含在标准库中&#xff0c;以打印函数的格式将数据存入函数参数指定的数组中。 发现这个函数是在学习单片机I2C的软件应用时&#xff0c;需要将MPU6050陀螺仪模块的16位有符号数据通过串口发送到电脑进行调试。 应用中案例代码如下&#xff1a; void int16ToString(i…

飞牛os使用ddns-go配合华为云实现内网穿透

DDNS-Go 是一个开源的动态域名解析工具&#xff0c;它支持多种操作系统&#xff0c;包括 Windows、Mac 和 Linux&#xff0c;并且支持 ARM 和 x86 架构。以下是使用 DDNS-Go 的基本步骤&#xff1a; 1.下载和安装&#xff1a; 访问 DDNS-Go 的 GitHub 仓库&#xff08;&#xf…

从零开始打造AI知识库:使用爬虫自动化采集网页内容的完整教程

言简意赅的讲解crawler爬虫解决的痛点 童鞋们在实现私有化大语言模型和实现精准参数归纳与程序执行之后还是不满足AI相关的能力。在 AI 驱动的知识管理时代&#xff0c;快速搭建属于自己的知识库已成为很多开发者和团队的核心需求。本文将带你一步步创建一个基于网页爬取的知识…