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