基於Proteus仿真的Arduino學習(2)——LED點陣探究A(LED點陣基礎)


本文為大大維原創,最早於博客園發表,轉載請注明出處!!!

 

一、前言:

  隨着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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM