八乘八點陣顯示器是一種通告點陣方式顯示靜態圖像,或利用類 書角動畫 的方式顯示動畫


八乘八點陣顯示器 的外觀
八乘八點陣顯示器 共有 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
沒有留言 :
張貼留言