Arduino LED點陣之鱷魚爬-0x01

這是Arduino之LED點陣-鱷魚爬系列的第1篇,我在第上一篇專欄給大家簡單的演示了下驅動Hub08點陣的效果,詳見 震驚!全世界最小的鱷魚-0x00。

本篇專欄主要包括以下內容:

  • LED點陣相關的基礎知識
  • HUB08介面介紹

0x01 LED點陣基礎

1.分類

目前X寶上能夠買到的LED點陣單元板很多,如我手上這塊Hub08介面的64x16LED單元半板,但是基本都是業界統一的標準。

64x16單元板

64x16單元板

例如本篇介紹的,就是Hub08介面,當然這裡還有Hub12等等,數字越大,能夠控制的LED點就越多。

除了Hub系列的介面,還有一種常見的是集成了MAX7219晶元的點陣單元板,不過自己玩玩可以,商用的話還是推薦Hub08,比MAX7219穩定。

除了驅動方式的不同,點陣還有表貼與直插之分。

直插的特點就是價廉物美,性價比高,亮度高,適合戶外。

表貼的顧名思義,是在一個個的貼片LED,貼焊到PCB,相比於直插而言,做工更精細。隨著近幾年隨著LED技術的發展,表貼的LED點陣也更多的應用於戶外顯示。

這裡這介紹下X寶上的LED單元板型號是什麼意思,借用一張Google的圖片來說明,比如說F3.75:

點陣單元板介紹

如上圖所示F3.75裡面的3.75代表的是LED燈珠的直徑,一般這種表示方法用於戶內顯示屏。

還有一種表示,例如P4,P5,這裡的P代表的是LED點間距,單位是毫米,P越小,意味著越清晰。

如果只是自己折騰的話,推薦購買F3.0或者F3.75大小的點陣單元板即可。

2.掃描方式

市面上常見的LED點陣單元板的掃描方式有靜態、1/2、1/4、1/8、1/16等。

以我手裡面這塊Hub08來說明,這是一塊1/16掃描方式的點陣。

由於LED顯示屏是逐行刷新顯示的,也就是說在任一確定的時刻我們只能控制其任意一行的顯示,每次刷新顯示一行,16行為一個掃描周期,這就是1/16掃描方式。

那麼如何實現同時顯示很多行呢?小時候玩過翻頁動畫吧?

翻頁動畫

對的,就是這樣,聰明的你肯定知道到了!

只要一個掃描周期的時間低於人眼視覺停留的時間(約0.05秒到0.2秒),呈現在你眼前的就會是一副靜態的畫面。

再提煉一下,其實一次掃描其實就是一幀,就像翻頁動畫的每一頁,如果每頁的圖像不同,當然畫面就動起來了。

不過,一定要注意這裡的停留時間,設置不當,人眼就會觀察到LED顯示屏所呈現的畫面出現閃爍,會閃瞎的。

0x02 Hub08的驅動方式

hub08介面定義

只需要看左邊的圖,右邊是Hub12的。

從上到下,依次是:

GND(接地) LA(行選擇A)

GND(接地) LB(行選擇B)

GND(接地) LC(行選擇C)

EN (使能) LD(行選擇D)

R1 (紅色輸出1) G1(綠色輸出1)

R1 (紅色輸出2) G2(綠色輸出2)

GND(接地) STB(鎖存)

GND(接地) SCK(時鐘同步)

1.行選擇

如果我們要在Hub08上點亮一個(x,y)坐標的LED點,用偽代碼來說明的話應該這樣做:

  1. 先使能,讓OE管腳處於低電平,讓LED點陣能夠被點亮。
  2. 選擇需要點亮的LED點所在行。
  3. 選擇需要點亮的LED所在列。
  4. 將需要點亮的列信息,存儲到點陣屏。
  5. 重複2-4

所以說LA,LB,LC,LD的作用就是行選擇。

由於管腳只能輸出高低電壓,所以行選管腳,只能輸出0,1兩種狀態。

也就是說4個行選管腳,也就可以組合出2^{4} =16種狀態,正好可以代表16行。

例如:

 當管腳LD、LC、LB、LA的輸出分別為0000時,LED顯示屏的第1行被選中;

 當管腳LD、LC、LB、LA的輸出分別為0001時,LED顯示屏的第2行被選中;

 當管腳LD、LC、LB、LA的輸出分別為0010時,LED顯示屏的第3行被選中;

這裡唯一需要注意的是LA代表最低位,LD代表最高位。

現在我們已經知道如何控制LED點陣的每一行了,但是要顯示圖像,漢字,動畫,這還遠遠不夠,還需要對列信號進行控制。

2.列選擇

Hub08 LED顯示屏的列驅動使用了74HC595晶元,該晶元具有8位串列輸入、8位串列/並行輸出,8位鎖存功能。

上述是對於Hub08列選的原理簡介,不過你只需要知道,Hub08上面級聯的74HC595可以保存我們的列選擇信息即可,一個74HC595能夠存儲8列的信息,所以64列需要8個74HC595才能存儲下來。

Hub08裡面的R1,R2,G1,G2就是用來輸出這些列選數據的。

而LBT管腳就是用來發送存儲指令,將列選數據存儲下來的。

對於雙色的64x32點陣屏來說,R1,G1,控制上半個屏幕的紅綠色,R2,G2控制下半個屏幕的紅綠色,當同時輸出R1,G1或者R2,G2的時候,就可以顯示黃色。

64x32單元板

不過我手頭上的是只是紅色的64x16點陣屏幕,R2,G1,G2都是無效的管腳。

0x03 結語

掌握了以上驅動原理,我們就具備了編寫程序所需的基礎了。

貌似篇幅有點長了,Arduino與Hub08介面的連線、編寫代碼就留到下一篇吧。

最後,如果你覺得有意思或者get到了新技能,請點贊,並關注Code雜貨鋪。

謝謝!

:)


推薦閱讀:

做有機玻璃加led屏幕,大家給點建議。?
60~65英寸4K非曲面屏電視三星LG索尼夏普松下的哪個好?
可移動式的無線LED屏幕,造就了這場百人「手推車」式的開場秀
OLED現狀如何?

TAG:Arduino | LED屏 | Android |