繼續玩童芯派,128x128的彩屏應該是童芯派的一大亮點,150元(零售價)的開源硬件帶這么大的彩屏還是很少見的(非常有職業操守,就不對比其他板子了)。
別的不BB了,直接進入正題,先說原理。
原理:
無論是12864的液晶還是1602的液晶,還是彩色的TFT的液晶,原理上是差不多的,只不過一般的黑白液晶是用0和1來顯示一個點,比如0代表不現實,1代表顯示,這樣一堆的點就能夠組合出圖案了。彩屏的原理也一樣,只不過因為要表示彩色,所以不能只用“黑”和“白”來表示,需要用更多的數字區分不同的顏色
總結:將每個點的顏色信息發送到屏幕模塊上,就能顯示圖像了
針對童芯派,童芯派上是128×128個點組成的,即128行,128列,一共128×128個點,如果是用01表示黑白,那么這些點理論上需要128×128×1b的存儲空間(b是小寫的,即bit,位,8b=1B),如果我們要顯示16位的圖像,那么就需要128x128x16b=128x128x2B的空間來存儲這些圖像信息(存儲空間不用太關注,但現實的原理要了解,回頭寫程序用)
程序:
正常傳統的思路是根據液晶的芯片手冊來編寫程序,將每個點的信息寫入到模塊里。這顯然太麻煩了,arduino創客玩家不這么玩,另外官方也提供了底層的驅動庫,我們直接拿來用。
上圖是童芯派庫的目錄文件結構(PIO里截的圖,這樣比較好看),其中lcd.c就是底層驅動,cyberpi.cpp是“邏輯層”驅動,可以理解為cyberpi.cpp是在lcd.c的基礎上將功能進行了進一步封裝。
這次我們需要的函數在cyberpi.cpp中,函數名稱及參數
void CyberPi::set_lcd_pixel(uint8_t x,uint8_t y,uint16_t color)
set_lcd_pixel函數需要3個參數,從上邊講述的原理很容易聯想到x和y分別對應LCD的要顯示點的位置,color就是要顯示圖像對應點的顏色。然后寫個循環將上次用(【工具】TFT彩屏圖片點陣取模工具,Img2Lcd圖片取模軟件,圖片生成c語言頭文件)工具生成的數組循環發給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×第二個變量+第一個變量 } }
其中gImage_IMG16_XHR[]就是用Img2Lcd工具將圖片轉換成的數組,生成的數組是16位的,所以需要將數組的高位和低位組合給data16(16位數據)。因為童芯派屏的方向是“歪”的,所以x、y交換一下位置就行了。
-
顯示
+關注
關注
0文章
439瀏覽量
45168 -
設計測試
+關注
關注
0文章
8瀏覽量
7611
發布評論請先 登錄
相關推薦
評論