最容易扩展的光立方程序设计
光立方的設計有很多不同思路,在此講述一下我的光立方程序設計思路
對象:一個8x8x8的光立方
光立方實體圖片:
底層由64個發光二極管排列成8x8方陣,總共8層,每一層所有發光二極管的陰極連在一起引出,每豎條的發光二極管陽極依次焊接在一起,顯示原理類似數碼管的動態掃描!
程序中構造一個空間立方體,每個發光二極管都可看做是空間中的一個坐標點。就以一個數組表示,該數組為全局變量,如下:
該光立方數組管理512個LED,共64字節大小,512位,每一位代表一個LED,當相應二進制位為1時代表LED亮,為0時代表相應LED滅。建立此光立方數組后很容易想到只要單獨寫一個處理器中斷中或者操作系統線程,其中按一定頻率將該數組數據動態掃描到實體上(這部分涉及到I/O口的操作,不同的處理器這部分操作不同),而其他處理圖形或數字的函數放在其他線程中即可(這部分函數完全脫離硬件),這樣硬件掃描部分和軟件控制部分完全分離互不干擾,思路清晰,也利于后面程序擴展。
在ucos-ii中單獨創建一個線程執行掃描函數:
DisplayPix()函數需要根據實際I/O口編寫,作用是將光立方數組里的數據掃描到實體上。為了保證在處理底層I/O時不被其他線程干擾,我將該線程優先級提到最高,這樣也能保證掃描效果的流暢性。如果你要保證其他任務的實時性,將該線程的優先級調低也可,但是此處就要編寫不可重入代碼或者加互斥鎖。
接下來考慮軟件部分,有兩個函數必須實現,這兩個函數是以后擴展其它函數的基礎。寫好這兩個函數后,加入一些必要的算法可以讓光立方充滿生命,如果要顯示字母或圖形可以用取模軟件生成對應字母的字模數組,以備顯示。
1.設置空間坐標點LED的亮滅狀態SetPix函數
2.讀取空間坐標點的亮滅狀態GetPix函數
/************** 函數:GetPix 參數:(x,y,z)待動作的LED 輸出:LED狀態 說明:讀取對應坐標點LED的狀態 ****************/ INT8S GetPix(INT8S x,INT8S y,INT8S z) {INT8S Pix;Pix = LED8x8x8[z*8+y];Pix &= 1<<x;if(Pix==0)return 0;elsereturn 1; }以上函數并沒有對參數范圍進行檢查,不算嚴格,實際需小心謹慎,確保傳入的參數范圍在實際范圍內,或者最好在函數中對參數進行檢查。
總結
以上是生活随笔為你收集整理的最容易扩展的光立方程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2461):打包发布
- 下一篇: 前端学习(2095):数组里面得方法哪些