八乘八點陣顯示器是一種通告點陣方式顯示靜態圖像,或利用類 書角動畫 的方式顯示動畫
八乘八點陣顯示器 的外觀
八乘八點陣顯示器 共有 16支引腳
電子迴路元件圖示
引腳編排及用途
後 | 引腳A | 引腳B | 引腳1 | 引腳C | 引腳2 | 引腳D | 引腳E | 引腳3 |
---|---|---|---|---|---|---|---|---|
後 | 引腳4 | 引腳5 | 引腳F | 引腳G | 引腳6 | 引腳H | 引腳7 | 引腳8 |
用途 | 第8行接地 | 第7行接地 | 第2排電源 | 第1行接地 | 第4排電源 | 第6行接地 | 第4行接地 | 第1排電源 |
第5排電源 | 第7排電源 | 第2行接地 | 第3行接地 | 第8排電源 | 第5行接地 | 第6排電源 | 第3排電源 |
引腳編號 | 用途 |
---|---|
A | 第8行 接地線 |
B | 第7行 接地線 |
1 | 第2排 電源線 |
C | 第1行 接地線 |
2 | 第4排 電源線 |
D | 第6行 接地線 |
E | 第4行 接地線 |
3 | 第1排 電源線 |
4 | 第3排 電源線 |
5 | 第6排 電源線 |
F | 第5行 接地線 |
6 | 第8排 電源線 |
G | 第3行 接地線 |
H | 第2行 接地線 |
7 | 第7排 電源線 |
8 | 第5排 電源線 |
LED 位置 (模擬及示範效果)
基本的接駁方法
在下的接駁方法
八乘八點陣顯示器 的正面、前方、右側
八乘八點陣顯示器 的正面、前方、左側
八乘八點陣顯示器 的正面、後方、左側
八乘八點陣顯示器 的正面
跳線 接駁至 Arduino A0號 至 A3號 引腳
跳線 接駁至 Arduino 13號 至 2號 引腳
八乘八點陣顯示器 接駁至 麵包板 上,通過 跳線 接駁至 Arduino
八乘八點陣顯示器 由於佔據比較多空間,一塊麵包板未必有足夠空間安置引腳及跳線
八乘八點陣顯示器 拆解後的線路
點陣顯示器 基本上與 多位七段顯示器 操作上相似
有 8支引腳 為 電源線,控制 8排(橫) LED
有 8支引腳 為 接地線,控制 8行(直) LED
將16支引腳接駁正確,當然是八乘八點陣顯示器所有 LED 都著亮
要讓不同獨位置亮著不同 LED ,同讓不能讓 LED 持續接通電源
需要 不斷接通與切斷對應位置及 LED 的電源
只要 接通與切斷電源的時間比人類視覺更新時間少,在人類視覺上便不會發生 LED 有切斷感覺
自訂圖示示範
const byte ROW_LENGTH = 8; const byte COLUMN_LENGTH = 8; const byte ROW_PINS[ROW_LENGTH] = {13, 12, 11, 10, 9, 8, 7, 6}; const byte COLUMN_PINS[COLUMN_LENGTH] = {5, 4, 3, 2, A0, A1, A2, A3}; const unsigned int INDICES[8] = { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 }; void setup() { for (byte rowPin : ROW_PINS){ pinMode(rowPin, OUTPUT); digitalWrite(rowPin, LOW); } for (byte columnPin : COLUMN_PINS){ pinMode(columnPin, OUTPUT); digitalWrite(columnPin, HIGH); } } void loop() { setSmile(); } void set(byte row, byte columnValue, bool enabled){ digitalWrite(ROW_PINS[row], ((enabled) ? HIGH : LOW)); for (byte c = 0; c < COLUMN_LENGTH; c++){ if ((columnValue & INDICES[c]) > 0){ digitalWrite(COLUMN_PINS[c], ((enabled) ? LOW : HIGH)); } } delayMicroseconds(50); } void set(byte row, byte columnValue){ set(row, columnValue, true); set(row, columnValue, false); } void setSmile() { set(0, INDICES[2] | INDICES[3] | INDICES[4] | INDICES[5]); set(1, INDICES[1] | INDICES[6]); set(2, INDICES[0] | INDICES[2] | INDICES[5] | INDICES[7]); set(3, INDICES[0] | INDICES[7]); set(4, INDICES[0] | INDICES[2] | INDICES[5] | INDICES[7]); set(5, INDICES[0] | INDICES[3] | INDICES[4] | INDICES[7]); set(6, INDICES[1] | INDICES[6]); set(7, INDICES[2] | INDICES[3] | INDICES[4] | INDICES[5]); }
自訂圖示效果
由於 電源線 先由橫排接駁,再由直行到 接地線
例如
- 接通 第一排電源引腳 及 第一行接地引腳,會亮著 第一排第一行 LED
- 接通 第二、四排電源引腳 及 第六行接地引腳,會亮著 第二、四排第六行 LED
- 接通 第三排電源引腳 及 第五、七行接地引腳,會亮著 第三排第五、七行 LED
如果只需要亮著 第一排第一行 及 第八排第八行 的 LED ,根據以上接駁方式,同時會令 第一排第八行 及 第八排第一行 的 LED 都會亮著
(閣下可以到本文的「LED 位置 (模擬及示範效果)」測試)
這種情況與 多位七段顯示器 相同
例如接通 第一排電源引腳 及 第一行接地引腳 亮著 LED 後,截斷 電源引腳 及 接地引腳
極短時間後再接通 第八排電源引腳 及 第八行接地引腳 ,然後同樣截斷 電源引腳 及 接地引腳
不斷高速重覆,便會只會亮著 第一排第一行 及 第八排第八行 的 LED
實際示範效果
|
LED 編排與數字及字母
在下編寫的數字及字母的點陣位置數字及字母示範
在 八乘八點陣顯示器 顯示 0 至 9 及 A 至 Z
走馬燈測試
void setMarquee() { const int IMAGE_COLUMN_LENGTH = 8; unsigned int ROWS[ROW_LENGTH]; ROWS[0] = INDICES[3]; ROWS[1] = ROWS[0] | INDICES[2]; ROWS[2] = ROWS[1] | INDICES[1]; ROWS[3] = ROWS[2] | INDICES[0] | INDICES[4] | INDICES[5] | INDICES[6] | INDICES[7]; ROWS[4] = ROWS[3]; ROWS[5] = ROWS[2]; ROWS[6] = ROWS[1]; ROWS[7] = ROWS[0]; const unsigned int HEX_LENGTH = (1 << IMAGE_COLUMN_LENGTH) - 1; for (int i = -IMAGE_COLUMN_LENGTH; i < IMAGE_COLUMN_LENGTH; i++) { for (unsigned int j = 0; j < 50; j++) { for (unsigned int k = 0; k < ROW_LENGTH; k++) { set(k, ((i < 0) ? (VALUES[k] << -i) : (VALUES[k] >> i)) & HEX_LENGTH); } } delay(1); } }
走馬燈效果
25 FPS 速度捲動的走馬燈效果
總結
八乘八點陣顯示器 共有 64個 LED 燈,如每個 LED 正負極都需要用 2支引腳,即是總共要用 128支引腳 才能控制全部 LED但將 LED 有規律地連接一齊,最後只需要 16支引腳便可以控制 (但內部線路腳仍然很複雜)
這種點陣顯示器的應用範圍很大,非常多公共設施、公共服務都有使用
基本上點陣顯示器上的文字、圖案只需要好像點陣圖一般,根據位置點畫內容,人眼會自動修正偏差便可以傳遞資訊
只是可能需要花大量時間將內容畫成點陣圖
走馬燈效果,最初在下使用逐格點畫的方式製作,當然是非常低效率
最後改寫成以 For Loop 運作,便可以只考慮內容,自行計算捲動效果
附加資料
在下在 TinkerCAD 製作的模擬效果https://www.tinkercad.com/things/geBK5bktiP8
沒有留言 :
張貼留言