c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享

news2024/11/27 13:19:14

在嵌入式系统中,有限的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_CP

void setup() {
  // 设置引脚为输出模式
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // 定义单字节变量控制LED状态
  byte x = 0x01; // 0b00000001
  for (int j = 0; j < 8; j++) { // LED从右到左点亮
    writeTo595(LSBFIRST, x);
    x <<= 1; // 左移一位
    delay(100);
  }

  x = 0x80; // 0b10000000
  for (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. 应用场景
  • 教育与演示:展示移位寄存器的工作原理。
  • 硬件扩展:用于多灯控制、电路状态指示等应用。

七、项目扩展与优化

  1. 级联扩展
  • 将多个74HC595芯片级联,扩展更多GPIO输出,实现更多LED灯的控制。
  1. 动态显示
  • 增加按键模块,实现动态调整灯光模式和显示效果。
  1. PWM调光
  • 使用PWM技术控制LED亮度,实现渐变效果。

八、学习意义

通过本项目,您将学习:

  • 如何利用74HC595扩展GPIO引脚。
  • 移位寄存器的工作原理与应用。
  • 使用C++实现位操作、数据传输与动态控制。

结语

74HC595芯片为GPIO扩展提供了一种高效、灵活的解决方案。在本项目中,我们结合树莓派Pico开发板,通过C++编程实现了LED流水灯的动态效果。希望本文能为您提供启发,助力您的嵌入式开发学习之路。

如果您喜欢这篇文章,请点赞、收藏并分享,让更多人了解嵌入式开发的魅力!

动手实践学习套件请点击-》物联网-树莓派开发套件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app运行 安卓模拟器 MuMu模拟器

最近公司开发移动端系统&#xff0c;使用真机时每次调试的时候换来换去的麻烦&#xff0c;所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器&#xff0c;如果系统…

C语言解析命令行参数

原文地址&#xff1a;C语言解析命令行参数 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 C语言有一个 getopt 函数&#xff0c;可以对命令行进行解析&#xff0c;下面给出一个示例&#xff0c;用的时候可以直接copy过去修改&#xff0c;很方便…

传奇996_36——背包图标,物品位置问题

绑定位置不对位 CTRLF9背包物品文件&#xff0c;也就是bag_item文件夹的bag_item.lua文件&#xff0c;这个小框和大框的相对位置会影响那个绑定图标,就是背包物品组合的标签和下面子标签的相对位置 背包物品偏移到看不见 原因&#xff1a;CTRLF9背包物品文件&#xff0c;也就…

使用Python和Pybind11调用C++程序(CMake编译)

目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补&#xff0c;本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境&#xff1a; Linux gnuPython3.10…

如何选择黑白相机和彩色相机

我们在选择成像解决方案时黑白相机很容易被忽略&#xff0c;因为许多新相机提供鲜艳的颜色&#xff0c;鲜明的对比度和改进的弱光性能。然而&#xff0c;有许多应用&#xff0c;选择黑白相机将是更好的选择&#xff0c;因为他们产生更清晰的图像&#xff0c;更好的分辨率&#…

代码美学:MATLAB制作渐变色

输入颜色个数n&#xff0c;颜色类型&#xff1a; n 2; % 输入颜色个数 colors {[1, 0, 0], [0, 0, 1]}; createGradientHeatmap(n, colors); 调用函数&#xff1a; function createGradientHeatmap(n, colors)% 输入检查if length(colors) ~ nerror(输入的颜色数量与n不一…

SAP 零售方案 CAR 系统的介绍与研究

前言 当今时代&#xff0c;零售业务是充满活力和活力的业务领域之一。每天&#xff0c;由于销售运营和客户行为&#xff0c;它都会生成大量数据。因此&#xff0c;公司迫切需要管理数据并从中检索见解。它将帮助公司朝着正确的方向发展他们的业务。 这就是为什么公司用来处理…

【leetcode】动态规划

31. 873. 最长的斐波那契子序列的长度 题目&#xff1a; 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#xff0c;都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr &#xff0…

自动泊车“哐哐撞大墙”,小米SU7智驾功能bug缠身?

文/王俣祺 导语&#xff1a;小米SU7&#xff0c;自带热度与科技光环的“流量神车”&#xff0c;近日却以一种极为“狼狈”的方式闯入大众视野。多达70余辆小米SU7陷入“泊车魔咒”&#xff0c;瞬间在网络上炸开了锅。从“科技控”到“惹祸精”的背后&#xff0c;究竟藏着怎样的…

优维HAO案例:全球TOP15汽车零件供应商「IT运维自动化」创新工程

撰文&#xff1a;鹿小U / 制图&#xff1a;脾气超好 又是一家很厉害的客户。 YADT是全(hu)球(zhēn)领(ji)先(sh)的汽车座椅供应商&#xff0c;拥有从汽车座椅零部件到整椅的完整生产制造能力&#xff0c;为中国几乎所有的汽车制造商提供汽车整椅产品和服务。 YADT在国内拥…

Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱

一、背景&#xff1a; wordpress网站搬家&#xff0c;更换服务器IP后&#xff0c;如果没有域名时&#xff0c;使用服务器IP地址无法访问管理后台和打开网站页面显示错乱。 二、解决方法如下&#xff1a; 1.wordpress搬家后&#xff0c;在新服务器上&#xff0c;新建站点时&am…

MyBatis框架-动态SQL-XML中的常用标签+特殊字符在XML中的显示

一、if标签、where标签、trim标签、choose标签、set标签、foreach标签 1、问题引入&#xff1a;where关键字和and关键字在动态SQL里面应该如何添加&#xff1f; &#xff08;1&#xff09;if标签&#xff1a; test属性的值是判断条件 if标签里面的内容是条件成立时添加到SQ…

EXTI配置流程 含中断延时消抖点亮小灯

如图可知&#xff0c;配置流程分成以下一个部分 ①使能GPIO时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 打开时钟 ②初始化利用 HAL_GPIO_Init 一步到位&#xff0c;可以初始化外设GPIO的一切 4个参数 &#xff08;引脚 Pull 这里选择的模式是从下面这几个里面选 速度&#x…

数据库系列之GaussDB数据库高可用能力测试验证

数据库的高可用能力是数据库的基本能力&#xff0c;可靠性的设计和机制能够保证数据库节点异常时能够正常切换、减少业务的影响范围和时间&#xff0c;保证业务的可用性和连续性。本文主要介绍GaussDB数据库的高可用能力测试验证情况&#xff0c;通过模拟故障场景来验证GaussDB…

Android BottomNavigationView 底部导航栏使用详解

一、BottomNavigationView简介 BottomNavigationView是官方提供可以实现底部导航的组件&#xff0c;最多支持5个item&#xff0c;主要用于功能模块间的切换&#xff0c;默认会包含动画效果。 官方介绍地址&#xff1a;BottomNavigationView 二、使用BottomNavigationView a…

IIT开发自适应协作界面,通过Xsens动作捕捉系统实现安全人机交互

意大利理工学院(IIT)的研究人员正在利用自适应界面转变人机协作&#xff0c;实现实时机器人调整和安全、无缝的交互。 本文要点: l 协作的实时适应&#xff1a;IIT的研究员西林图纳和厄兹达马尔开发了一种自适应协作界面(ACI)&#xff0c;允许机器人根据人类的运动意图实时调…

一学就废|Python基础碎片,格式化F-string

Python 3.6 中引入了 f-string语法&#xff0c;提供了一种简洁直观的方法来将表达式和变量直接嵌入到字符串中进行字符串格式化&#xff0c;f -string背后的想法是使字符串插值更简单。 要创建 f -string&#xff0c;在字符串前加上字母 “f”即可&#xff0c;与字符串本身的格…

SVG无功补偿装置MATLAB仿真模型

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 SVG&#xff08;又称ASVG 或STATCOM&#xff09;是Static Var Generator 的缩写&#xff0c;叫做静止无功发生器。也是做无功补偿的&#xff0c;比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…

MVC、EL、JSTL

1.MVC设计模式 三层&#xff1a; MVC&#xff1a; M&#xff08;Model&#xff09;模型&#xff1a;负责业务逻辑处理&#xff0c;数据库访问。 V&#xff08;View&#xff09;视图&#xff1a;负责与用户交互。 C&#xff08;Controller&#xff09;控制器&#xff1a;负责流程…

Web开发技术栈选择指南

互联网时代的蓬勃发展&#xff0c;让越来越多人投身软件开发领域。面对前端和后端的选择&#xff0c;很多初学者往往陷入迷茫。让我们一起深入了解这两个领域的特点&#xff0c;帮助你做出最适合自己的选择。 在互联网发展的早期&#xff0c;前端开发主要负责页面布局和简单的…