課程目標(biāo)
- 學(xué)習(xí)點陣屏的原理及應(yīng)用
- 掌握如何編程控制點陣屏
相關(guān)知識
點陣屏: LED點陣屏由多個LED發(fā)光二極管組成,通過控制LED亮滅來顯示文字、圖片、動畫、視頻等,被廣泛應(yīng)用于公共場合做信息展示,如廣告屏、公告牌等。
點陣屏組成及原理: LED點陣屏按照LED發(fā)光顏色可分為單色、雙色、三色燈等,可顯示紅、黃、綠甚至是真彩色。根據(jù)LED的數(shù)量又分為4x4、8x8、16x16等不同類型。這里我們通過單色8x8點陣屏來了解其原理,8x8點陣屏由8行8列共64個LED燈組成,其內(nèi)部結(jié)構(gòu)如下圖:
**外部管腳定義:**8x8點陣屏有16個管腳,將有絲印的一邊朝下,逆時針進行編號。
*內(nèi)部管腳定義:
控制方式: 每個LED放置在行線和列線的交叉點上,當(dāng)對應(yīng)的某一行高電平,某一列低電平,則對應(yīng)交叉點的LED就會點亮。比如我們要點亮第一行第一列LED燈,則給對應(yīng)將點陣屏的第9腳高電平,第13腳低電平,其他LED控制以此類推即可。
電路搭建
所需材料
ArduinoUNO * 1
8*8 LED點陣屏 * 1
杜邦線若干
電路連接
程序編寫
練習(xí)一:繪制第一個圖形
根據(jù)上圖接線方式,編程實現(xiàn)讓LED點陣屏顯示兩個點,并開始閃爍起來。
圖形化方式:
代碼方式:
/* 項目名稱:閃爍的兩個點
* 項目時間:2022.03.03
* 項目作者:MRX
*/
int leds[8] = {1, 2, 5, 7, 8, 9, 12, 14}; //點陣屏正極引腳
int gnds[8] = {3, 4, 6, 10, 11, 13, 15, 16}; //點陣屏負(fù)極引腳
void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //負(fù)極引腳拉高,熄滅所有LED
}
}
void loop() {
digitalWrite(leds[6],HIGH);
digitalWrite(gnds[0],LOW);
digitalWrite(leds[6],HIGH);
digitalWrite(gnds[2],LOW);
delay(100);
digitalWrite(leds[6],LOW);
digitalWrite(gnds[0],HIGH);
digitalWrite(leds[6],LOW);
digitalWrite(gnds[2],HIGH);
delay(100);
}
使用代碼編程的時候,要注意開始要將所有的LED的負(fù)極引腳給高電平,讓所有的LED熄滅。
練習(xí)二:方向指示牌
繪制一個如下圖所示的圖案,在點陣屏上顯示出來。
圖形化方式:
代碼方式:
/* 項目名稱:右箭頭
* 項目時間:2022.03.03
* 項目作者:MRX
*/
int leds[8] = {9, 14, 8, 12, 1, 7, 2, 5}; //點陣屏正極引腳
int gnds[8] = {13, 3, 4, 10, 6, 11, 15, 16}; //點陣屏負(fù)極引腳
int led[8][8] = {//箭頭方陣,1處是亮燈的led
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
//清屏
void ledclean()
{
for (int i = 0; i < 8; i++)//將點陣屏正極ladies,負(fù)極拉高,關(guān)斷顯示
{
digitalWrite(leds[i], LOW);
digitalWrite(gnds[i], HIGH);
}
}
//右箭頭
void rightArrow()
{
for (int i = 0 ; i < 8; i++)
{
digitalWrite(leds[i], LOW);
for (int j = 0; j < 8; j++)
{
digitalWrite(gnds[j], 1-led[i][j]);
}
digitalWrite(leds[i], HIGH);
ledclean();
}
}
void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //負(fù)極引腳拉高,熄滅所有LED
}
}
void loop() {
rightArrow();
}
程序分析:
LED點陣屏是多個LED組合在一起來驅(qū)動,基本的驅(qū)動方式是逐行掃描或者逐列掃描。通過兩個for循環(huán)嵌套來進行操作,外部循環(huán)控制列,內(nèi)部循環(huán)遍歷行,或者外部循環(huán)控制行,內(nèi)部循環(huán)遍歷列。當(dāng)逐行或者逐列掃描足夠快的時候,人眼就會因為視覺暫存而看到同時點亮的效果。
當(dāng)對多塊點陣屏進行操作時,使用IO引腳直接驅(qū)動的方式就顯得不切實際了,一方面這需要占用很多的IO口,另一方面IO驅(qū)動能力畢竟有限,所以點陣屏還有專門的驅(qū)動電路和IC芯片來滿足更高的應(yīng)用要求。后續(xù)我們將會使用到點陣屏模塊來進行新的項目開發(fā)。
-
驅(qū)動電路
+關(guān)注
關(guān)注
153文章
1531瀏覽量
108617 -
IC芯片
+關(guān)注
關(guān)注
8文章
248瀏覽量
26283 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187375 -
LED發(fā)光二極管
+關(guān)注
關(guān)注
0文章
13瀏覽量
6097 -
LED點陣屏
+關(guān)注
關(guān)注
2文章
31瀏覽量
12423
發(fā)布評論請先 登錄
相關(guān)推薦
評論