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交流

相关推荐
似是燕归来21 小时前
嵌入式工程师进阶指南:适配器编程设计模式一
c语言·stm32·适配器模式·嵌入式开发
QiLinkOS1 天前
QiLinkOS报告:行业风险导航系列《中国技术大败局》新能源汽车篇(3)
物联网·智能制造·dna双螺旋归因模型·qilinkos报告·技术专利避坑指南·专利分析·qilink
2501_913981781 天前
物联网智慧安防通信方案解析:NB-IoT、LoRa与5G技术在安防场景中的应用
物联网·5g
csg11071 天前
电路板抗干扰:电容、电感和弧线布线的应用
单片机·嵌入式硬件·物联网·自动化
kiros_wang1 天前
ExploreYC 新手快速入门与实战指南
大数据·人工智能·物联网
hongmai6668881 天前
GD5F1GM7REYIG存储芯片:1Gb SPI NAND Flash助力国产设备高效运行
网络·单片机·嵌入式硬件·物联网·智能家居
阿乔外贸日记1 天前
意大利进口主力产品及主要合作供应国
大数据·人工智能·物联网·搜索引擎·云计算
蓝奥声科技1 天前
扩展式监控显示面板,实现更加灵活的智慧用电监测方案
物联网·智能插座·智能用电计量插座·扩展式监控显示面板
xu_wenming1 天前
Zephyr上开发 BLE(低功耗蓝牙)入门应用
c语言·嵌入式硬件·物联网
JNX_SEMI1 天前
ATR2652 GNSS双频LNA:0.75dB噪声系数与22dB高增益设计
前端·单片机·嵌入式硬件·物联网·硬件工程