#define DIN 12
#define CS 10
#define CLK 11
// 標準 5x7 字型 A~Z + a~z
const byte font[52][5] = {
// 大寫 A~Z
{0x3E,0x09,0x09,0x09,0x3E}, // A
{0x7F,0x49,0x49,0x49,0x36}, // B
{0x3E,0x41,0x41,0x41,0x22}, // C
{0x7F,0x41,0x41,0x22,0x1C}, // D
{0x7F,0x49,0x49,0x49,0x41}, // E
{0x7F,0x09,0x09,0x09,0x01}, // F
{0x3E,0x41,0x49,0x49,0x7A}, // G
{0x7F,0x08,0x08,0x08,0x7F}, // H
{0x00,0x41,0x7F,0x41,0x00}, // I
{0x20,0x40,0x41,0x3F,0x01}, // J
{0x7F,0x08,0x14,0x22,0x41}, // K
{0x7F,0x40,0x40,0x40,0x40}, // L
{0x7F,0x02,0x0C,0x02,0x7F}, // M
{0x7F,0x04,0x08,0x10,0x7F}, // N
{0x3E,0x41,0x41,0x41,0x3E}, // O
{0x7F,0x09,0x09,0x09,0x06}, // P
{0x3E,0x41,0x51,0x21,0x5E}, // Q
{0x7F,0x09,0x19,0x29,0x46}, // R
{0x46,0x49,0x49,0x49,0x31}, // S
{0x01,0x01,0x7F,0x01,0x01}, // T
{0x3F,0x40,0x40,0x40,0x3F}, // U
{0x1F,0x20,0x40,0x20,0x1F}, // V
{0x7F,0x20,0x18,0x20,0x7F}, // W
{0x63,0x14,0x08,0x14,0x63}, // X
{0x07,0x08,0x70,0x08,0x07}, // Y
{0x61,0x51,0x49,0x45,0x43}, // Z
// 小寫 a~z
{0x20,0x54,0x54,0x54,0x78}, // a
{0x7F,0x48,0x44,0x44,0x38}, // b
{0x38,0x44,0x44,0x44,0x20}, // c
{0x38,0x44,0x44,0x48,0x7F}, // d
{0x38,0x54,0x54,0x54,0x18}, // e
{0x08,0x7E,0x09,0x01,0x02}, // f
{0x0C,0x52,0x52,0x52,0x3E}, // g
{0x7F,0x08,0x04,0x04,0x78}, // h
{0x00,0x44,0x7D,0x40,0x00}, // i
{0x20,0x40,0x44,0x3D,0x00}, // j
{0x7F,0x10,0x28,0x44,0x00}, // k
{0x00,0x41,0x7F,0x40,0x00}, // l
{0x7C,0x04,0x18,0x04,0x78}, // m
{0x7C,0x08,0x04,0x04,0x78}, // n
{0x38,0x44,0x44,0x44,0x38}, // o
{0x7C,0x14,0x14,0x14,0x08}, // p
{0x08,0x14,0x14,0x18,0x7C}, // q
{0x7C,0x08,0x04,0x04,0x08}, // r
{0x48,0x54,0x54,0x54,0x20}, // s
{0x04,0x3F,0x44,0x40,0x20}, // t
{0x3C,0x40,0x40,0x20,0x7C}, // u
{0x1C,0x20,0x40,0x20,0x1C}, // v
{0x3C,0x40,0x30,0x40,0x3C}, // w
{0x44,0x28,0x10,0x28,0x44}, // x
{0x0C,0x50,0x50,0x50,0x3C}, // y
{0x44,0x64,0x54,0x4C,0x44} // z
};
const char text[] = "Hello World"; // 可以輸入大小寫混合字串
byte buffer[300];
int bufLen = 0;
void sendData(byte addr, byte data) {
digitalWrite(CS, LOW);
shiftOut(DIN, CLK, MSBFIRST, addr);
shiftOut(DIN, CLK, MSBFIRST, data);
digitalWrite(CS, HIGH);
}
void clearDisplay() {
for (byte i = 1; i <= 8; i++) {
sendData(i, 0x00);
}
}
void setup() {
pinMode(DIN, OUTPUT);
pinMode(CS, OUTPUT);
pinMode(CLK, OUTPUT);
// 初始化 MAX7219
sendData(0x0F, 0x00);
sendData(0x0C, 0x01);
sendData(0x0B, 0x07);
sendData(0x0A, 0x08);
sendData(0x09, 0x00);
clearDisplay();
// 將字串轉換成 buffer
for (int i = 0; text[i] != '\0'; i++) {
char c = text[i];
if (c >= 'A' && c <= 'Z') {
byte idx = c - 'A';
for (int col = 0; col < 5; col++) buffer[bufLen++] = font[idx][col];
buffer[bufLen++] = 0x00;
} else if (c >= 'a' && c <= 'z') {
byte idx = 26 + (c - 'a');
for (int col = 0; col < 5; col++) buffer[bufLen++] = font[idx][col];
buffer[bufLen++] = 0x00;
} else {
buffer[bufLen++] = 0x00; // 空白或不支援字元
}
}
}
void loop() {
for (int shift = 0; shift < bufLen; shift++) {
for (byte row = 1; row <= 8; row++) {
byte colData = 0;
for (int bit = 0; bit < 8; bit++) {
int pos = shift + bit;
if (pos < bufLen) {
if (buffer[pos] & (1 << (row-1))) {
colData |= (1 << (7-bit));
}
}
}
sendData(row, colData);
}
delay(200);
}
}
留言
張貼留言