☛ 功能說明

使用 Arduino 開發板透過 SPI 串列介面,控制 8×8 矩陣型 LED 顯示器靜態顯示字元 A。

☛ 使用材料

Arduino UNO R3 開發板 × 1、8×8 共陰極矩陣型 LED 顯示器 ( MAX7219 ) 模組 × 1 。

☛ 電路圖及麵包板接線圖

☛ 程式碼

#include <SPI.h>                             //使用 SPI 函式庫

const int slaveSelect=10;                    //數位接腳 10 接至 MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解码模式暂存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描限制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int displayTest=15;                    //MAX7219 顯示測試暫存器

byte i;                                      //資料指標
const byte character[8]=                     //R1~R8 = MAX7219 (PABCDEFG)
           { B00000000, B11111100,           //C1、C2 (MAX7219 D0、D1)
             B00010010, B00010001,           //C3、C4 (MAX7219 D2、D3)
             B00010001, B00010010,           //C5、C6 (MAX7219 D4、D5)
             B11111100, B00000000 };         //C7、C8 (MAX7219 D6、D7)

void setup()
{
     SPI.begin();                            //初始化 SPI 串列通訊介面
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(displayTest,0);             //關閉 MAX7219 顯示測試
     sendCommand(intensity,1);               //設定 MAX7219 亮度為 1
     sendCommand(scanLimit,7);               //設定 MAX7219 掃描位數為8位
     sendCommand(decodeMode,0);              //設定 MAX7219 不解碼

     for(i=0;i<8;i++)                        //清除顯示暫存器內容
         sendCommand(i+1,0);
}

void loop()
{
     for(i=0;i<8;i++)                        //顯示定義字元 character
         sendCommand(i+1,character[i]);
}

void sendCommand(byte command, byte value)   //輸出16位元命令字元至 MAX7219
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //傳送第一位元組資料至 MAX7219
     SPI.transfer(value);                    //傳送第二位元組資料至 MAX7219
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}

☛ 練習

⑴ 設計 Arduino 程式,使用 Arduino 開發板控制 8×8 矩陣型 LED 顯示器顯示字元 B。

#include <SPI.h>                             //使用 SPI 函式庫

const int slaveSelect=10;                    //數位接腳 10 接至 MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解码模式暂存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描限制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int displayTest=15;                    //MAX7219 顯示測試暫存器

byte i;                                      //資料指標
const byte character[8]=                     //R1~R8 = MAX7219 (PABCDEFG)
           { B00000000, B11111111,           //C1、C2 (MAX7219 D0、D1)
             B10001001, B10001001,           //C3、C4 (MAX7219 D2、D3)
             B10001001, B10001001,           //C5、C6 (MAX7219 D4、D5)
             B01110110, B00000000 };         //C7、C8 (MAX7219 D6、D7)

void setup()
{
     SPI.begin();                            //初始化 SPI 串列通訊介面
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(displayTest,0);             //關閉 MAX7219 顯示測試
     sendCommand(intensity,1);               //設定 MAX7219 亮度為 1
     sendCommand(scanLimit,7);               //設定 MAX7219 掃描位數為8位
     sendCommand(decodeMode,0);              //設定 MAX7219 不解碼

     for(i=0;i<8;i++)                        //清除顯示暫存器內容
         sendCommand(i+1,0);
}

void loop()
{
     for(i=0;i<8;i++)                        //顯示定義字元 character
         sendCommand(i+1,character[i]);
}

void sendCommand(byte command, byte value)   //輸出16位元命令字元至 MAX7219
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //傳送第一位元組資料至 MAX7219
     SPI.transfer(value);                    //傳送第二位元組資料至 MAX7219
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}

 

⑵ 設計 Arduino 程式,使用 Arduino 開發板控制 8×8 矩陣型 LED 顯示器閃爍顯示字元 A。

#include <SPI.h>                             //使用 SPI 函式庫

const int slaveSelect=10;                    //數位接腳 10 接至 MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解码模式暂存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描限制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int displayTest=15;                    //MAX7219 顯示測試暫存器

byte i;                                      //資料指標
const byte character[8]=                     //R1~R8 = MAX7219 (PABCDEFG)
           { B00000000, B11111100,           //C1、C2 (MAX7219 D0、D1)
             B00010010, B00010001,           //C3、C4 (MAX7219 D2、D3)
             B00010001, B00010010,           //C5、C6 (MAX7219 D4、D5)
             B11111100, B00000000 };         //C7、C8 (MAX7219 D6、D7)

void setup()
{
     SPI.begin();                            //初始化 SPI 串列通訊介面
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(displayTest,0);             //關閉 MAX7219 顯示測試
     sendCommand(intensity,1);               //設定 MAX7219 亮度為 1
     sendCommand(scanLimit,7);               //設定 MAX7219 掃描位數為8位
     sendCommand(decodeMode,0);              //設定 MAX7219 不解碼

     for(i=0;i<8;i++)                        //清除顯示暫存器內容
         sendCommand(i+1,0);
}

void loop()
{
     for(i=0;i<8;i++)                        //顯示定義字元 character
         sendCommand(i+1,character[i]);
     delay(200);                             //延遲 200ms
     sendCommand(shutDown,0);                //MAX7219 關閉顯示
     delay(200);                             //延遲 200ms
     sendCommand(shutDown,1);                //MAX7219 開啟顯示
}

void sendCommand(byte command, byte value)   //輸出16位元命令字元至 MAX7219
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //傳送第一位元組資料至 MAX7219
     SPI.transfer(value);                    //傳送第二位元組資料至 MAX7219
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}