Basic Tutorial for Arduino, 進階篇, 顯示器模組

【Arduino進階教學】MAX7219 8×8 LED 點陣顯示模組:SPI 3 線接線、LedControl 函式庫與動態文字圖案繪製實作

一、 實驗說明:為什麼選擇 MAX7219 8×8 LED 點陣顯示器?

在 Arduino 專題中,若要製作動態表情圖案、方向指示箭頭或文字動畫,單顆 LED 燈或液晶螢幕往往無法滿足大面積的點陣視覺效果。MAX7219 8×8 LED 點陣模組 是最熱門的首選!

核心技術與軟體架構

  1. 高效能串列驅動: MAX7219 是一顆整合型的共陰極 LED 顯示驅動晶片,內建靜態 RAM 與掃描線路。

  2. 超省引腳 SPI 介面: 傳統 8×8 點陣需要 16 根 Pin 腳,透過 MAX7219 轉換後僅需 3 根控制線(DIN、CS、CLK) 即可完整控制 64 顆 LED 燈。

  3. 靈活的陣列控制: 搭配 LedControl 函式庫,只要將 的點陣圖形轉換為 Byte 陣列,即可輕鬆寫入並呈現各種圖案與文字。

二、 🛠️ 必備軟體神器:超簡單 LED Matrix 圖形編輯工具 (PixeltoMatrix)

在手動編寫 8×8 點陣圖案的 Byte 陣列時,計算十六進位 (Hex) 常常讓人頭大。在開始寫程式之前,推薦使用 PixeltoMatrix 超簡單點陣圖形編輯工具(或線上 LED Matrix Editor)!

  • PixeltoMatrix編輯工具:下載

圖形編輯工具特點與使用步驟:

  1. 點選像素繪圖: 開啟編輯器後,直接在 的方格畫面上點擊滑鼠,即可勾選要亮燈的 LED 點位。

  2. 自動生成 Code: 編輯完成後,工具會自動生成 Arduino 可用的 16 進位 (Hex) 或 2 進位 (Bin) 陣列代碼。

  3. 快速複製套用: 直接將產生的 0x3C, 0x42... 陣列數值複製貼上至程式碼中的 byte 陣列(如範例中的 smile[8]、love_1[8] 等),即可繪製出屬於你自己的自訂表情與圖標!

PixeltoMatrix 點陣編輯工具繪製愛心圖案並產生 16 進位程式碼示意圖

圖: 使用 PixeltoMatrix 點陣編輯工具(Form1)繪製愛心圖案後,點擊「Generate」按鈕即可在輸出視窗(Form2)自動轉換出對應的二進位與十六進位(0x00, 0x66…)代碼陣列。

三、 實驗所需材料與電路接線圖 (Hardware Setup)

請依照下表將 MAX7219 點陣模組連接至 Arduino Uno。

⚠️ 注意事項: 市售 MAX7219 模組接線順序可能有所不同,接線前請務必確認模組上的腳位標示(VCC、GND、DIN、CS、CLK),避免接錯導致模組不亮。

🛒 準備材料

  • Arduino Uno R3 開發板 x 1

  • USB 傳輸線 x 1

  • MAX7219 8×8 LED 點陣顯示模組 x 1

  • 杜邦線 若干

▼購買MAX7219 8X8點矩陣顯示模組:

MAX7219 8X8 LEDs matrix 點矩陣顯示

🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

⚡ 腳位對接說明 (Pin Mapping)

MAX7219 模組腳位功能說明Arduino Uno 對應引腳
VCC電源正極 (5V)5V
GND電源接地GND
DIN (Data In)序列資料輸入線D12
CS (LOAD)晶片選擇 / 載入線D11
CLK (Clock)序列時脈線D10

四、 必備函式庫安裝步驟

編譯程式碼前,請先透過 Arduino IDE 的程式庫管理員安裝套件:

  1. 開啟 Arduino IDE,點選上方選單 草稿碼 (Sketch) > 匯入程式庫 (Include Library) > 管理程式庫 (Manage Libraries)。

  2. 在搜尋欄輸入 「LedControl」。

  3. 找到 LedControl 函式庫並點擊 「安裝 (Install)」 即可。

 

五、 程式碼實作範例

🔹 完整範例程式碼:圖案動畫與 mirotek 字母輪播

本範例完全保留原文章之程式結構與陣列定義,透過 LedControl 控制第 12、11、10 腳位,依序顯示微笑、愛心、前後左右箭頭,並調用 printLetter() 逐字顯示 m-i-r-o-t-e-k 品牌名稱。

#include <LedControl.h> 

int DIN = 12;
int CS =  11;
int CLK = 10;

byte m[8]=     {0xE7,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0xC3};  //英文字母m
byte i[8]=     {0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10};  //英文字母i
byte r[8]=     {0x00,0x00,0x2c,0x32,0x20,0x20,0x20,0x20};  //英文字母r
byte o[8]=     {0x00,0x00,0x1c,0x22,0x22,0x22,0x22,0x1c};  //英文字母o
byte t[8]=     {0x00,0x00,0x10,0x7e,0x10,0x10,0x14,0x18};  //英文字母t
byte e[8]=     {0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e};  //英文字母e
byte k[8]=     {0x00,0x20,0x20,0x24,0x28,0x30,0x28,0x24};  //英文字母k

byte smile[8]=   {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};  //微笑
byte love_1[8]=   {0x00,0x66,0x99,0x81,0x42,0x24,0x18,0x00}; //愛心-1
byte love_2[8]=   {0x00,0x66,0xff,0xff,0x7e,0x3c,0x18,0x00}; //愛心-2

byte Front[8]=   {0x08,0x1c,0x3e,0x7f,0x1c,0x1c,0x1c,0x1c};   //前
byte back[8]=    {0x1c,0x1c,0x1c,0x1c,0x7f,0x3e,0x1c,0x08};   //後
byte left[8]=    {0x10,0x30,0x7f,0xff,0x7f,0x30,0x10,0x00};   //左
byte right[8]=   {0x08,0x0c,0xfe,0xff,0xfe,0x0c,0x08,0x00};   //右

LedControl lc=LedControl(DIN,CLK,CS,0);

void setup(){
 lc.shutdown(0,false);       //The MAX72XX is in power-saving mode on startup
 lc.setIntensity(0,15);      // Set the brightness to maximum value
 lc.clearDisplay(0);         // and clear the display
}

void loop(){ 

    printByte(smile);
    delay(1000);

    printByte(love_1);    
    delay(1000);

    printByte(love_2);    
    delay(1000);

    printByte(Front);    
    delay(1000);

    printByte(back);    
    delay(1000);

    printByte(left);    
    delay(1000);

    printByte(right);    
    delay(1000);
    
    printLetter();
    
   
    lc.clearDisplay(0);
    
    delay(1000);
}

void printLetter()
{
  printByte(m);
  delay(1000);
  printByte(i);
  delay(1000);
  printByte(r);
  delay(1000);
  printByte(o);
  delay(1000);
  printByte(t);
  delay(1000);
  printByte(e);
  delay(1000);
  printByte(k);
  delay(1000);
}

void printByte(byte character [])
{
  int i = 0;
  for(i=0;i<8;i++)
  {
    lc.setRow(0,i,character[i]);
  }
}

 

六、 常見問題與除錯 (FAQ)

Q1:上傳程式碼後,8×8 點陣面板完全不亮?

  • 解答:

    1. 請確認 lc.shutdown(0, false); 是否有正常執行(預設啟動時 MAX7219 會處於省電關閉模式)。

    2. 請檢查 DIN、CS、CLK 腳位是否精準對應至 Arduino 的 D12、D11、D10 腳位。

Q2:點陣顯示的圖案是旋轉 90 度或是左右顛倒的?

  • 解答: 這是因為市售 8×8 點陣模組內部的 LED 矩陣腳位方向不同。您可以將 lc.setRow(0, i, character[i]); 改為 lc.setColumn(0, i, character[i]);,或者重新調整 Byte 陣列中的十六進位數值即可轉正圖案。

Q3:如何使用點陣圖形編輯工具生成自己的圖案?

  • 解答: 開啟 PixeltoMatrix 或線上 LED Matrix Editor,用滑鼠點繪圖案後複製產生的十六進位碼(如 0x3C, 0x42...),貼上取代程式碼中的 byte 陣列內容即可!

🔗 延伸閱讀與推薦課程

📟 經典顯示模組控制: 【Arduino進階教學】LCD 1602 I2C 顯示模組:4線快速接線、位址檢測與程式碼範例

👈 上一篇: 【Arduino進階教學】LCD 2004 I2C 顯示器模組:20×4 大螢幕 4 線接線、LiquidCrystal_I2C 函式庫下載與自訂符號繪製實作

👉 下一篇: 【Arduino進階教學】SSD1306 0.96吋 OLED 顯示器模組:I2C 接線、位址檢測、Adafruit GFX 繪圖與雙程式範例實作

📘 總索引: Arduino 新手學習必讀經典 – 快速索引頁面

 

 

 

 

相關文章