光立方由若干個二極管led燈以立方體形式搭建,4*4*4、8*8*8、16*16*16甚至更多,又由單片機、鎖存器、譯碼器等電器元件驅(qū)動,形成立體動畫效果。其中8*8*8光立方最為常見。
例如:8*8*8光立方是由512個發(fā)光二極管按照立方體的方式搭建焊接起來的,有層共陰束共陽和層共陽束共陰兩種方案,每一層有8*8個發(fā)光二極管,共8層。用c語言編譯單片機程序使自定義動畫效果得以實現(xiàn)。
光立方工作原理
光立方簡單講就是用單片機控制很多規(guī)則排列的LED的亮和滅。
1、單個LED的控制方式
先了解單個LED的控制方式,可以是將正極接電源,負(fù)極通過一個限流電阻連接至單片機的某個IO口。IO口輸出低電平時,LED就亮,反之,LED滅。
如果我們想驅(qū)動任意位置的led,我們只需要在該位置led所使用的列線接地,行線接上+V即可。
學(xué)過單片機的朋友們,都知道數(shù)碼管是怎么點亮的,其中有位選和段選之分,通過掃描來實現(xiàn)所有數(shù)碼管能正常工作以實現(xiàn)顯示我們想要的數(shù)字。
點陣也一樣,盡管是8*8的點陣,如果我們讓整體能隨意顯示圖案,那也需要用掃描的方式才能夠?qū)崿F(xiàn),否則,無法實現(xiàn)對其精準(zhǔn)的控制。
所謂掃描,就是說,我們一次只能讓一行排或者一豎排的燈亮。每次只能這么點,8次為一個周期,從左至右依次點一次,那么循環(huán)起來,我們看到的就是完整的圖像了。
2、每一層LED的控制方式
若按照單個LED的控制方式,每個LED需要占用單片機的一個IO口,控制100個LED就需要100個IO口。那么,有沒有一種方式,可以用較少的IO口,控制較多的LED呢?答案是肯定的,這種方法,就是掃描驅(qū)動電路。
2*2掃描驅(qū)動電路
所以一般情況下,光立方的每一層雖然有64個燈,但是我們會有64跟線分別連接到這些燈上,從而實現(xiàn)一次性的對64個燈進(jìn)行控制,通常單片機引腳較少,一般將采用74hc573,74hc595等芯片進(jìn)行拓展。
3、(基于74hc573的)8*8*8光立方LED的控制方式
數(shù)據(jù)通過并行的方式,分別打入每一個74hc573中,再控制器儲存這些數(shù)據(jù),從而實現(xiàn)一層64個燈同時的點亮。下面描述一下一個固定畫面的顯示,所需要硬件執(zhí)行的過程。
1)將第一層64個點的數(shù)據(jù)傳入8個74hc573中,控制uln2803層控制芯片打開第一層開關(guān),使第一層點亮,這個時候,其他層是滅的。
2)等待時間t。
3)熄滅第一層,開始向74hc573中傳輸?shù)诙拥臄?shù)據(jù),鎖存,開啟第二層總控制開關(guān),點亮第二層。
4)等待時間t
熄滅第一層,將第八層的的數(shù)據(jù)傳進(jìn)所有74hc573中,鎖存,開啟第八層總開關(guān),點亮第八層。
再回到第一步,循環(huán)下去。
這樣,便實現(xiàn)了一個周期畫面的顯示,由于人眼的視覺暫留的特性,只要刷新的夠快,我們看到的就是光立方整體都在亮。便實現(xiàn)了我們想要的效果。為了畫面的穩(wěn)定,上面間隔點亮t要保持一致,否則會出現(xiàn)亮度不均的情況。
在實際使用上述電路的時候,最好給74hc573輸出的64個引腳分別加一個限流電阻,這樣能起到很好的二極管保護作用和整體功耗的限制以及亮度的調(diào)節(jié)。
仔細(xì)分析上述控制過程,可以發(fā)現(xiàn)進(jìn)一步節(jié)約IO口的數(shù)量方法。
以16×16的整列為例,若限定16列中,每次只亮一列,就可以用4根IO線加一個4~16譯碼器替代。這樣,就變?yōu)?6+4只有20個IO口了。而行還是保留16根,因為這樣做,可以一次控制1列中的多個LED同時亮。加快掃描進(jìn)度。