本文為大大維原創,最早於博客園發表,轉載請注明出處!!!
一、前言:
隨着LED的普及,以LED點陣為基礎的顯示設置層出不窮。例如,公交車的線路提示牌、高速公路的信息提示牌,安裝在大樓上的廣告屏幕等。下面,我們將由簡單到復雜地探索各種LED點陣的使用方法,同樣是基於Proteus的arduino仿真,以arduino uno R3為例,包含以下三個實驗:LED點陣顯示表情、LED點陣跑馬燈、回紋燈。具體介紹如下:
二、仿真電路設計:
本次的三個實驗用到的電路連接都是相同的,構建一個電路仿真圖即可,仿真圖如下:

電路圖比較簡單,只需將arduino最小系統引入,並將LED點陣接入arduino各口即可。用到的元器件有:ATMEGA328P、MATRIX-8*8點陣(顏色隨自己喜好選擇即可)、電阻、晶振、電容(同上文的最小電路構造)。
三、實驗代碼及仿真演示
1. LED點陣顯示表情:
A、實驗代碼如下:
#define L1 0
#define L2 1
#define L3 2
#define L4 3
#define L5 4
#define L6 5
#define L7 6
#define L8 7
#define R1 8
#define R2 9
#define R3 10
#define R4 11
#define R5 12
#define R6 13
#define R7 14
#define R8 15
void lighten(int line,int row,int time){
pinMode(line,OUTPUT);
pinMode(row,OUTPUT);
digitalWrite(line,HIGH);
digitalWrite(row,LOW);
delay(time);
digitalWrite(line,LOW);
digitalWrite(row,HIGH);
}
int ledCoord[][2]={
{L3,R2},{L3,R3},{L3,R6},{L3,R7},
{L4,R2},{L4,R3},{L4,R6},{L4,R7},
{L6,R2},{L6,R7},
{L7,R3},{L7,R4},{L7,R5},{L7,R6}};
int leds=sizeof(ledCoord)/sizeof(ledCoord[0]);
int i=0;
void setup(){
}
void loop(){
lighten(ledCoord[i][0],ledCoord[i][1],1);
i++;
if(i>=leds) i=0;
}
B、仿真演示如下:
LED點陣屏上顯示出一個笑臉。

2.LED點陣跑馬燈:
A、實驗代碼如下:
#define L1 0
#define L2 1
#define L3 2
#define L4 3
#define L5 4
#define L6 5
#define L7 6
#define L8 7
#define R1 8
#define R2 9
#define R3 10
#define R4 11
#define R5 12
#define R6 13
#define R7 14
#define R8 15
void lighten(int line,int row,int time){
pinMode(line,OUTPUT);
pinMode(row,OUTPUT);
digitalWrite(line,HIGH);
digitalWrite(row,LOW);
delay(time);
digitalWrite(line,LOW);
digitalWrite(row,HIGH);
}
void setup(){
}
void loop(){
for(int i=L1;i<=L8;i++){
for(int j=R1;j<=R8;j++)
lighten(i,j,500);
}
}
B、仿真演示如下:
在LED點陣上,亮點從左向右,從上向下遍歷。


3.回紋燈
A、實驗代碼如下:
#define L1 0
#define L2 1
#define L3 2
#define L4 3
#define L5 4
#define L6 5
#define L7 6
#define L8 7
#define R1 8
#define R2 9
#define R3 10
#define R4 11
#define R5 12
#define R6 13
#define R7 14
#define R8 15
void lighten(int line,int row,int time){
pinMode(line,OUTPUT);
pinMode(row,OUTPUT);
digitalWrite(line,HIGH);
digitalWrite(row,LOW);
delay(time);
digitalWrite(line,LOW);
digitalWrite(row,HIGH);
}
void setup(){
}
void loop(){
for(int z=0;z<9;z++){
for(int i=0;i<8-2*z;i++)
lighten(L1+z,R1+i+z,50);
for(int i=1;i<8-2*z;i++)
lighten(L1+i+z,R8-z,50);
for(int i=1;i<8-2*z;i++)
lighten(L8-z,R8-i-z,50);
for(int i=1;i<7-2*z;i++)
lighten(L8-i-z,R1+z,50);
}
}
B、仿真演示如下:
亮點循環向中間靠攏。


四、文章中用到的電路圖及代碼:
http://files.cnblogs.com/files/liujw2114/LED%E7%82%B9%E9%98%B5A.7z
