Arduino 点阵 LED 的动画显示

[复制链接]
查看879 | 回复3 | 2024-9-6 12:52:23 | 显示全部楼层 |阅读模式

Arduino 点阵 LED 的动画显示

驱动原理

模块原理图

MAX7219 点阵 LED 模块原理图如下

image.png

MAX7219简介

MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。

其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。

MAX7221与SPI™、QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。

一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。

整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

功能及时序

image.png

时序图

image.png

MAX7219功能特点

  • 10MHz 连续串行口
  • 独立的LED 段控制
  • 数字的译码与非译码选择
  • 150μA 的低功耗关闭模式
  • 亮度的数字和模拟控制
  • 高电压中断显示
  • 共阴极LED 显示驱动
  • 限制回转电流的段驱动来减少EMI(MAX7221)
  • SPI, QSPI, MICROWIRE串行接口(MAX7221)
  • 24 脚的DIP 和SO 封装

程序代码

#include <LedControl.h>

const int DIN_PIN = 7;
const int CS_PIN = 6;
const int CLK_PIN = 5;

const uint64_t IMAGES[] = {
  0x444830f0f060c000,
  0x6c28381c3c183000
};
const int IMAGES_LEN = sizeof(IMAGES)/8;


LedControl display = LedControl(DIN_PIN, CLK_PIN, CS_PIN);


void setup() {
  display.clearDisplay(0);
  display.shutdown(0, false);
  display.setIntensity(0, 10);
}

void displayImage(uint64_t image) {
  for (int i = 0; i < 8; i++) {
    byte row = (image >> i * 8) & 0xFF;
    for (int j = 0; j < 8; j++) {
      display.setLed(0, i, j, bitRead(row, j));
    }
  }
}

int i = 0;

void loop() {
  displayImage(IMAGES[i]);
  if (++i >= IMAGES_LEN ) {
    i = 0;
  }
  delay(300);
}

取模网站:LED Matrix Editor (xantorohara.github.io)

视频效果

<iframe src="https://player.bilibili.com/player.html?isOutside=true&aid=409554613&bvid=BV1DG411Y7jC&cid=1361163020&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>

MCU开发者和爱好者
回复

使用道具 举报

iiv | 2024-9-6 19:02:23 | 显示全部楼层
优秀!
回复

使用道具 举报

1055173307 | 2024-9-7 10:57:25 | 显示全部楼层
优秀!
回复

使用道具 举报

bzhou830 | 2024-9-9 11:30:47 | 显示全部楼层
很棒呢
选择去发光,而不是被照亮
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则