当前位置: 首页 > article >正文

Arduino 第十四章:led点阵

Arduino 第十三章:LED 点阵

一、LED 点阵概述

LED 点阵是由多个发光二极管(LED)按照矩阵形式排列组成的显示设备,常见的有 8x8、16x16 等规格。它可以用来显示字符、数字、简单图形以及动画等信息,在信息展示、广告屏、电子时钟等领域应用广泛。通过控制每个 LED 的亮灭状态,就能组合出各种不同的显示效果。

二、工作原理

(一)结构组成

LED 点阵通常由行线和列线组成,每个 LED 位于行线和列线的交叉点上。当对应的行线和列线加上合适的电压时,该交叉点的 LED 就会点亮。例如,在一个 8x8 的 LED 点阵中,有 8 条行线和 8 条列线,总共 64 个 LED。

(二)驱动方式

LED 点阵的驱动方式主要有静态驱动和动态扫描驱动两种。

  • 静态驱动:给每个 LED 提供独立的驱动电路,使其持续发光。这种方式的优点是显示稳定、亮度高,但需要大量的驱动电路,成本较高,适用于小规模的点阵显示。
  • 动态扫描驱动:逐行或逐列地依次点亮 LED,利用人眼的视觉暂留效应,让人感觉整个点阵都在同时发光。这种方式可以减少驱动电路的数量,降低成本,是最常用的驱动方式。

三、硬件连接

(一)所需材料

  • Arduino 开发板(如 Arduino Uno)
  • 8x8 LED 点阵模块
  • 杜邦线若干

(二)引脚说明

8x8 LED 点阵模块一般有 16 个引脚,8 个行引脚和 8 个列引脚。不同模块的引脚排列可能不同,需要参考模块的说明书来确定。

(三)连接方式

以动态扫描驱动为例,将 8 个行引脚分别连接到 Arduino 的 8 个数字引脚(如引脚 2 - 9),8 个列引脚分别连接到 Arduino 的另外 8 个数字引脚(如引脚 10 - 17)。

(四)连接图

          +5V (Arduino)
           |
           |
       [VCC] (LED Matrix)
       [Row 1] ---- Digital Pin 2 (Arduino)
       [Row 2] ---- Digital Pin 3 (Arduino)
       [Row 3] ---- Digital Pin 4 (Arduino)
       [Row 4] ---- Digital Pin 5 (Arduino)
       [Row 5] ---- Digital Pin 6 (Arduino)
       [Row 6] ---- Digital Pin 7 (Arduino)
       [Row 7] ---- Digital Pin 8 (Arduino)
       [Row 8] ---- Digital Pin 9 (Arduino)
       [Col 1] ---- Digital Pin 10 (Arduino)
       [Col 2] ---- Digital Pin 11 (Arduino)
       [Col 3] ---- Digital Pin 12 (Arduino)
       [Col 4] ---- Digital Pin 13 (Arduino)
       [Col 5] ---- Digital Pin A0 (Arduino)
       [Col 6] ---- Digital Pin A1 (Arduino)
       [Col 7] ---- Digital Pin A2 (Arduino)
       [Col 8] ---- Digital Pin A3 (Arduino)
       [GND] ---- GND (Arduino)

四、代码实现

(一)显示静态字符示例

// 定义行引脚
const int rowPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
// 定义列引脚
const int colPins[8] = {10, 11, 12, 13, A0, A1, A2, A3};

// 字符 'A' 的点阵数据
byte letterA[8] = {
  B00111100,
  B01000010,
  B01000010,
  B01111110,
  B01000010,
  B01000010,
  B01000010,
  B00000000
};

void setup() {
  // 设置行引脚为输出模式
  for (int i = 0; i < 8; i++) {
    pinMode(rowPins[i], OUTPUT);
  }
  // 设置列引脚为输出模式
  for (int i = 0; i < 8; i++) {
    pinMode(colPins[i], OUTPUT);
  }
}

void loop() {
  // 逐列扫描显示字符
  for (int col = 0; col < 8; col++) {
    // 选通当前列
    digitalWrite(colPins[col], LOW);
    for (int row = 0; row < 8; row++) {
      // 根据点阵数据设置行引脚状态
      if (bitRead(letterA[row], col)) {
        digitalWrite(rowPins[row], HIGH);
      } else {
        digitalWrite(rowPins[row], LOW);
      }
    }
    // 短暂延时
    delay(1);
    // 关闭当前列
    digitalWrite(colPins[col], HIGH);
  }
}

(二)代码解释

  1. 引脚定义
    • const int rowPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};:定义 8 个行引脚连接到 Arduino 的数字引脚 2 - 9。
    • const int colPins[8] = {10, 11, 12, 13, A0, A1, A2, A3};:定义 8 个列引脚连接到 Arduino 的数字引脚 10 - 13 和模拟引脚 A0 - A3。
  2. 点阵数据
    • byte letterA[8]:定义字符 ‘A’ 的点阵数据,每个字节代表一行的 LED 状态,1 表示点亮,0 表示熄灭。
  3. setup() 函数
    • 通过 pinMode() 函数将行引脚和列引脚都设置为输出模式。
  4. loop() 函数
    • 使用 for 循环逐列扫描显示字符。
    • digitalWrite(colPins[col], LOW);:选通当前列。
    • 通过 bitRead() 函数读取点阵数据中对应位的值,根据该值设置行引脚的状态。
    • delay(1);:短暂延时,利用视觉暂留效应。
    • digitalWrite(colPins[col], HIGH);:关闭当前列。

五、注意事项

  • 电源供应:LED 点阵在点亮多个 LED 时需要较大的电流,要确保 Arduino 能够提供足够的电源,必要时可以使用外部电源。
  • 扫描速度:动态扫描驱动时,扫描速度要合适。速度过快可能导致显示亮度不足,速度过慢则会出现闪烁现象。
  • 引脚电平:不同的 LED 点阵模块可能对行引脚和列引脚的电平要求不同,需要根据实际情况调整代码中的高低电平设置。

六、应用拓展

  • 滚动显示:通过不断更新显示的点阵数据,可以实现字符或图形的滚动显示效果。
  • 动画展示:将多个不同的点阵数据按顺序显示,就能实现简单的动画效果。
  • 与传感器结合:结合传感器(如温度传感器、光线传感器等),根据传感器的数据动态改变 LED 点阵的显示内容。

http://www.kler.cn/a/541993.html

相关文章:

  • RabbitMQ 延迟队列
  • Golang Web单体项目目录结构最佳实践
  • DeepSeek本地部署详细指南
  • Android图片加载框架Coil,Kotlin
  • 图像锐化(QT)
  • DeepSeek 实践总结
  • 渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • 1.【线性代数】——方程组的几何解释
  • 机器学习10-卷积和卷积核3
  • 12.项目结构
  • 亚远景-ASPICE标准在全球汽车行业的实践与展望
  • 除了重定向,还有其他方法处理未定义路由吗?
  • C# 上位机--变量
  • MongoDB进阶篇-索引
  • LabVIEW多电机CANopen同步
  • macbook2015升级最新MacOS 白苹果变黑苹果
  • 哈希表实现(C++实现)
  • 【橘子ES】Aggregations 聚合准备
  • 蓝桥杯备考:贪心算法简介
  • WPS计算机二级•文档的文本样式与编号
  • Unity-Mirror网络框架-从入门到精通之LagCompensation示例
  • C++ STL容器之vector的使用及复现
  • Word成功接入DeepSeek详细步骤
  • Java在大数据处理中的应用:从MapReduce到Spark
  • web前端-vue项目路由设置
  • Java的设计模式(工厂模式)