繼續(xù)玩童芯派,128x128的彩屏應(yīng)該是童芯派的一大亮點(diǎn),150元(零售價(jià))的開(kāi)源硬件帶這么大的彩屏還是很少見(jiàn)的(非常有職業(yè)操守,就不對(duì)比其他板子了)。
別的不BB了,直接進(jìn)入正題,先說(shuō)原理。
原理:
無(wú)論是12864的液晶還是1602的液晶,還是彩色的TFT的液晶,原理上是差不多的,只不過(guò)一般的黑白液晶是用0和1來(lái)顯示一個(gè)點(diǎn),比如0代表不現(xiàn)實(shí),1代表顯示,這樣一堆的點(diǎn)就能夠組合出圖案了。彩屏的原理也一樣,只不過(guò)因?yàn)橐硎静噬圆荒苤挥谩昂凇焙汀鞍住眮?lái)表示,需要用更多的數(shù)字區(qū)分不同的顏色
總結(jié):將每個(gè)點(diǎn)的顏色信息發(fā)送到屏幕模塊上,就能顯示圖像了
針對(duì)童芯派,童芯派上是128×128個(gè)點(diǎn)組成的,即128行,128列,一共128×128個(gè)點(diǎn),如果是用01表示黑白,那么這些點(diǎn)理論上需要128×128×1b的存儲(chǔ)空間(b是小寫的,即bit,位,8b=1B),如果我們要顯示16位的圖像,那么就需要128x128x16b=128x128x2B的空間來(lái)存儲(chǔ)這些圖像信息(存儲(chǔ)空間不用太關(guān)注,但現(xiàn)實(shí)的原理要了解,回頭寫程序用)
程序:
正常傳統(tǒng)的思路是根據(jù)液晶的芯片手冊(cè)來(lái)編寫程序,將每個(gè)點(diǎn)的信息寫入到模塊里。這顯然太麻煩了,arduino創(chuàng)客玩家不這么玩,另外官方也提供了底層的驅(qū)動(dòng)庫(kù),我們直接拿來(lái)用。
上圖是童芯派庫(kù)的目錄文件結(jié)構(gòu)(PIO里截的圖,這樣比較好看),其中l(wèi)cd.c就是底層驅(qū)動(dòng),cyberpi.cpp是“邏輯層”驅(qū)動(dòng),可以理解為cyberpi.cpp是在lcd.c的基礎(chǔ)上將功能進(jìn)行了進(jìn)一步封裝。
這次我們需要的函數(shù)在cyberpi.cpp中,函數(shù)名稱及參數(shù)
void CyberPi::set_lcd_pixel(uint8_t x,uint8_t y,uint16_t color)
set_lcd_pixel函數(shù)需要3個(gè)參數(shù),從上邊講述的原理很容易聯(lián)想到x和y分別對(duì)應(yīng)LCD的要顯示點(diǎn)的位置,color就是要顯示圖像對(duì)應(yīng)點(diǎn)的顏色。然后寫個(gè)循環(huán)將上次用(【工具】TFT彩屏圖片點(diǎn)陣取模工具,Img2Lcd圖片取模軟件,圖片生成c語(yǔ)言頭文件)工具生成的數(shù)組循環(huán)發(fā)給LCD就行了
for(int y=0;y<128;y++) { for(int x=0;x<128;x++) { picL = gImage_IMG16_XHR[128*x*2+2*y+1];//低位 在后 picH = gImage_IMG16_XHR[128*x*2+2*y];//高位 在前 data16 = picL|picH<<8; cyber.set_lcd_pixel(y,x,data16);//底層是128×第二個(gè)變量+第一個(gè)變量 } }
其中g(shù)Image_IMG16_XHR[]就是用Img2Lcd工具將圖片轉(zhuǎn)換成的數(shù)組,生成的數(shù)組是16位的,所以需要將數(shù)組的高位和低位組合給data16(16位數(shù)據(jù))。因?yàn)橥九善恋姆较蚴恰巴帷钡?,所以x、y交換一下位置就行了。
-
顯示
+關(guān)注
關(guān)注
0文章
439瀏覽量
45170 -
設(shè)計(jì)測(cè)試
+關(guān)注
關(guān)注
0文章
8瀏覽量
7611
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論