wiki:wade/embedded/arduino/example/example_3

回到 Arduino

/*
 * 由 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();
    }
  }
}

Last modified 14 years ago Last modified on Mar 5, 2010, 2:32:45 PM