c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实现,并深入剖析C++编程中的关键技术点。
一、项目背景与目标
1. 项目目标
- 学习如何通过74HC595N芯片扩展GPIO引脚。
- 实现8个LED的流水灯动态显示效果。
2. 技术背景
- GPIO扩展需求:树莓派Pico提供26个GPIO引脚,但实际项目中可能需要更多引脚。74HC595N芯片通过移位寄存器实现GPIO扩展,每片可提供8个并行输出。
- 移位寄存器原理:通过串行输入(SI),将数据存储在寄存器中,再通过时钟信号(SCK和RCK)将数据输出到并行引脚(Q0~Q7)。
二、项目所需硬件
- 树莓派Pico开发板
- 74HC595N芯片
- 8个220Ω电阻
- 8个红色LED
- 面包板与跳线若干
三、电路连接
1. 引脚说明
74HC595N 引脚 | 说明 | 接线 |
---|---|---|
DS (14) | 数据输入端 | Pico GP18 |
ST_CP (12) | 存储寄存器时钟 | Pico GP20 |
SH_CP (11) | 移位寄存器时钟 | Pico GP21 |
OE (13) | 输出使能(低电平有效) | 直接接GND |
VCC (16) | 电源 | 连接Pico 3.3V |
GND (8) | 地 | 连接Pico GND |
Q0Q7 (15, 17) | 并行输出端,用于驱动LED | 连接LED并串联电阻后接地 |
2. 注意事项
- 正确插入芯片:确保芯片方向与引脚说明一致。
- 电阻匹配:220Ω电阻限制电流,防止LED损坏。
电路图
接线图
四、项目代码与解析
以下是实现流水灯效果的完整代码:
// 定义74HC595引脚 int dataPin = 18; // 数据输入端 DS int latchPin = 20; // 存储寄存器时钟 ST_CP int clockPin = 21; // 移位寄存器时钟 SH_CPvoid setup() {// 设置引脚为输出模式pinMode(latchPin, OUTPUT);pinMode(clockPin, OUTPUT);pinMode(dataPin, OUTPUT); }void loop() {// 定义单字节变量控制LED状态byte x = 0x01; // 0b00000001for (int j = 0; j < 8; j++) { // LED从右到左点亮writeTo595(LSBFIRST, x);x <<= 1; // 左移一位delay(100);}x = 0x80; // 0b10000000for (int j = 0; j < 8; j++) { // LED从左到右点亮writeTo595(LSBFIRST, x);x >>= 1; // 右移一位delay(100);} }// 向74HC595写入数据 void writeTo595(BitOrder order, byte _data) {digitalWrite(latchPin, LOW); // 清空存储寄存器shiftOut(dataPin, clockPin, order, _data); // 发送串行数据digitalWrite(latchPin, HIGH); // 更新并行输出 }
五、C++知识点解析
1. byte
类型与位操作
byte
类型:用于存储8位数据,方便直接操作8个LED的状态。- 左移与右移操作:
x <<= 1; // 左移一位,相当于LED向左移动 x >>= 1; // 右移一位,相当于LED向右移动
2. 函数封装
将对74HC595芯片的操作封装为 writeTo595
函数:
void writeTo595(BitOrder order, byte _data) {digitalWrite(latchPin, LOW);shiftOut(dataPin, clockPin, order, _data);digitalWrite(latchPin, HIGH); }
- 模块化设计:提高代码复用性,简化主程序逻辑。
shiftOut
函数:按指定顺序发送8位串行数据。
3. 位顺序与数据方向
LSBFIRST
:低位优先发送,适合从右到左的流水灯效果。- 高位优先发送:使用
MSBFIRST
,实现从左到右的效果。
4. 引脚初始化
通过 pinMode
设置引脚模式:
pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);
确保引脚输出逻辑电平,驱动74HC595芯片正常工作。
六、项目现象与应用场景
1. 项目现象
- LED从右到左依次点亮,再从左到右依次熄灭,形成流水灯效果。
2. 应用场景
- 教育与演示:展示移位寄存器的工作原理。
- 硬件扩展:用于多灯控制、电路状态指示等应用。
七、项目扩展与优化
- 级联扩展
- 将多个74HC595芯片级联,扩展更多GPIO输出,实现更多LED灯的控制。
- 动态显示
- 增加按键模块,实现动态调整灯光模式和显示效果。
- PWM调光
- 使用PWM技术控制LED亮度,实现渐变效果。
八、学习意义
通过本项目,您将学习:
- 如何利用74HC595扩展GPIO引脚。
- 移位寄存器的工作原理与应用。
- 使用C++实现位操作、数据传输与动态控制。
结语
74HC595芯片为GPIO扩展提供了一种高效、灵活的解决方案。在本项目中,我们结合树莓派Pico开发板,通过C++编程实现了LED流水灯的动态效果。希望本文能为您提供启发,助力您的嵌入式开发学习之路。
如果您喜欢这篇文章,请点赞、收藏并分享,让更多人了解嵌入式开发的魅力!
动手实践学习套件请点击-》物联网-树莓派开发套件
相关文章:
c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
在嵌入式系统中,有限的GPIO引脚往往限制了硬件扩展能力。74HC595N芯片是一种常用的移位寄存器,通过串行输入和并行输出扩展GPIO数量。本项目利用树莓派Pico开发板与74HC595N芯片,驱动8个LED实现流水灯效果。本文详细解析项目硬件连接、代码实…...
【Jenkins】docker 部署 Jenkins 踩坑笔记
文章目录 1. docker pull 超时2. 初始化找不到 initialAdminPassword 1. docker pull 超时 docker pull 命令拉不下来 docker pull jenkins/jenkins:lts-jdk17 Error response from daemon: Get "https://registry-1.docker.io/v2/": 编辑docker配置 sudo mkdir -…...
Unreal Engine使用Groom 打包后报错
Unreal Engine使用Groom打包后报错 版本5.4.4 blender 4.2.1 项目头发用了groom,运行后报错 错误: Assertion failed: Offset BytesToRead < UncompressedFileSize && Offset > 0 [File:E:\UnrealEngine-5.4.4-release\Engine\Source\R…...
嵌入式QT学习第3天:UI设计器的简单使用
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Qt Creator 里自带的 Qt Designer,使用 Qt Designer 比较方便的构造 UI 界 面。 在 UI 文件添加一个按钮 左边找到 Push Button,然后拖拽到中…...
【连接池】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
图论入门编程
卡码网刷题链接:98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …...
在Java中使用Apache POI导入导出Excel(三)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(二) 使用Apache POI组件操作Excel(三) 24、拆分和冻结窗格 您可以创建两种类型的窗格;冻结窗格和拆分窗格。 冻结窗格按列和行进行拆分。您创建…...
UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e
近日,优傲(UR)机器人公司立足中国市场需求,重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲(UR)一以贯之的高品质与性能特质,着重优化负载自重比,且在价格层面具竞争力&…...
FRU文件
FRU(Field Replaceable Unit)源文件的格式通常遵循IPMI FRU Information Storage Definition标准。在实际应用中,FRU源文件可以是JSON格式的,这种格式允许用户指定所有的FRU信息字段。以下是FRU源文件的JSON格式的一些关键点&…...
AI需求条目化全面升级!支持多格式需求,打破模板限制!
AI需求条目化全面升级!支持多格式需求,打破模板限制! 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式,不再受限于模板文件,能够一键自动快速且灵活地生…...
Java—I/O流
Java的I/O流(输入/输出流)是用于在程序和外部资源(如文件、网络连接等)之间进行数据交换的机制。通过I/O流,可以实现从外部资源读取数据(输入流)或将数据写入外部资源(输出流&#x…...
Huginn服务部署
工作中需要使用爬虫系统,做为技术选型需要对Huginn系统进行部署并进行功能验证。下面的文章会记录了Huginn的部署过程,本次部署采用的Ubuntu-23.0.4系统,使用Docker部署。部署过程需要翻墙。 一、安装Docker 删除旧版本 sudo apt-get remo…...
深入解析Java数据包装类型:特性、机制与最佳实践
文章目录 1. 基本概念2. 自动装箱与拆箱3. 缓存机制4. 不可变性5. 常见陷阱与最佳实践a. 空指针异常b. 不要用 比较两个包装类实例c. 高精度计算d. 字符串解析 总结 1. 基本概念 Java提供了每个基本数据类型的包装类,位于java.lang包中。这些包装类允许我们将基本…...
【Java基础入门篇】二、控制语句和递归算法
Java基础入门篇 二、控制语句和递归算法 2.1 switch-case多分支选择语句 switch执行case语句块时,若没有遇到break,则运行下一个case直到遇到break,最后的default表示当没有case与之匹配时,默认执行的内容,代码示例如…...
PostgreSQL WAL日志膨胀处理
作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、P…...
用户该怎么管理维护自己的服务器?
管理和维护自己的服务器是确保其长期稳定、高效和安全运行的重要任务。以下是一些关键的服务器管理和维护的步骤和建议,适用于Linux或Windows服务器。 1.定期备份数据 定期备份是防止数据丢失和恢复故障的关键步骤。备份策略应包括: 全量备份:…...
【MYSQL数据库相关知识介绍】
MySQL 在我们日常技术中是一个广泛使用的开源关系型数据库管理系统,所以作为测试同学,掌握mysql的相关知识是必不可少的技能之一,所以小编从软件测试的角色出发,来整理一些跟测试相关的知识,希望能够帮助到大家。 一、…...
初窥 HTTP 缓存
引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...
yolov8的深度学习环境安装(cuda12.4、ubuntu22.04)
目录 一、先安装基础环境包 1.首先给Ubuntu安装Chrome浏览器(搜索引擎换成百度即可) 2、ubuntu 22.04中文输入法安装 3、安装 terminator 4、安装WPS for Linux 5、安装其它之前需要先安装anaconda 6、安装配置anaconda 7、安装完成anaconda后创建…...
RSA算法和AES算法,哪种更安全
目录 一、RSA (非对称加密算法) 二、AES (对称加密算法) 三、对比总结 四、更安全的选择 五、结合使用:RSA AES RSA 和 AES 是两种不同类型的加密算法,适用于不同的场景,因此它们的安全性不能直接比较,而是取决于具体的应用…...
Vue教程|搭建vue项目|Vue-CLI新版脚手架
一、安装Node环境 安装Node及Npm环境 Node下载地址:Node.js — Run JavaScript EverywhereNode.js is a JavaScript runtime built on Chromes V8 JavaScript engine.https://nodejs.org/en/ 安装完成后,检查安装是否成功,并检查版本,命令如下: node -v npm -v mac@Macd…...
kdump调试分析(适用于麒麟,ubuntu等OS)
1. kdump基本原理 1.1 内核崩溃处理机制 当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下: 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。从崩溃的主内核中复制内存内容(转储文件)。将转储文件保存到预定义的存储位…...
houdini肌肉刷pin点的方法
目标:产生gluetoanimation这个属性 主要节点:attribute paint(或者muscle paint) 步骤1: 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list,方便查看group。不同的肌肉块按照muscl…...
JMeter 并发策略-针对准点秒杀场景的压测实现
一、场景的压测实现 1,创建线程组,10并发用户执行5次; 2,创建 Synchronizing Timer 元件,用于同步线程,设置同步元件 Synchronizing Timer 3,创建 http 请求4,创建 view results in table 元件…...
龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2
1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率,为4k60Hz视频提供足够的带宽。此外,还支持 HDCP2.2 进行数据解密(无数据 加密)。 对于 LVDS 输出,…...
RBF神经网络预测结合NSGAII多目标优化
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 RBF神经网络预测结合NSGAII多目标优化 rbf神经网络预测结合nsga2多目标优化 题外话: 多目标优化是指在优化问题中同时考虑多个目标函数的优化过程。在多目标优化中,通常存在多个冲突的目标&am…...
如何看linux系统内核是aarch64 ,还是64-bit
要查看 Linux 系统内核是 aarch64 架构还是 64-bit 架构,可以通过以下几种方法来确认: 方法 1:使用 uname 命令 uname 命令用于显示系统信息。使用以下命令查看系统的架构: uname -m如果输出是 aarch64,说明你的系统…...
如何通过 ADB 安装 xapk
Android开发这么久,今天发现还能这么操作!😂 记录通过ADB安装xapk、apks的两种方式: 1.ADB命令安装使用APK-Splits技术分包的应用程序 这位大佬的方式步骤较为繁琐,不过兼容性应该较好,亲测成功安装。 2.How to install xapk, apks, or multiple-apks via adb? 这个…...
QT:多ui界面显示
文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…...
redis cluster 3主3从部署方案
文章目录 1 Redis Cluster 介绍1 Redis cluster 架构2 Redis cluster的工作原理2.1 数据分区2.2 集群通信2.3 集群伸缩2.3.1 集群扩容2.3.2 集群缩容 2.4 故障转移2.4.1 主观下线2.4.2 客观下线 3 Redis Cluster 部署架构说明3.1 部署方式介绍3.2 实战案例:基于Redi…...
asp.net企业网站源码/福州百度推广开户
闭包定义 对闭包的具体定义有很多种说法,这些说法大体可以分为两类: 闭包是其词法上下文中引用了自由变量的函数.闭包是由函数和其相关的引用环境组合而成的实体.词法:变量的作用域是由它在源码中所处位置决定的. 很多人都觉得闭包是一个很难理解的知识点࿰…...
苏州模板建站定制/近三天时政热点
在Vmware workstation 9中装了个Linux mint 15试试效果,居然不支持1600x900的分辨率,现在14寸的高分都是这分辨率了。上网搜了搜,把以下代码放到shell文件里能改变分辨率,设成1600x900.Mint15-Mate Xsession.d # cat /usr/local/b…...
南通市交通建设处网站/郑州营销型网站建设
1、参与项目现场安全设备的搭建和维护,确保网络运行的稳定性以及可靠性; 2、参与网络安全实施方案的制定和实施; 3、参与网络安全巡检、检测、加固工作; 4、参与等保整改项目,协助推进整改工作。...
hltm 做网站教程/专业郑州企业网站建设
大家,我已经提到了 material.needsUpdate & texture.needsUpdate ,但我还包括一个旋转的立方体,所以我知道动画例程在某种程度上起作用 .这是代码:if ( window.innerWidth 0 ) { window.innerWidth parent.innerWidt…...
防疫网站网页设计/网络营销推广8种方法
词向量模型 Word2Vec Skip-gram 模型是图嵌入模型 Random Walk 中要使用到的模型,因此先学习 Word2Vec 神经网络语言模型 NNLM 目标:根据给定的词序列,预测下一个会出现的词,如给定 “他”,“是”,“一个…...
企业网站建设需要哪些费用/推广点击器
在上篇文章写到我们为什么要分层.有很多读者提出来很多宝贵的意见.让我受益匪浅,深深的感觉到自己的水平"还有很大的提升空间".首先感谢这些朋友们,我会进一步总结完善自己的想法. 截取了部分朋友的留言,感谢他们: 这次我用对比的方式描述一下,分层到底分出了什么.俗…...