#include <SPI.h>
#define DATA_PIN 23
#define SS_PIN 5
#define CLK_PIN 18
// 设置图像数组: 由小到大的矩形(4张图片)
byte image[4][8] = {
{0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x3C, 0x24, 0x24, 0x3C, 0x00, 0x00},
{0x00, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x00},
{0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF}
};
// 定义各寄存器的地址,以便于后续控制和初始化
const byte NOOP = 0x0; // 不运行
const byte DECODEMODE = 0x9; // 译码模式
const byte INTENSITY = 0xA; // 显示强度
const byte SCANLIMIT = 0xB; // 扫描限制
const byte SHUTDOWN = 0xC; // 停机
const byte DISPLAYTEST = 0xF; // 显示器检测
void max7219(byte, byte); // 给max7219发送数据
void init(); // 初始化点阵屏
void setup() {
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, LOW);
SPI.begin(); // 启动SPI联机
init(); // 初始化点阵屏的函数
}
void loop() {
for(byte i = 0; i < 4; i++)
{
for(byte j = 0; j < 8; j++)
// 细节:给地址j+1传输数据
max7219(j + 1, image[i][j]);
delay(100);
}
}
void max7219(byte reg, byte data)
{
digitalWrite(SS_PIN, LOW);
// 给特定的寄存器reg,发送特定的数据data
SPI.transfer(reg);
SPI.transfer(data);
digitalWrite(SS_PIN, HIGH);
}
void init()
{
max7219(DECODEMODE, 0);
max7219(SCANLIMIT, 7);
max7219(INTENSITY, 8);
max7219(SHUTDOWN, 1);
max7219(DISPLAYTEST, 0);
for(byte i = 0; i < 8; i++)
max7219(i+1, 0); // 清除点阵屏初始内容
}