c++趣味编程&玩转物联网:树莓派Pico控制 LED点阵屏

8×8 LED点阵屏是一种常见的数字显示设备,被广泛应用于电子时钟、公交车显示屏和游戏设备中。在本项目中,我们使用树莓派Pico开发板,通过I2C协议驱动HT16K33芯片,实现点阵屏显示心形图案、倒计时、动态矩形和动态圆等内容。本文详细介绍硬件连接、库的使用以及C++代码实现,帮助开发者掌握点阵屏控制技术。


一、项目目标与硬件清单

1. 项目目标

通过树莓派Pico控制8×8点阵屏实现:

  • 心形图案的显示。
  • 倒计时数字显示。
  • 动态矩形和动态圆的绘制。
  • 显示"I Love Coding!"文本内容。
2. 所需硬件
  • 树莓派Pico开发板 × 1
  • 8×8 LED点阵屏模块(HT16K33驱动芯片) × 1
  • 4P转杜邦线 × 1
  • USB数据线 × 1

二、8×8点阵屏与HT16K33简介

1. HT16K33芯片特点
  • 低功耗:适合便携设备。
  • I2C通信:大幅简化引脚使用,仅需时钟和数据引脚。
  • 多功能:支持动态显示、亮度调节和多种图案绘制。
2. 通信地址

HT16K33模块的I2C地址由拨码开关决定,本文使用的模块地址固定为 0x70


三、电路连接

1. 接线说明
  • CLK(时钟):接Pico的GP20。
  • DIO(数据):接Pico的GP21。
  • VCCGND:分别接Pico的3.3V和GND。
2. 电路图和接线图

根据模块与Pico的引脚定义,完成硬件连接,确保模块与开发板的电源、电平兼容。


四、代码实现与解析

1. 必要的库安装

本项目使用了 Matrix 库来控制点阵屏,安装步骤如下:

  1. 打开Arduino IDE。
  2. 点击"项目" → "加载库" → "添加 .ZIP 库"。
  3. 选择 Matrix.ZIP 文件并导入。
2. 完整代码实现

以下是实现动态显示功能的完整代码:

复制代码
#include "Matrix.h"

// 定义I2C引脚
Matrix matrix(20, 21);

void setup() {
  matrix.begin(0x70);       // 初始化点阵屏
  matrix.setBrightness(8);  // 设置亮度(0-15)
}

const int LED_ON = 1;

// 心形图案定义
uint8_t heart[8] = {
  0b01100110,  // ##  ##
  0b10011001,  // #  ##  #
  0b10000001,  // #      #
  0b10000001,  // #      #
  0b01000010,  //  #    # 
  0b00100100,  //   #  #  
  0b00011000,  //    ##   
  0b00000000   //         
};

void loop() {
  // 倒计时数字
  for (int i = 9; i >= 0; i--) {
    matrix.clear();
    matrix.setCursor(2, 0);
    matrix.print(i);
    matrix.writeDisplay();
    delay(500);
  }

  // 动态矩形
  for (int size = 6; size > 0; size -= 2) {
    matrix.clear();
    matrix.drawRect((8 - size) / 2, (8 - size) / 2, size, size, LED_ON);
    matrix.writeDisplay();
    delay(500);
  }

  // 动态圆
  for (int radius = 1; radius <= 3; radius++) {
    matrix.clear();
    matrix.drawCircle(3, 3, radius, LED_ON);
    matrix.writeDisplay();
    delay(500);
  }

  // 显示心形图案
  matrix.clear();
  for (uint8_t y = 0; y < 8; y++) {
    for (uint8_t x = 0; x < 8; x++) {
      if (heart[y] & (1 << (7 - x))) {
        matrix.drawPixel(x, y, LED_ON);
      }
    }
  }
  matrix.writeDisplay();
  delay(1000);

  // 显示文本
  matrix.clear();
  matrix.drawStr("I Love Coding!!");
  delay(1000);
}

五、代码解析与关键知识点

1. 显示心形图案

通过按行定义图案的二进制数据实现:

uint8_t heart[8] = { ... };

  • 每一行8位数据对应点阵屏的一行。
  • 使用位运算逐点绘制图案。
2. 倒计时

通过循环从 9 倒数到 0

for (int i = 9; i >= 0; i--) { matrix.print(i); }

3. 动态图案
  • 动态矩形:逐步缩小矩形边长实现动画效果。
  • 动态圆:逐步增大半径实现动画效果。
4. 文本显示

直接调用 drawStr() 显示字符串内容。


六、项目现象

代码上传并运行后,8×8点阵屏将按以下顺序动态显示:

  1. 倒计时数字。
  2. 动态变化的矩形。
  3. 动态增长的圆形。
  4. 心形图案。
  5. 字符串 "I Love Coding!!"。

七、技术扩展与优化

  1. 实时交互:通过按钮切换显示内容。
  2. 动态亮度调节:实现根据环境光线调节亮度。
  3. 复杂图案设计:扩展显示更复杂的动态图案。
  4. 增加语音交互:结合语音识别模块,用语音指令控制图案切换。

八、学习意义

本项目帮助开发者:

  • 理解I2C协议与LED点阵屏工作原理。
  • 掌握图案与动态效果的实现方法。
  • 提高对C++面向硬件编程的理解和动手能力。

结语

通过树莓派Pico和8×8 LED点阵屏的结合,本项目展示了如何用编程语言控制硬件实现复杂图案显示。希望本文能帮助您进一步掌握C++编程与硬件结合的开发技能。

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

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

欢迎加V交流

相关推荐
BAGAE2 小时前
MODBUS 通信协议详细介绍
linux·嵌入式硬件·物联网·硬件架构·iot·嵌入式实时数据库·rtdbs
jz-炸芯片的zero13 小时前
【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
单片机·物联网·算法·zephyr·bms电源管理算法
亿坊电商1 天前
物联网-无人自助茶室-如何实现24H智能营业?
物联网
TDengine (老段)1 天前
TDengine 选择函数 TOP() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
御控工业物联网1 天前
智慧灌溉泵房远程监控物联网系统解决方案
物联网·远程监控·组态监控·智慧水务·智慧灌溉·无人值守泵站·设备远程调试
御控工业物联网1 天前
农田水利工程远程监控与远程调试的御控物联网系统解决方案
物联网·远程监控·远程调试
清风6666661 天前
基于STM32单片机的OneNet物联网粉尘烟雾检测系统
stm32·单片机·物联网·毕业设计·课程设计
TDengine (老段)1 天前
TDengine 特殊函数 MODE() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
余衫马1 天前
开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序
物联网·mqtt·.net
御控工业物联网2 天前
城市二次供水物联网监测管控管理平台御控解决方案:构建全链路智能水务新生态
物联网·数据采集·远程监控·物联网网关·二次供水·智能水务·泵站