2016年8月27日 星期六

Arduino專案_LED矩陣顯示器

由於LED技術發展快速,應用層面也越來越廣。將多顆 LED封裝起來,

便可組成LED矩陣,常見的廣告看板、各式各樣的顯示面板,都採用

LED矩陣型式來完成的。

手邊有二個大小不同的LED矩陣,一個是8*8,一個是5*8。最大的差

異是,8*8的LED矩陣已焊接一顆MAX7219 LED驅動 IC ,只需要三條

數位腳接線即可控制LED矩陣,在使用上方便很多。不然,在麵包板上

要自行連接一堆線材、電容和電阻。















MAX7219 採用一種 Serial Peripheral Interface (序列周邊介面),簡稱

SPI介面。SPI採用四條線連接主機和周邊設備(SS, MOSI, MISO, SCK)。

Arduino的ATmega系列處理器內建了SPI介面,數位10~13腳位即是

SPI介面使用。

MAX7219 LED矩陣模組有5個針腳與Arduino連接,分別是VCC(電源)、

 GNC(接地)、DIN(資料輸入)、CS(晶片選擇)、CLK(時脈)。將DIN接

D11,CS接D10,CLK接D13。

MAX7219有多個暫存器的設定,這裡就不詳述了。它每次接收16位元

資訊,分2區塊包含[ 沒有使用(4位元)、位址(4位元 )]和[ 資料(8位元) ]。

使用陣列來記錄LED的狀態,每1行的8個LED使用一個陣列的元素呈現,

可以用2進位或16進位來表示每1行的數值。

電路連接圖:



程式碼:

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

byte symbol[8] = {0xFC, 0xA1, 0xBF, 0xA1, 0x9E, 0xA0, 0x20, 0x1E};  //16進位格式

const byte NOOP = 0x0;        //各項暫存器設定
const byte DECODEMODE = 0x9;
const byte INTENSITY = 0xA;
const byte SCANLIMIT = 0xB;
const byte SHUTDOWN = 0xC;
const byte DISPLAYTEST = 0xF;

void max7219(byte reg, byte data) {          //自定函數,寫入資料的4個步驟
  digitalWrite(SS, LOW);
  SPI.transfer(reg);
  SPI.transfer(data);
  digitalWrite(SS, HIGH);
}

void setup() {
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);

  SPI.begin();
  max7219 (SCANLIMIT, 7);
  max7219 (DECODEMODE, 0);
  max7219 (INTENSITY, 8);
  max7219 (DISPLAYTEST, 0);
  max7219 (SHUTDOWN, 1);

  for (byte i = 0; i < 8; i++) {
    max7219 (i + 1, 0);
  }
}

void loop() {
  for (byte i = 0; i < 8; i++) {
    max7219 (i + 1, symbol[i]);
  }
}


完成圖1:




完成圖2:













沒有留言:

張貼留言