{{{ /* * 由 12 個 digital pins 控制 5*7 矩陣式 LED Matrix,col:掃描,row:data :載入 5x7 字形。 */ #define lpin0 7 // 定義 LED 負極腳位 #define lpin1 8 // 定義 LED 負極腳位 #define lpin2 9 // 定義 LED 負極腳位 #define lpin3 10 // 定義 LED 負極腳位 #define lpin4 11 // 定義 LED 負極腳位 #define lpin5 12 // 定義 LED 負極腳位 #define lpin6 13 // 定義 LED 負極腳位 #define hpin0 2 // 定義 LED 正極腳位 #define hpin1 3 // 定義 LED 正極腳位 #define hpin2 4 // 定義 LED 正極腳位 #define hpin3 5 // 定義 LED 正極腳位 #define hpin4 6 // 定義 LED 正極腳位 #define row_size 7 // 定義 Matrix row 大小 #define col_size 5 // 定義 Matrix colum 小 #define delay_time 1000 // 延遲時間 #define data_A {1, 0, 0, 0, 0,\ 0, 1, 0, 0, 0,\ 0, 0, 1, 0, 0,\ 0, 0, 1, 0, 0,\ 0, 0, 1, 0, 0,\ 0, 0, 0, 1, 0,\ 0, 0, 0, 0, 1} // 0 的字型。 byte data_0[5]={0x03E, 0x051, 0x049, 0x045, 0x03E}; // 所有要顯示字的 array boolean word_array[4][row_size][col_size] = {data_A}; // LED Matrix boolean led[row_size][col_size] ; // 水平方向 led byte row_pin[row_size]={lpin0, lpin1, lpin2, lpin3, lpin4, lpin5, lpin6}; // 垂直方向 led byte col_pin[col_size]={hpin0, hpin1, hpin2, hpin3, hpin4}; // 初始設定 void setup() { for (int i = 0; i <= 13; i++) pinMode(i , OUTPUT); clear_led(); Serial.begin(9600); // for (int j = 0x01; j<=0x80; j <<= 1) // if ((data_0[1] & j) == j) // Serial.println(data_0[0], HEX); // Serial.println(data_0[1], HEX); } // 主程式迴圈 void loop() { // HEX 000 // 將第一個 word 讀入 led clear_led(); hex_word_to_led(); /* word_to_led(1); display_led(led, 1000); word_to_led(3); display_led(led, 1000); word_to_led(2); display_led(led, 1000); */ //delay(delay_time); } void hex_word_to_led() { for(int k = 0; k < col_size; k++) { int j=0; digitalWrite(col_pin[k], HIGH); for (byte i = 1; i != 0; i <<= 1) { if ((data_0[k] & i) == i) { digitalWrite(row_pin[j++], LOW); }else {j++;} } //delay(1); clear_led(); } } // 將第 n 個 word 讀入 led void word_to_led(int n){ for (int i = 0; i < row_size; i++) for (int j = 0; j < col_size; j++) led[i][j] = word_array[n][i][j]; } // 將 led 全關 void clear_led() { for (int i = 0; i < row_size; i++) digitalWrite(row_pin[i], HIGH); for (int i = 0; i < col_size; i++) digitalWrite(col_pin[i], LOW); } // 顯示led void display_led(byte led[row_size][col_size], int continue_time) { for (int k = 0; k < continue_time; k++) { for (int i = 0; i < col_size; i++) { // 將 COL 打開,以 ROW 為資料 digitalWrite(col_pin[i], HIGH); for (int j = 0; j < row_size; j++) { if (led[j][i] == 1) { digitalWrite(row_pin[j], LOW); } } clear_led(); } } } }}}