"Hello World"可以改成任何字串的完整字母表

 #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);

  }

}


留言