☛ 功能說明

使用 Arduino 開發板配合 MAX7219 晶片控制四位數共陰極七段顯示器計數並顯示 0000~9999。 因為 MAX7219 晶片已經內建多工及解碼電路,因此比較容易控制多位數七段顯示器。

☛ 使用材料

Arduino UNO R3 開發板 × 1、電阻 10KΩ × 1、電容 0.1μF 及 10μF × 1、共陰極七段顯示器 5461AS × 1。

☛ 電路圖及麵包板接線圖

☛ 程式碼

#include<SPI.h>                              //使用 SPI 函數庫
const int slaveSelect=10;                    //MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解碼模式暫存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描控制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int dispTest=15;                       //MAX7219 顯示測試暫存器
int number=0;                                //計數值

void setup()
{
     SPI.begin();                            //計數值
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,LOW);          //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(dispTest,0);                //關閉顯示器測試
     sendCommand(intensity,1);               //中等顯示亮度
     sendCommand(scanLimit,7);               //掃描 8 位數
     sendCommand(decodeMode,255);            //使用 MAX7219 內部解碼器
}

void loop()
{
     for(number=0;number<10000;number++)     //計數 0000~9999
     {
         displayNumber(number);              //顯示計數值
         delay(1000);                        //延遲 1 秒
     }
}

void displayNumber(int number)               //顯示函式
{
     sendCommand(1,number/100/10);           //顯示千位數
     sendCommand(2,number/100%10);           //顯示百位數
     sendCommand(3,number%100/10);           //顯示十位數
     sendCommand(4,number%100%10);           //顯示個位數
}

void sendCommand(byte command,byte value)    //MAX7219 設定命令函式
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //寫入命令字元
     SPI.transfer(value);                    //寫入資料字元
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}

 

☛ 練習

⑴ 設計 Arduino 程式,使用 MAX7219 晶片控制四位數共陰極七段顯示器計數並顯示 9999~0000。

#include<SPI.h>                              //使用 SPI 函數庫
const int slaveSelect=10;                    //MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解碼模式暫存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描控制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int dispTest=15;                       //MAX7219 顯示測試暫存器
int number=0;                                //計數值

void setup()
{
     SPI.begin();                            //計數值
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,LOW);          //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(dispTest,0);                //關閉顯示器測試
     sendCommand(intensity,1);               //中等顯示亮度
     sendCommand(scanLimit,7);               //掃描 8 位數
     sendCommand(decodeMode,255);            //使用 MAX7219 內部解碼器
}

void loop()
{
     for(number=9999;number>=0;number--)     //計數 9999~0000
     {
         displayNumber(number);              //顯示計數值
         delay(1000);                        //延遲 1 秒
     }
}

void displayNumber(int number)               //顯示函式
{
     sendCommand(1,number/100/10);           //顯示千位數
     sendCommand(2,number/100%10);           //顯示百位數
     sendCommand(3,number%100/10);           //顯示十位數
     sendCommand(4,number%100%10);           //顯示個位數
}

void sendCommand(byte command,byte value)    //MAX7219 設定命令函式
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //寫入命令字元
     SPI.transfer(value);                    //寫入資料字元
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}

 

⑵ 設計 Arduino 程式,使用 MAX7219 晶片控制四位數共陰極七段顯示器計數並閃爍顯示 9999~0000。

#include<SPI.h>                              //使用 SPI 函數庫
const int slaveSelect=10;                    //MAX7219 致能腳
const int decodeMode=9;                      //MAX7219 解碼模式暫存器
const int intensity=10;                      //MAX7219 亮度控制暫存器
const int scanLimit=11;                      //MAX7219 掃描控制暫存器
const int shutDown=12;                       //MAX7219 關閉模式暫存器
const int dispTest=15;                       //MAX7219 顯示測試暫存器
int number=0;                                //計數值

void setup()
{
     SPI.begin();                            //計數值
     pinMode(slaveSelect,OUTPUT);            //設定數位接腳 10 為輸出模式
     digitalWrite(slaveSelect,LOW);          //除能 MAX7219
     sendCommand(shutDown,1);                //MAX7219 正常工作
     sendCommand(dispTest,0);                //關閉顯示器測試
     sendCommand(intensity,1);               //中等顯示亮度
     sendCommand(scanLimit,7);               //掃描 8 位數
     sendCommand(decodeMode,255);            //使用 MAX7219 內部解碼器
}

void loop()
{
     for(number=9999;number>=0;number--)     //計數 9999~0000
     {
         for(int i=0;i<2;i++)
         {
             displayNumber(number);         //顯示計數值
             delay(200);                    //延遲 200ms
             sendCommand(intensity,0);      //亮度變暗
             displayNumber(number);         //顯示數值
             delay(200);                    //延遲 200ms
             sendCommand(intensity,1);      //中等顯示亮度
         }
     }
}

void displayNumber(int number)               //顯示函式
{
     sendCommand(1,number/100/10);           //顯示千位數
     sendCommand(2,number/100%10);           //顯示百位數
     sendCommand(3,number%100/10);           //顯示十位數
     sendCommand(4,number%100%10);           //顯示個位數
}

void sendCommand(byte command,byte value)    //MAX7219 設定命令函式
{
     digitalWrite(slaveSelect,LOW);          //致能 MAX7219
     SPI.transfer(command);                  //寫入命令字元
     SPI.transfer(value);                    //寫入資料字元
     digitalWrite(slaveSelect,HIGH);         //除能 MAX7219
}