arduino nano控制MAX7219-8×8 点阵屏-单色屏

 

一、硬件:

Arduino nano
MAX7219-8×8 点阵屏-单色屏

二、软件:

使用Arduino IDE

三、操作:

1、接线

MAX7219 模块引脚Arduino Nano 引脚功能说明
VCC5V电源正极,不要接 3.3V,亮度不足
GNDGND电源负极,必须共地
DIND11串行数据输入
CLKD13时钟信号
CSD10片选 / 锁存信号

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、串口显示

无需

四、备注

灯是单色的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值