一、硬件:
二、软件:
使用Arduino IDE

三、操作:
1、接线
| MAX7219 模块引脚 | Arduino Nano 引脚 | 功能说明 |
| VCC | 5V | 电源正极,不要接 3.3V,亮度不足 |
| GND | GND | 电源负极,必须共地 |
| DIN | D11 | 串行数据输入 |
| CLK | D13 | 时钟信号 |
| CS | D10 | 片选 / 锁存信号 |
2、程序
#include <LedControl.h>
LedControl lc = LedControl(11, 13, 10, 1);
void setup() {
lc.shutdown(0, false);
lc.clearDisplay(0);
}
void loop() {
animGradientWave(); // 明暗波浪流动
animPulseHeart(); // 脉动爱心(顺时针90°修正)
animSpreadPulse(); // 中心扩散脉动
}
// 8x8图案 顺时针旋转90度 输出到点阵
void drawRotateCW(byte src[8])
{
byte dst[8] = {0};
for (int y = 0; y < 8; y++)
{
for (int x = 0; x < 8; x++)
{
if (bitRead(src[y], x))
{
bitSet(dst[x], 7 - y);
}
}
}
for (int i = 0; i < 8; i++)
{
lc.setRow(0, i, dst[i]);
}
}
// 明暗波浪流动
void animGradientWave()
{
lc.clearDisplay(0);
for(int offset=0; offset<16; offset++)
{
for(int r=0;r<8;r++)
{
byte line = 0;
for(int c=0;c<8;c++)
{
int val = (r + c + offset) % 8;
if(val < 5) bitSet(line, c);
}
lc.setRow(0, r, line);
}
lc.setIntensity(0, map(offset,0,15,3,12));
delay(70);
}
}
// 脉动爱心
void animPulseHeart()
{
byte heart[] = {
B00000000,
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
};
for(int bright=3; bright<=12; bright++){
lc.setIntensity(0, bright);
drawRotateCW(heart); // 顺时针旋转90°显示
delay(60);
}
for(int bright=12; bright>=3; bright--){
lc.setIntensity(0, bright);
drawRotateCW(heart);
delay(60);
}
delay(200);
}
// 中心扩散脉动
void animSpreadPulse()
{
lc.clearDisplay(0);
for(int layer=0;layer<4;layer++)
{
for(int r=0;r<8;r++)
{
for(int c=0;c<8;c++)
{
int dist = max(abs(r-3.5), abs(c-3.5));
if(dist <= layer) lc.setLed(0,r,c,true);
}
}
lc.setIntensity(0, layer*3 + 2);
delay(120);
}
for(int layer=4;layer>0;layer--)
{
for(int r=0;r<8;r++)
{
for(int c=0;c<8;c++)
{
int dist = max(abs(r-3.5), abs(c-3.5));
if(dist <= layer) lc.setLed(0,r,c,true);
else lc.setLed(0,r,c,false);
}
}
lc.setIntensity(0, layer*3 + 2);
delay(120);
}
lc.clearDisplay(0);
delay(150);
}
3、串口显示
无需
四、备注
灯是单色的



1919

被折叠的 条评论
为什么被折叠?



