對于光立方,首先要清楚其工作原理,整個點亮的過程,單片機需要一直工作的,單片機每一次發送的數據只能點亮一層的特性得知,在整個畫面顯示圖案的時候,即使是靜止的圖案,那么單片機也是在不斷循環工作的。如果單片機停止了工作,那么光立方得圖案即會消失。
又由于這個特性,如果點亮某一層后停留的時間不一樣,就會造成每一層的亮度不均勻,所以為了避免這些,需要一個準確的時間基準來依次點亮光立方的每一層,方法有很多,但單片機不能總處理這么一個任務,他可能要處理的還有,動畫的實時運算,其他數據的采集和處理等,所以考慮到這些任務都是需要實時運行的,編程難度似乎加大了不少,這時需要引入單片機中斷這一基礎功能,難題便會迎刃而解。
首先定義一個緩存數組,用于儲存所有的光立方每一點的數據,暫且理解為顯存。我通常用display[8][8]定義為數組。
下面就要定期把這個數組定期發送至驅動板中,時間如何去定義。
我查閱資料后發現,當現實器播放大于15幀的動畫時,才會在我們的眼中形成流暢的效果。那么光立方刷新頻率要大于15hz/s(越大越好,但是越大單片機負載也越大),這里也就是說,每1/15秒就要進行一次全部圖的刷新,又由于在相同時間,只有一層能夠點亮,那么每一層停留的時間就是1/15/8s根據這些規則,我需要定義定時器讓定時器有相應的數值。把這段專門用于刷新光立方顯示的程序放于中斷服務程序中。這樣,我們程序的基礎框架就有了。由于是定時器中斷自動來刷新驅動板數據,這樣我們看到的圖像很穩定,亮度也均勻。而且我們再寫其他的圖案動畫程序時候,不用再去考慮去更新驅動板數據,一切都會由中斷自動完成。而我們如果要更改圖案,我們只需要對數組所儲存的數據進行更改即可,這也使我們的動畫程序很驅動程序產生隔離,這樣做的好處是即使更換了驅動板,那么也只需要對驅動函數(中斷里面的程序)做相應的改動即可,不必再對其他程序改動。這也避免了“動一發而牽全身”的尷尬局面。