| Version 3 (modified by wade, 16 years ago) (diff) |
|---|
/*
* 由 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();
}
}
}
Attachments (1)
- ascii.pdf (26.2 KB) - added by wade 13 years ago.
Download all attachments as: .zip
