C++趣味编程玩转物联网:用树莓派Pico控制四位数码管
数码管是一种常用的数字显示器件,广泛应用于电子时钟、记分牌和智能设备显示界面。在本项目中,我们将通过树莓派Pico板控制一个四位数码管模块,展示从 0000
到 9999
的数字动态显示。这不仅是一次硬件和软件结合的实践,还可以帮助初学者深入理解嵌入式系统中的显示技术。
项目背景与目标
四位数码管模块因其价格低廉、显示清晰而被广泛使用。通过这个项目,学习者将掌握以下知识:
- 数码管的基本原理与硬件结构。
- TM1650芯片的工作方式及其在数码管控制中的应用。
- 使用树莓派Pico与Arduino编程实现动态数字显示。
项目所需元件
- 树莓派Pico开发板 × 1
- 树莓派Pico扩展板 × 1
- 四位数码管模块(TM1650驱动芯片) × 1
- 4P 转杜邦线 × 1
- USB数据线 × 1
硬件知识:TM1650四位数码管
TM1650的特性
TM1650是一款用于驱动四位共阳数码管的芯片,具备以下特性:
- 支持2线制通信(CLK和DIO),简化了电路连接。
- 兼容3.3V和5V电平,适合多种微控制器平台。
- 支持亮度调节和点阵显示,功能丰富。
模块规格
- 工作电压:DC 3.3V-5V
- 最大电流:100mA
- 最大功率:0.5W
模块原理
TM1650通过CLK(时钟)和DIO(数据)与主控芯片通信,发送控制信号,实现数码管的段选与位选操作。
电路连接与TM1650库配置
电路连接
- CLK引脚(时钟信号):连接至树莓派Pico的GP21。
- DIO引脚(数据信号):连接至树莓派Pico的GP20。
- VCC与GND:分别连接至树莓派Pico的电源引脚(3.3V和GND)。
电路图
连线图
TM1650库的安装
在Arduino IDE中添加TM1650库以简化驱动代码:
- 点击“项目” > “加载库” > “添加 .ZIP 库”。
- 导入 TM1650.ZIP 文件,完成库的安装。
核心代码实现
以下代码实现了四位数码管从 0000
到 9999
的动态显示:
#include "TM1650.h"const int CLK = 21; // 时钟引脚 const int DIO = 20; // 数据引脚TM1650 DigitalTube(CLK, DIO);void setup() {// 设置亮度 (0 到 7,默认值为2)// DigitalTube.setBrightness(2); // 开启显示DigitalTube.displayOnOFF(1); // 1=打开, 0=关闭// 清除所有位数据for (char b = 1; b < 5; b++) {DigitalTube.clearBit(b);} }void loop() {for (int num = 0; num < 10000; num++) {int thousands = (num / 1000) % 10;int hundreds = (num / 100) % 10;int tens = (num / 10) % 10;int units = num % 10;// 显示每一位的数字DigitalTube.displayBit(1, thousands);DigitalTube.displayBit(2, hundreds);DigitalTube.displayBit(3, tens);DigitalTube.displayBit(4, units);delay(500); // 每次更新延时500ms} }
代码解析
-
库初始化
TM1650 DigitalTube(CLK, DIO)
:通过时钟与数据引脚初始化TM1650芯片。
-
清除与亮度设置
DigitalTube.clearBit(b)
:清除指定位的数据。DigitalTube.setBrightness(2)
:设置亮度级别,0为最暗,7为最亮。
-
数字显示
- 使用
DigitalTube.displayBit()
指定每个位的数字值。
- 使用
-
动态显示逻辑
- 通过取模与整除操作分解整数的每个位数字,实现
0000
至9999
的逐次递增显示。
- 通过取模与整除操作分解整数的每个位数字,实现
项目现象
代码成功上传并运行后,四位数码管将依次显示从 0000
到 9999
的数字,并循环显示。这一现象直观展示了数码管的基本功能与TM1650的强大控制能力。
技术扩展与优化
-
动态亮度调节 增加按键输入,实时调整数码管亮度:
DigitalTube.setBrightness(buttonValue);
-
增加显示内容 配合传感器,实时显示环境温湿度、时间等动态数据。
-
低功耗优化 使用睡眠模式降低功耗,适合便携设备应用。
-
多位数码管扩展 利用多个TM1650模块,实现多行数字显示或图案。
教育意义与学习目标
- C++核心技能:熟悉库调用、函数设计与循环结构。
- 嵌入式开发基础:理解I2C通信协议与硬件控制逻辑。
- 项目式学习:通过动手实践,培养软硬件结合的工程能力。
结语
通过本项目,您将掌握四位数码管的显示原理与C++编程的结合应用,为进一步探索嵌入式开发打下坚实基础。未来,您可以结合更多传感器和模块,设计出更实用、更复杂的智能系统。
如果您觉得这篇文章对您有帮助,请点赞、收藏并分享,让更多人参与到嵌入式开发的学习中来!
动手实践学习套件请点击-》实践开发套件
欢迎加V交流
相关文章:
C++趣味编程玩转物联网:用树莓派Pico控制四位数码管
数码管是一种常用的数字显示器件,广泛应用于电子时钟、记分牌和智能设备显示界面。在本项目中,我们将通过树莓派Pico板控制一个四位数码管模块,展示从 0000 到 9999 的数字动态显示。这不仅是一次硬件和软件结合的实践,还可以帮助…...
DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放
提示:视频转hls流加密、web解密播放 需求:研究视频截屏时,播放器变黑,所以先研究的视频转hls流加密 文章目录 [TOC](文章目录) 前言一、工具ffmpeg、openssl二、后端nodeexpress三、web播放四、文档总结 前言 HLS流媒体协议&a…...
实验三 z变换及离散时间LTI系统的z域分析
实验原理 有理函数z 变换的部分分式展开 【实例2-1】试用Matlab 命令对函数 X ( z ) 18 18 3 − 1 − 4 z − 2 − z − 3 X\left(z\right)\frac{18}{183^{-1} -4z^{-2} -z^{-3} } X(z)183−1−4z−2−z−318 进行部分分式展开,并求出其z 反变换。 B[18]; A…...
Python中的DrissionPage详解
文章目录 Python中的DrissionPage详解一、引言二、DrissionPage的基本使用1、安装与启动2、元素定位与操作 三、高级功能1、截图功能2、数据提取3、与其他库的集成 四、具体使用示例五、总结 Python中的DrissionPage详解 一、引言 DrissionPage是一个强大的Python库ÿ…...
python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。 python之open…...
go语言怎么实现bash cmd里的mv功能?
在Go语言中实现类似于Bash命令行中的mv命令的功能,主要是通过文件系统的操作来完成的。mv命令可以用来移动文件或目录,也可以用来重命名文件或目录。在Go语言中,可以使用标准库中的os和io/ioutil包来实现这些功能。 以下是一个简单的例子&…...
Vue前端面试进阶(五)
使用Element UI开发的实际项目 在实际项目中,我使用Element UI来快速构建用户界面。Element UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的桌面端组件库,它提供了丰富的UI组件,极大地提高了开发效率。然而,在使用过程中…...
面试手撕题积累
1、实现滑动窗口限流,允许每分钟最多有100个请求 阿里一面题。 核心: 时间窗口管理:滑动窗口会根据时间流逝不断更新,需要记录请求的时间戳,并根据当前时间计算窗口内的请求数量。 限流判断:每次请求到来…...
notepad++文件github下载
1、github下载网址:Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件: 3、CSDN下载链接:https://download.csdn.net/download/u013083576/90046203...
.NET新知识点笔记
using 用法介绍 using (SqlCommand cmd new SqlCommand(SQLString, connection)) 为什么使用上面的using 而不直接使用下述的来直接 SqlCommand cmd new SqlCommand(SQLString, connection)如果你需要使用一个对象,这个对象需要占用很多紧缺的资源&am…...
数据结构:链表进阶
链表进阶 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题4.LinkedList的使用5.1 什么是LinkedList4.2 LinkedList的使用 5. ArrayList和LinkedList的区别 1. ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素࿱…...
Python 爬虫入门教程:从零构建你的第一个网络爬虫
网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。 1. 什么是网络爬虫? 网络爬虫&#x…...
Java面试题、八股文——JVM篇最终篇
1.如何选择垃圾收集器? 选择合适的垃圾收集器(Garbage Collector, GC)对于优化Java应用程序的性能至关重要。不同的应用场景和系统需求可能需要不同类型的垃圾收集器来满足。以下是一些考虑因素以及常见的垃圾收集器选项,帮助您做…...
Spring Boot整合Redis Stack构建本地向量数据库相似性查询
Spring Boot整合Redis Stack构建本地向量数据库相似性查询 在微服务架构中,数据的高效存储与快速查询是至关重要的。Redis作为一个高性能的内存数据结构存储系统,不仅可以用作缓存、消息代理,还可以扩展为向量数据库,实现高效的相…...
shell脚本基础学习_总结篇(完结)
细致观看可以,访问shell脚本学习专栏,对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义: 2. 主要特点: 3. shell脚本的基本结构 4. S…...
什么是 C++ 中的函数对象?它有什么特点?
在 C 中,函数对象(Function Object)是一种可调用对象,它允许像函数一样被调用,但实际上它可能并不是真正的函数。函数对象可以是以下几种类型之一: 普通函数: 一个普通的、定义在命名空间或类…...
css:项目
这是一个完整的网站制作的流程 美工会先制作一个原型图: 原型图写的不详细,就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发:把代码的不同的样式封装起来,需要用到相同样式的标签就…...
macOS 开发环境配置与应用开发指南
macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统,因其稳定性、优雅的用户界面和强大的开发支持,已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用,还是Web应用、跨平台程序,macOS都提…...
[A-19][V06]ARMv8/v9-内存虚拟化原理
ver0.2 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 前一篇文章,我们介绍了ARM内存的属性,算是一个小小的里程碑点,接下来我们会把注意力重新拉回虚拟化的赛道。我们从[V-05] 虚拟化基础-异常模型(Exception model)之后,花了很多笔墨介绍…...
registry 删除私有仓库镜像
原文链接:https://blog.csdn.net/yogima/article/details/122172744 如果需要彻底删除,只需进行register 磁盘删除镜像 彻底删除了,就可以到达彻底删除的目的。 如果只需要软删除,则只需进行通过API删除。 curl --header "Ac…...
UPLOAD LABS | UPLOAD LABS 靶场初识
关注这个靶场的其它相关笔记:UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01:UPLOAD LABS 靶场简介 UPLOAD LABS 靶场是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列文件上传漏洞的实验环境,用于帮助用户了解文件上传漏洞的…...
Samba服务器常见问题处理
指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接,首先请断开所有现有的连接到网络共享的映射 解决方案 单击“开始”菜单,选择“运行…”。 在弹出的窗口中,输入cmd 进入命令行模式,并输入…...
Java基础 设计模式——针对实习面试
目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式(Singleton Pattern) 定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。适用场景&…...
最大公约数和最小公倍数-多语言
目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析: 最小公倍数输入的两个数之积除于它们的最大公约数,关键是求出最大公约数; 求最大公约数用辗转…...
第三方数据库连接免费使用和安装
是强大的一体化数据库开发解决方案,可从单一应用程序无缝连接多个数据库,包括 MySQL、PostgreSQL、MongoDB、MariaDB、SQL Server、Oracle、SQLite 和 Redis。 下载:https://download.csdn.net/download/mo3408/90045937 升级特性 模型&…...
水库大坝安全监测之量水堰计应用
量水堰计是水库大坝安全监测系统中的一种关键设备,主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项: 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器,其工作原理主要基于水流…...
算法笔记:滑动窗口
前言 滑动窗口作为一个考点较高的算法,广泛应用于子串问题中,本文将进行详细讲解。 一、滑动窗口是什么 滑动窗口是双指针算法的一种,基本思路为维护一个窗口,然后从前往后遍历元素进行运算。 二、滑动窗口算法和其他双指针算…...
Ubuntu下的Graphviz的基础使用方法
一、Graphviz介绍 graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言):dot作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局 1、什么是Graphviz 官网地址,https://www.graphviz.org/ Gr…...
微积分复习笔记 Calculus Volume 1 - 6.8 Exponential Growth and Decay
6.8 Exponential Growth and Decay - Calculus Volume 1 | OpenStax...
React的ts文件中通过createElement拼接一段内容出来
比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果, 如果单纯的用render渲染会很简单, 但是在ts文件中处理,所以采用了createElement拼接 代码如下: format: (values: string[]) > {if (!values || !val…...
成都网站建设开发/搜索引擎排名谷歌
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-06-15 ❤️❤️ 本篇更新记录 2022-06-15 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
重庆网站建设与网络推广/怎样制作一个网站
Java几种常见的四舍五入的方法 题目要CSS布局HTML小编今天和大家分享编写一个四舍五入的函数,要CSS布局HTML小编今天和大家分享可以保留到小数点后面的任意一位。 java四舍五入的函数:Math.round 语法: Math.round(x); 参数: x 为一数值。 解释: 方法。返回对参数x四舍五入…...
政府网站app/网络广告策划书范文
近日,一家VR(虚拟现实)创业公司Pico对外披露,该公司已被字节跳动收购。受这件事的催化,一个很多人都不认识的新名词——“元宇宙”,进入了大众的视野。 当我们还在试图理解消化这个新概念时,一…...
网站提交做外链有什么作用/seo运营是什么意思
1,安装sublime编辑器,下载地址:http://www.sublimetext.com/3 2,要使用sublime的插件机制必须安装package control:https://packagecontrol.io/installation 如果上面package control网址打不开,直接复制下…...
新注册公司怎么做网站/百度推广关键词优化
1 问题 想实现如下的功能,在全网都找不到一个例子解析。如果使用如下的p标签,就会出现这一行换行的情况,根本不能实现一行两部分:一部分左对齐,一部分右对齐的要求 <p align"right">诶嘿</p>2…...
做网站开店/千度seo
DHT11简介 DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。 传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机 DHT11 的技术参数如下: 工作电压范围: 3.3V-5.5V 工作电流 :平均 0.5mA …...