SKU: B203 · MAX7219 · 红色 8x8 点阵

FC-16 MAX7219 4位点阵模块 接线与代码

4 块 8x8 红色点阵直线级联,SPI 三线控制。本页包含 Arduino UNO R3 接线图、硬件 SPI 测试代码、退货检测程序,以及整行不亮和花屏的排查方法。

Quick Facts

  • 芯片:MAX7219(SPI 接口,非 I2C)
  • 规格:4 块 8x8 红色点阵,直线级联
  • 供电:5V(4 块全亮约 300-400mA)
  • 接线:DIN + CLK + CS 三线,DOUT 级联
  • 配套:Arduino UNO R3(SKU: H42)

Product Image

实物照片

B203 FC-16 MAX7219 4位红色点阵模块

Wiring

Arduino UNO R3 接线图

4 块 FC-16 MAX7219 级联。CLK 和 CS 全部并联,DIN→模块#1→DOUT→模块#2→DOUT→模块#3→DOUT→模块#4。数据从模块#1 流入,依次经过 #2、#3,最后到 #4。

B203 FC-16 MAX7219 4位 Arduino UNO 接线图
UNO R3(H42)FC-16 模块说明
D13CLK(全部并联)SPI 时钟,4 块模块的 CLK 全部接 D13
D11DIN(第 1 块)SPI 数据,只接第 1 块 DIN
D10CS(全部并联)片选 / LOAD,4 块全部并联
5VVCC(全部并联)4 块全亮约 300-400mA,UNO 5V 引脚可直供
GNDGND(全部并联)共地
—DOUT → 下一块 DIN级联:每块 DOUT 接下一块 DIN

Code

硬件 SPI 测试代码

使用 Arduino 硬件 SPI(不用 LedControl 库),4 块级联,轮流显示 "1234" 和全亮,每 5 秒切换。拔掉模块再插回可自动恢复(每次切换时重新初始化)。

// FC-16 MAX7219 4位 — 1234(5s) ↔ 全亮(5s)
// 接线: DIN→D11  CLK→D13  CS→D10
#include <SPI.h>

const int CS = 10;
const int DEV = 4;
byte buf[DEV][8];   // buf[模块][行]

// ----- 一次 CS 脉冲写一个寄存器到全部模块 -----
void maxAll(byte reg, byte val) {
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  digitalWrite(CS, LOW);
  for (int d = 0; d < DEV; d++) { SPI.transfer(reg); SPI.transfer(val); }
  digitalWrite(CS, HIGH);
  SPI.endTransaction();
}

// ----- 整帧输出(8 次 CS 脉冲)-----
void drawBuf() {
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  noInterrupts();
  for (int r = 0; r < 8; r++) {
    digitalWrite(CS, LOW);
    for (int d = 0; d < DEV; d++) { SPI.transfer(r + 1); SPI.transfer(buf[d][r]); }
    digitalWrite(CS, HIGH);
  }
  interrupts();
  SPI.endTransaction();
}

// ----- 填充缓冲区 -----
void fill1234() {
  const byte N[4][8] = {
    {0x10,0x18,0x14,0x10,0x10,0x10,0x10,0x10},
    {0x7E,0x02,0x02,0x7E,0x40,0x40,0x40,0x7E},
    {0x7E,0x02,0x02,0x3E,0x02,0x02,0x02,0x7E},
    {0x08,0x18,0x28,0x48,0xFE,0x08,0x08,0x08},
  };
  for (int d = 0; d < DEV; d++)
    for (int r = 0; r < 8; r++) buf[d][r] = N[d][r];
}

void fillAllOn() {
  for (int d = 0; d < DEV; d++)
    for (int r = 0; r < 8; r++) buf[d][r] = 0xFF;
}

// ----- 初始化 + 画画面(每次切换都跑 = 拔插自动恢复)-----
void show(bool allOn) {
  maxAll(0x09, 0x00); // 非 BCD
  maxAll(0x0A, 0x01); // 亮度
  maxAll(0x0B, 0x07); // 扫描 8 行
  maxAll(0x0C, 0x01); // 正常模式
  maxAll(0x0F, 0x00); // 关测试

  if (allOn) fillAllOn();
  else       fill1234();
  drawBuf();
}

void setup() {
  pinMode(CS, OUTPUT);
  digitalWrite(CS, HIGH);
  SPI.begin();
  show(false);
}

void loop() {
  delay(5000);
  show(true);   // 全亮(内含重新初始化)
  delay(5000);
  show(false);  // 1234(内含重新初始化)
}

库依赖:仅需 Arduino 内置 SPI.h,无需额外安装。硬件 SPI 比 LedControl 软件模拟更稳定,抗干扰更强。

Troubleshooting

常见故障排查

以下排查方法基于退货实测经验,部分故障和 LedControl 库的信号质量问题有关,改用硬件 SPI 后大部分消失。

整行不亮(其它 7 行正常)

原因:MAX7219 该 DIG 脚损坏或虚焊。

FC-16 的 1088AS 点阵是共阴极结构——DIG0-DIG7 分别驱动 8 个行(吸收电流),SEG A-DP 驱动 8 个列(输出电流)。一整行全黑说明那一行回路断了。

定位方法:

  • 换一块模块插到同一位置——如果问题消失,确认是模块问题
  • 如果只发生在特定位置——检查该位置的排针/排母是否接触不良
  • 大概率是 MAX7219 芯片该 DIG 脚内部开路(静电或过流损坏)

处理:退货/换货。MAX7219 芯片损坏不可修复。

显示十几秒后画面乱掉

原因:MAX7219 发热后 DOUT 驱动能力下降。

尤其 LedControl 库用软件模拟 SPI 时更明显——时序不够干净,坏模块的 DOUT 噪声顺着级联线干扰下游模块。

解决:

  • 换用硬件 SPI(见上方代码)——信号更干净
  • 如果还乱,把花屏的那块换到级联最末端——DOUT 不再接下游
  • 如果问题跟着模块走——确认是这块 MAX7219 芯片不良
屏幕一直闪 / 间歇性快闪乱码

常见原因(按可能性排序):

  1. LedControl 库反复清屏 — loop() 里每圈都 clearDisplay + setRow,肉眼看到的就是闪。改成只写不删的硬件 SPI 方案可解决。
  2. SPI 信号被干扰 — 某块 MAX7219 不良,在总线空闲时往 DOUT 输出噪声。拔掉嫌疑模块单独测试可确认。
  3. 供电不足 — 4 块全亮时 5V 电流不够,MAX7219 内部欠压复位,表现为间歇性全熄再亮。换外部 5V 电源或降低亮度验证。
4 块里只有某几块正常,其余不亮或乱码

先确认级联方向:DIN 接第一块,DOUT 接下一块 DIN,依次类推。CS 和 CLK 必须全部并联。

如果接线正确但中间某块不亮——换位置测试:把不亮的模块换到级联最末端,如果亮了说明它的 DOUT 有问题;如果还是不亮说明芯片本身坏了。

References

官方与公开资料