#include<SPI.h>
//腳位設定
const byte NOOP = 0x0; //不運作
const byte DECODEMODE = 0x9; //解碼模式
const byte INTENSITY = 0xA; //顯示強度
const byte SCANLIMIT = 0xB; //掃描限制
const byte SHUTDOWN = 0xC; //停機
const byte DISPLAYTEST = 0xF; //顯示器檢測
byte HOR0[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //Horizontal 水平
byte VERA[8]= {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //Vertical 垂直A
//bit reversal
unsigned char reverse(unsigned char b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
// 設定 MAX7219 暫存器資料的自訂函數
void max7219(byte reg, byte data){
digitalWrite(SS, LOW);
SPI.transfer(reg);
SPI.transfer(reverse(data));
digitalWrite(SS, HIGH);
}
void setup() {
pinMode(SS, OUTPUT); //將預設的SS(數位10)腳設成“輸出”
digitalWrite(SS, HIGH); //先在SS腳輸出高電位,表示“尚不選取周邊”
SPI.begin(); //初始化 SPI Bus,啟動SPI連線
max7219 (SCANLIMIT,7); //設定掃描8行
max7219 (DECODEMODE,0); //不使用B字型碼解碼
max7219 (INTENSITY,8); //設定成中等亮度
max7219 (DISPLAYTEST,0); //關閉顯示器測試
max7219 (SHUTDOWN,1); //關閉停模式
}
void out(byte ch[8]){
for(byte i = 0; i < 8; i++){
max7219(i + 1 , ch[i]);
delay(0);
}
delay(1000);
}
void loop() {
for(byte k=0;k<8;k++){
for(byte j=0;j<8;j++){
for(byte i = 0; i < 8; i++){
max7219(j + 1 , VERA[k]);
}
delay(200);
max7219(j+ 1 , HOR0[j]);
}
}
}