Arduino基礎入門篇19—點陣屏
將8個LED發光二極體封裝在一起就組成了數碼管,將更多的LED組合在一起就組成了點陣屏。本篇我們來認識點陣屏,通過Arduino的IO口直接驅動點陣屏來了解其驅動方式。
1. 點陣屏介紹
LED點陣屏由LED發光二極體組成,通過控制LED亮滅來顯示文字、圖片、動畫、視訊等,被廣泛應用於公共場合做資訊展示,如廣告屏、公告牌等。
LED點陣屏按照LED發光顏色可分為單色、雙色、三色燈等,可顯示紅、黃、綠甚至是真彩色。根據LED的數量又分為4x4、8x8、16x16等不同型別。多色點陣屏工藝要求相對較高,需要考慮多種顏色混合時對色彩的影響。這裡我們通過單色8x8點陣屏來了解其原理。

8x8點陣屏
不同點陣屏封裝不同,8x8點陣屏由8行8列共64個LED燈組成,其內部結構如下圖:

8x8內部結構
每個LED放置在行線和列線的交叉點上,當對應的某一行電平拉高,某一列電拉低,則對應交叉點的LED就會點亮。
8x8點陣屏有16個管腳,將有絲印的一邊朝下,逆時針編號為1 8,9 16。

8X8點陣管腳
其對應內部管腳定義如下如所示:

點陣屏管腳定義
比如我們要點亮第一行第一列LED燈,則對應將點陣屏的第9腳拉高,第13腳拉低,其他LED控制以此類推即可。
2. 實驗材料
- Uno R3開發板
- 配套USB資料線
- 麵包板及配套連線線
- 8*8點陣屏
3. 實驗步驟
1. 根據原理圖搭建電路。
根據點陣屏管腳定義,點陣屏的[9, 14, 8, 12, 1, 7, 2, 5]分別連線開發板的[6,11, 5, 9, 14, 4, 15, 2],這8個引腳為LED的正極;
點陣屏的[13, 3, 4, 10, 6, 11, 15, 16]分別連線開發板的[10,16, 17, 7, 3, 8, 12, 13],這8個引腳為LED的負極。
這裡需要注意,Uno R3開發板的A0 A5也可以做普通GPIO使用,編號分別為14 19。
實驗原理圖如下圖所示:

實驗原理圖
實物連線圖如下圖所示:

實驗原理圖
2. 新建sketch,拷貝如下程式碼替換自動生成的程式碼並進行儲存。
/* * Matrix * 點陣屏顯示驅動 */ int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //點陣屏正極引腳 int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //點陣屏負極引腳 void setup() { for (int i = 0; i < 8; i++) { pinMode(leds[i], OUTPUT); pinMode(gnds[i], OUTPUT); digitalWrite(gnds[i], HIGH); //負極引腳拉高,熄滅所有LED } } void ledopen() { for (int i = 0; i < 8; i++)//將點陣屏正極拉高,負極拉低,開啟顯示 { digitalWrite(leds[i], HIGH); digitalWrite(gnds[i], LOW); } } void ledclean() { for (int i = 0; i < 8; i++)//將點陣屏正極ladies,負極拉高,關斷顯示 { digitalWrite(leds[i], LOW); digitalWrite(gnds[i], HIGH); } } //逐列掃描 void ledCol() { for (int i = 0 ; i < 8; i++) { digitalWrite(gnds[i], LOW); for (int j = 0; j < 8; j++) { digitalWrite(leds[j], HIGH); delay(40); } digitalWrite(gnds[i], HIGH); ledclean(); } } //逐行掃描 void ledRow() { for (int i = 0 ; i < 8; i++) { digitalWrite(leds[i], HIGH); for (int j = 0; j < 8; j++) { digitalWrite(gnds[j], LOW); delay(40); } digitalWrite(leds[i], LOW); ledclean(); } } void loop() { ledopen(); //全部開啟 delay(500); ledclean(); //全部關閉 delay(500); ledCol(); //列掃描 ledRow(); //行掃描 }
3. 連線開發板,設定好對應埠號和開發板型別,進行程式下載。

程式下載
4. 實驗現象
LED點陣屏點亮然後熄滅,然後逐列點亮,逐行點亮。

實驗現象
5. 實驗分析
LED點陣屏不過是多個LED組合在一起來驅動,基本的驅動方式是逐行掃描或者逐列掃描。通過兩個for迴圈巢狀來進行操作,外部迴圈控制列,內部迴圈遍歷行,或者外部迴圈控制行,內部迴圈遍歷列,相對操作還是非常簡單的。當逐行或者逐列掃描足夠快的時候,人眼就會因為視覺暫存而看到同時點亮的效果。
當對多塊點陣屏進行操作時,使用IO引腳直接驅動的方式就顯得不切實際了,一方面這需要佔用很多的IO口,另一方面IO驅動能力畢竟有限,所以點陣屏還有專門的驅動電路和IC晶片來滿足更高的應用要求。