[wiki:wade/embedded/arduino 回到 Arduino] {{{ #!c /* * 由 11 pins 控制 8 * 8 矩陣式 led matrix、dot matrix。 */ #define lpin0 0 // 定義 LED 負極腳位 #define lpin1 1 // 定義 LED 負極腳位 #define lpin2 2 // 定義 LED 負極腳位 #define lpin3 3 // 定義 LED 負極腳位 #define lpin4 4 // 定義 LED 負極腳位 #define lpin5 5 // 定義 LED 負極腳位 #define lpin6 6 // 定義 LED 負極腳位 #define lpin7 7 // 定義 LED 負極腳位 #define hpin0 8 // 定義 LED 正極腳位 #define hpin1 9 // 定義 LED 正極腳位 #define hpin2 10 // 定義 LED 正極腳位 #define hpin3 11 // 定義 LED 正極腳位 #define hpin4 12 // 定義 LED 正極腳位 #define hpin5 13 // 定義 LED 正極腳位 #define hpin6 14 // 定義 LED 正極腳位 #define hpin7 15 // 定義 LED 正極腳位 #define row_size 8 // 定義 Matrix row 大小 #define col_size 8 // 定義 Matrix colum 小 #define delay_time 100 // 延遲時間 #define data_A {0, 0, 0, 1, 1, 0, 0, 0,\ 0, 0, 1, 0, 0, 1, 0, 0,\ 0, 0, 1, 0, 0, 1, 0, 0,\ 0, 1, 0, 0, 0, 0, 1, 0,\ 0, 1, 1, 1, 1, 1, 1, 0,\ 0, 1, 0, 0, 0, 0, 1, 0,\ 0, 1, 0, 0, 0, 0, 1, 0,\ 0, 1, 0, 0, 0, 0, 1, 0} #define data_N {0, 1, 0, 0, 0, 0, 1, 0,\ 0, 1, 1, 0, 0, 0, 1, 0,\ 0, 1, 1, 0, 0, 0, 1, 0,\ 0, 1, 0, 1, 0, 0, 1, 0,\ 0, 1, 0, 0, 1, 0, 1, 0,\ 0, 1, 0, 0, 0, 1, 1, 0,\ 0, 1, 0, 0, 0, 1, 1, 0,\ 0, 1, 0, 0, 0, 0, 1, 0} // 所有要顯示字的 array boolean word_array[4][row_size][col_size] = {data_A, data_N, data_C, data_H}; // LED Matrix boolean led[row_size][col_size] ; // 水平方向 led byte col_pin[col_size]={lpin0, lpin1, lpin2, lpin3, lpin4, lpin5, lpin6, lpin7}; // 垂直方向 led byte row_pin[row_size]={hpin0, hpin1, hpin2, hpin3, hpin4, hpin5, hpin6, hpin7}; // 初始設定 void setup() { pinMode(lpin0 , OUTPUT); pinMode(lpin1 , OUTPUT); pinMode(lpin2 , OUTPUT); pinMode(lpin3 , OUTPUT); pinMode(lpin4 , OUTPUT); pinMode(lpin5 , OUTPUT); pinMode(lpin6 , OUTPUT); pinMode(lpin7 , OUTPUT); pinMode(hpin0 , OUTPUT); pinMode(hpin1 , OUTPUT); pinMode(hpin2 , OUTPUT); pinMode(hpin3 , OUTPUT); pinMode(hpin4 , OUTPUT); pinMode(hpin5 , OUTPUT); pinMode(hpin6 , OUTPUT); pinMode(hpin7 , OUTPUT); clear_led(); } // 主程式迴圈 void loop() { // HEX 000 clear_led(); // 將第一個 word 讀入 led word_to_led(0); display_led(led, 1000); 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); } // 將第 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], LOW); for (int i = 0; i < col_size; i++) digitalWrite(col_pin[i], HIGH); } 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 < row_size; i++) { digitalWrite(row_pin[i], HIGH); for (int j = 0; j < col_size; j++) { if (led[i][j] == 1) { digitalWrite(col_pin[j], LOW); //delay(delay_time); } } clear_led(); } } } }}}