二、点灯基础实验
嵌入式基础实验第一个就是点灯,地位相当于编程界的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核心(或所有核心合计)的各种状态下的…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
