二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的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三色灯变换颜色
相关文章:

二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的hello world。 如下为LED原理图,要让相应LED发光,需要给I/O口设置输出引脚,低电平,二极管才会导通 2.1 打开初始工程,编写代码 以下会实现BLINKY常亮&…...

双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]
集合 关系 介绍 Deque 是一个接口 LinkedList 是这个接口的实现类 题目 输入输出 滑动窗口 基于双端队列实现 Deque<Integer> deque new LinkedList<>(); 滑动窗口代码 public static List<Integer> maxSlidingWindow(int[] nums, int k) {List<Int…...

HTML<img>标签
例子 如何插入图片: <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…...

【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewClause 22/Clause 45Clause 22Clause 45 PHY Link 状态的软件实现 转自: 开心果 Need Car 2022年10月20日 09:50 上海 Overview PHY…...

Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅
文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分:安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...
Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
Mixly软件应用常见问题 Mixly米思齐编译或上传报错? 1、软件安装与驱动(Mixly1-2) 1-1 Windows版本 软件及驱动可以在Mixly群(QQ群号621937623)的群文件夹中找到,或到Mixly在线软件下载链接中重新下安装…...
vben5 admin ant design vue如何使用时间范围组件RangePicker
本文参考:https://pusdn-dev.feishu.cn/wiki/VF4hwBAUliTE6TkUPKrcBNcZn9f?fromfrom_copylink 由PUSDN整理发行,收录时请保留PUSDN。 前端组件专题 年月日时间范围表单回显RangePicker 推荐使用多个字段存储,不推荐用英文逗号拼接时间&am…...

Kafka 日志存储 — 文件目录及日志格式
日志存储机制是Kafka实现高吞吐量和持久化能力的关键。 1 文件目录布局 图 主题与日志文件的关系 Kafka中的消息持久化为日志文件。一个副本对应一个日志。日志文件在broker上是命名形式为<topic>-<partition>的文件夹。例如,主题par3第3分区在某个副…...

故障诊断 | BWO白鲸算法优化KELM故障诊断(Matlab)
目录 效果一览文章概述BWO白鲸算法优化KELM故障诊断一、引言1.1、研究背景及意义1.2、故障诊断技术的现状1.3、研究目的与内容二、KELM基本理论2.1、KELM模型简介2.2、核函数的选择2.3、KELM在故障诊断中的应用三、BWO白鲸优化算法3.1、BWO算法基本原理3.2、BWO算法的特点3.3、…...

一文读懂AI Agent 智能体
一、什么是智能体Agent? 在计算机科学和人工智能领域,智能体(Agent) 是一个抽象的概念,用于描述能够感知环境、执行行动并以此对环境产生影响的实体。智能体通常被设计成具有自主性和适应性,能够在不确定、…...
《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
摘要 C 的 operator 关键字和操作符重载是语言的核心特性之一,使开发者能够扩展内置操作符以适应自定义类型,从而实现更高效、直观的代码表达。本文全面解析了 operator 关键字的基本概念、支持重载的操作符范围及其使用场景,详细介绍了操作…...

通信协议之多摩川编码器协议
前言 学习永无止境!本篇是通信协议之多摩川编码器协议,主要介绍RS485硬件层以及软件层帧格式。 注:本文章为学习笔记,部分图片与文字来源于网络/应用手册,如侵权请联系!谢谢! 一、多摩川协议概述…...

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵
本博文内容导读📕🎉🔥 ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上,提供了强大的灵活性,能适应不同的应用需求。 ESP32中断主…...
4329 树的连边II
通过链式前向星来求树的直径 主要包括:链式前向星的初始化,遍历,使用 #include<bits/stdc.h> using namespace std; using lllong long; const int N1e59; int n,head[N],to[N<<1],nx[N<<1],cnt0; int ans0; int dp[N][2…...

Spring的Bean详解=Bean别名+作用范围+使用场景
目录 Bean的别名:id和name的地位等同 Bean的作用范围:scope单例与非单例 Bean的使用场景:什么时候交给容器?什么时候不交? Bean的别名实践(含代码) 如果看不懂下面的,例如不知道i…...
聊一聊如何适应AI时代
我的工作行业就不提了,处于AI的前沿阵地之一,AI的进步非常惊艳,虽然我对AI持有开放态度,但也恐惧,因为我的进步跟不上它迭代的速度。 AI能涉及的行业:辅助驾驶、医疗诊断、数据分析、文稿生成、工业控制...…...

dl学习笔记:(4)简单神经网络
(1)单层正向回归网络 bx1x2z100-0.2110-0.05101-0.051110.1 接下来我们用代码实现这组线性回归数据 import torch x torch.tensor([[1,0,0],[1,1,0],[1,0,1],[1,1,1]], dtype torch.float32) z torch.tensor([-0.2, -0.05, -0.05, 0.1]) w torch.…...

电商项目高级篇08-springCache
电商项目高级篇08-springCache 1、整合springCache2、Cacheable细节设置 1、整合springCache 1、引入依赖 <!--引入springCache--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifa…...
4.1 AI 大模型应用最佳实践:如何提升 GPT 模型使用效率与质量
AI 大模型应用最佳实践:如何提升 GPT 模型使用效率与质量 随着人工智能技术的不断进步,GPT系列大模型已经成为了自然语言处理领域的核心工具。无论是在文本生成、对话系统,还是内容创作等领域,GPT模型都展现出了强大的能力。然而,要高效、精确地使用这些模型,仍然需要一…...
Linux top命令cpu使用率计算底层原理
在Linux中,top命令通过读取内核提供的统计数据来计算CPU使用率。其底层原理可以概括为以下几步: 1. 读取 /proc/stat top命令主要从/proc/stat文件中获取CPU的统计信息。这个文件包含了每个CPU核心(或所有核心合计)的各种状态下的…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...