C++趣味编程玩转物联网:用树莓派Pico控制四位数码管

news2024/11/29 3:37:32

数码管是一种常用的数字显示器件,广泛应用于电子时钟、记分牌和智能设备显示界面。在本项目中,我们将通过树莓派Pico板控制一个四位数码管模块,展示从 00009999 的数字动态显示。这不仅是一次硬件和软件结合的实践,还可以帮助初学者深入理解嵌入式系统中的显示技术。


项目背景与目标

四位数码管模块因其价格低廉、显示清晰而被广泛使用。通过这个项目,学习者将掌握以下知识:

  • 数码管的基本原理与硬件结构。
  • 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库以简化驱动代码:

  1. 点击“项目” > “加载库” > “添加 .ZIP 库”。
  2. 导入 TM1650.ZIP 文件,完成库的安装。

核心代码实现

以下代码实现了四位数码管从 00009999 的动态显示:

#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
  }
}


代码解析

  1. 库初始化

    • TM1650 DigitalTube(CLK, DIO):通过时钟与数据引脚初始化TM1650芯片。
  2. 清除与亮度设置

    • DigitalTube.clearBit(b):清除指定位的数据。
    • DigitalTube.setBrightness(2):设置亮度级别,0为最暗,7为最亮。
  3. 数字显示

    • 使用 DigitalTube.displayBit() 指定每个位的数字值。
  4. 动态显示逻辑

    • 通过取模与整除操作分解整数的每个位数字,实现 00009999 的逐次递增显示。

项目现象

代码成功上传并运行后,四位数码管将依次显示从 00009999 的数字,并循环显示。这一现象直观展示了数码管的基本功能与TM1650的强大控制能力。


技术扩展与优化

  1. 动态亮度调节 增加按键输入,实时调整数码管亮度:

    DigitalTube.setBrightness(buttonValue);

  2. 增加显示内容 配合传感器,实时显示环境温湿度、时间等动态数据。

  3. 低功耗优化 使用睡眠模式降低功耗,适合便携设备应用。

  4. 多位数码管扩展 利用多个TM1650模块,实现多行数字显示或图案。


教育意义与学习目标

  • C++核心技能:熟悉库调用、函数设计与循环结构。
  • 嵌入式开发基础:理解I2C通信协议与硬件控制逻辑。
  • 项目式学习:通过动手实践,培养软硬件结合的工程能力。

结语

通过本项目,您将掌握四位数码管的显示原理与C++编程的结合应用,为进一步探索嵌入式开发打下坚实基础。未来,您可以结合更多传感器和模块,设计出更实用、更复杂的智能系统。

如果您觉得这篇文章对您有帮助,请点赞、收藏并分享,让更多人参与到嵌入式开发的学习中来!

 动手实践学习套件请点击-》实践开发套件

欢迎加V交流

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

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

相关文章

乌班图单机(不访问外网)部署docker和服务的方法

面向对象:Ubuntu不能访问外网的机子,部署mysql、redis、jdk8、minio 过程: 1、安装docker(照着图去这里找对应的下载下来https://download.docker.com/linux/static/stable/),将7个docker官网下载的文件下载下来后,传上去服务器随便一个文件夹或者常用的opt或者/usr/lo…

2024年11月27日Github流行趋势

项目名称&#xff1a;screenshot-to-code 项目维护者&#xff1a;abi clean99 sweep-ai kachbit vagusX项目介绍&#xff1a;通过上传截图将其转换为整洁的代码&#xff08;支持HTML/Tailwind/React/Vue&#xff09;。项目star数&#xff1a;62,429项目fork数&#xff1a;7,614…

K8s调度器扩展(scheduler)

1.K8S调度器 筛选插件扩展 为了熟悉 K8S调度器扩展步骤&#xff0c;目前只修改 筛选 插件 准备环境&#xff08;到GitHub直接下载压缩包&#xff0c;然后解压&#xff0c;解压要在Linux系统下完成&#xff09; 2. 编写调度器插件代码 在 Kubernetes 源代码目录下编写调度插件…

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求&#xff1a;利用QPainter绘制点、线、圆、矩形、文字&#xff1b;设置画笔改为红色&#xff0c;宽度为…

Spring Boot 3 集成 Spring Security(3)数据管理

文章目录 准备工作新建项目引入MyBatis-Plus依赖创建表结构生成基础代码 逻辑实现application.yml配置SecurityConfig 配置自定义 UserDetailsService创建测试 启动测试 在前面的文章中我们介绍了 《Spring Boot 3 集成 Spring Security&#xff08;1&#xff09;认证》和 《…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

13 —— 开发环境调错-source map

问题&#xff1a;代码被压缩后&#xff0c;无法正确定位源代码的位置&#xff08;行数和列数&#xff09; source map&#xff1a;准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…

水库大坝安全监测之量水堰计应用

量水堰计是水库大坝安全监测系统中的一种关键设备&#xff0c;主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项&#xff1a; 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器&#xff0c;其工作原理主要基于水流…

Scrapy图解工作流程-cnblog

1.1 介绍部分&#xff1a; 文字提到常用的Web框架有Django和Flask&#xff0c;接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分&#xff1a; Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

复合查询和内外连接

文章目录 1. 简单查询2. 多表查询2.1 显示雇员名、雇员工资以及所在部门的名字2.2 显示部门号为10的部门名&#xff0c;员工名和工资2.3 显示各个员工的姓名&#xff0c;工资&#xff0c;及工资级别 3. 自连接4. 子查询4.1 where后的子查询4.1.1 单行子查询4.1.2 多行子查询 (i…

UniApp开发实战:常见报错解析与解决方案

UniApp开发实战&#xff1a;常见报错解析与解决方案 病例1、TypeError: undefined is not an object (evaluating ‘this. s c o p e . scope. scope.getAppWebview’) 需求&#xff1a;获取页面示例&#xff0c;动态修改头部搜索框内容&#xff0c;获取页面实例时候报错unde…

Docker 容器网络创建网桥链接

一、网络&#xff1a;默认情况下&#xff0c;所有的容器都以bridge方式链接到docker的一个虚拟网桥上&#xff1b; 注意&#xff1a;“172.17.0.0/16”中的“/16”表示子网掩码的长度为16位&#xff0c;它表示子网掩码中有16个连续的1&#xff0c;后面跟着16个连续的0。用于区分…

一个开源轻量级的服务器资源监控平台,支持告警推送

大家好&#xff0c;今天给大家分享一款开源的轻量级服务器资源监控工具Beszel&#xff0c;提供历史数据记录、Docker容器统计信息监控以及多种警报功能&#xff0c;用于监控服务器资源。 项目介绍 Beszel由hub&#xff08;中心服务器端应用&#xff0c;基于PocketBase构建&…

使用Compose Multiplatform开发跨平台的Android调试工具

背景 最近对CMP跨平台很感兴趣&#xff0c;为了练手&#xff0c;在移动端做了一个Android和IOS共享UI和逻辑代码的天气软件&#xff0c;简单适配了一下双端的深浅主题切换&#xff0c;网络状态监测&#xff0c;刷新调用振动器接口。 做了两年多车机Android开发&#xff0c;偶…

[MRCTF2020]Transform

查壳&#xff0c;拖入64位IDA LOBYTE8位就是一个字节&#xff0c;在此处无意义&#xff0c;因为我们输入的本来就是按字节输入的 设 a byte_414040,bdword_40F040,cbyte_40F0E0,输入的字符串为flag; 从题目里得到 加密代码 a[i] flag[b[i]]; a[i] ^ b[i]; c a 即c[i] a[i…

podman 源码 5.3.1编译

1. 构建环境 在麒麟V10服务器操作系统上构建&#xff1a;Kylin-Server-V10-GFB-Release-2204-Build03-ARM64.iso。由于只是编译 podman 源码&#xff0c;没必要特地在物理机或服务上安装一个这样的操作系统&#xff0c;故采用在虚拟机里验证。 2. 安装依赖 参考资料&#xf…

Llmcad: Fast and scalable on-device large language model inference

题目&#xff1a;Llmcad: Fast and scalable on-device large language model inference 发表于2023.09 链接&#xff1a;https://arxiv.org/pdf/2309.04255 声称是第一篇speculative decoding边缘设备的论文&#xff08;不一定是绝对的第一篇&#xff09;&#xff0c;不开源…

用Java爬虫“搜刮”工厂数据:一场数据的寻宝之旅

引言&#xff1a;数据的宝藏 在这个数字化的时代&#xff0c;数据就像是隐藏在数字丛林中的宝藏&#xff0c;等待着勇敢的探险家去发掘。而我们&#xff0c;就是那些手持Java魔杖的现代海盗&#xff0c;准备用我们的爬虫船去征服那些数据的海洋。今天&#xff0c;我们将一起踏…

14、保存与加载PyTorch训练的模型和超参数

文章目录 1. state_dict2. 模型保存3. check_point4. 详细保存5. Docker6. 机器学习常用库 1. state_dict nn.Module 类是所有神经网络构建的基类&#xff0c;即自己构建一个深度神经网络也是需要继承自nn.Module类才行&#xff0c;并且nn.Module中的state_dict包含神经网络中…

【计算机网络】多路转接之poll

poll也是一种linux中的多路转接方案(poll也是只负责IO过程中的"等") 解决&#xff1a;1.select的fd有上限的问题&#xff1b;2.每次调用都要重新设置关心的fd 一、poll的使用 int poll(struct pollfd *fds, nfds_t nfds, int timeout); ① struct pollfd *fds&…