Arduino 8*8 LED Matrix MAX7219 實習

學習如何學習!

MAX7219 LED Matrix 模組

設備與材料

個人電腦 × 1
arduino Uno × 1
麵包板 × 1
8×8 LED Matrix MAX7219 模組 × 1
連接線 若干

實體接線圖

匯入函式庫

本實習使用 LedControl 程式庫 作控制,你的 Arduino IDE 必需要匯入該程式庫,你可以在 本站下載 (1.0.5) ,或是到 GitHub下載 ,下載後記得匯入程式庫,如果不會匯入可以參考 匯入zip程式庫 這篇說明

LedControl 物件使用說明

* 宣告 LedControl 物件:
LedControl(int dataPin, int clkPin, int csPin, int numDevices);
    int dataPin :  Arduino 資料輸出的 Pin
    int clockPin : 時脈 Clock Pin
    int csPin  : 當資料被送出時選擇的設備 device
    int numDevices : 最多有多少個設備要被控制

* 設定進入省電模式:
shutdown(int addr, bool b);
    int addr :  控制顯示的位址
    boolean b  : 設定為 true,設備進入電力中斷模式,設定為 false 為正常模式

*設定顯示亮度:
setIntensity(int addr, int intensity);
    int addr  :  控制顯示的位址
    int intensity : 顯示器的亮度,介於 0(最暗) 及15(最亮) 之間

*所有LED設定成不顯示:
clearDisplay(int addr);
    int addr :  控制顯示的位址

*設定單一個LED 的亮或滅狀態:
setLed(int addr, int row, int col, boolean state);
    addr : 顯示的位址     row  :  Led的列數 (0..7)
    col :  Led的欄數 (0..7)
    state : 設定為 true,Led為亮,設定為 false,則關閉 Led 顯示

* 設定指定列的8個LED 亮或滅狀態:
setRow(int addr, int row, byte value);
    addr : 顯示的位址
    row :  列的編號 (0..7)
    value : 8 bits 來顯示該列的LED是否為亮,1為亮,0為暗

*設定指定行的8個LED 亮或滅狀態:
setColumn(int addr, int col, byte value);
    addr : 顯示的位址
    col  :  行的編號 (0..7)
    value : 8 bits 來顯示該欄的LED是否為亮,1為亮,0為暗



如果你要顯示下圖 R1C3(列1行3) 那點,你可以打下列指令
lc.setLed(0,1,3,1); // 將Led的列1行3設定為亮

如果你要顯示下圖 C0(行0) 那8個點,你可以打下列指令
lc.setColumn(0,0,B01111110);//將二進制 01111110顯示在 第0個 8x8LED陣列的第0行

如果你要顯示下圖 C1(行1) 那8個點,你可以打下列指令
lc.setColumn(0,1,B10001000);//將二進制 10001000顯示在 第0個 8x8LED陣列的第1行

如果你要顯示下圖 C2(行2) 那8個點,你可以打下列指令
lc.setColumn(0,2,B10001000);//將二進制 10001000 顯示在 第0個 8x8LED陣列的第2行

如果你要顯示下圖 C3(行3) 那8個點,你可以打下列指令
lc.setColumn(0,3,B10001000);//將二進制 10001000 顯示在 第0個 8x8LED陣列的第3行

如果你要顯示下圖 C4(行4) 那8個點,你可以打下列指令
lc.setColumn(0,4,B01111110);//將二進制 01111110 顯示在 第0個 8x8LED陣列的第4行

如果你要顯示下圖 C0~C4(行0~行) 5行,你可以打下列指令

 byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
 for(int j=0;j<5;j++){
    lc.setColumn(0,j,a[j]);
  }

參考程式1

//依序亮每一顆LED 再依序滅每一顆LED
#include "LedControl.h"  //引用 LedControl 程式庫
LedControl lc=LedControl(12,11,10,1);  //宣告 LedControl 物件

void setup() {
  lc.shutdown(0,false);  // 關閉省電模式
  lc.setIntensity(0,0);  // 設定亮度為 0 (介於0~15之間)
  lc.clearDisplay(0);    // 清除螢幕
}

void loop() {
  int col;
  int row;
  for(col=0;col<8;col++){
    for(row=0;row<8;row++){
      lc.setLed(0,row,col,1); // 將Led的列,行設定為亮
      delay(100);      
    }
  }
  for(col=7;col>=0;col--){    
    for(row=7;row>=0;row--){
      lc.setLed(0,row,col,0); // 將Led的列,行設定為暗      
      delay(100);
      
    }
  }
  
}

參考程式2

//依序顯示 a,r,d,u,i,n,o 

#include "LedControl.h"  //引用 LedControl 程式庫
LedControl lc=LedControl(12,11,10,1);  //宣告 LedControl 物件

//字型碼
byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};


void setup() {
  lc.shutdown(0,false);  // 關閉省電模式
  lc.setIntensity(0,0);  // 設定亮度為 0 (介於0~15之間)
  lc.clearDisplay(0);    // 清除螢幕
}

void loop() {
  //顯示 A
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,a[j]);
  }
  delay(500);      

  //顯示 r
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,r[j]);
  }    
  delay(500);      

  //顯示 d
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,d[j]);
  }    
  delay(500);      

  //顯示 u
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,u[j]);
  }    
  delay(500);      

  //顯示 i
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,i[j]);
  }    
  delay(500);      

  //顯示 n
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,n[j]);
  }    
  delay(500);      

  //顯示 o
  for(int j=0;j<5;j++){
    //顯示 0~4 行
    lc.setColumn(0,j,o[j]);
  }    
  delay(500);      
}

功能

請參考 程式1 與 程式2,在 8*8 LED Matrix MAX7219 顯示 E 加上工作崗位號碼一直重複顯示。

假設你的工作崗位是 5
步驟1:顯示 “E” 0.5秒後
步驟2:顯示 “0” 0.5秒後
步驟3:顯示 “5” 0.5秒後
重複 步驟1

相關知識

匯入zip程式庫
8*8 LED Matrix MAX7219
進制表示
自定函數
if 判斷式
if else 判斷式
digitalRead 函式
boolean
陣列
for 迴圈
Arduino 複合運算子
const
Arduino Uno 硬體
int
void
setup 函數
loop 函數
pinMode 函數
digitalWrite 函數
delay 函數

入門
知識
語法
流程
函式
實習

發佈留言