全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2256
推到 Plurk!
推到 Facebook!

請教在 2.4 寸 TFT 上顯示內部 FLASH 圖片的方法

答題得分者是:walltsou
PSIR
初階會員


發表:106
回覆:51
積分:31
註冊:2008-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-12-09 13:33:04 IP:210.244.xxx.xxx 訂閱

TFT-LCD 規格:2.4吋
驅動IC:ILI9341
硬體接線:TFT 模組的 D15~D0 接到一個 16bit 的 I/O PORT 的 D15~D0

各位好:

ILI9341 的初始化以及畫點畫線等相關函數都已經完成了,現在想在屏幕上顯示如上圖的一張圖片,
大小是 85 × 113,16 位彩色,其餘選項如圖面上的設定。
轉出來的點陣數據為:85 × 113 × 2(16BPP) = 19120 8個Byte的影像頭數據 = 19218 個元素如下所示:

const unsigned char gImage_flower16bit_H[19218] = {
0X00,0X10,0X55,0X00,0X71,0X00,0X01,0X1B, //8個Byte的影像頭數據
..............................
};

我的問題是,當有包含 8 個Byte的影像頭數據時,這段循環查表的程式要怎麼寫?

假設我已經對 ILI9341 設置好一個 85 × 113 的顯示範圍,
我該怎麼順序抓取資料才能讓點陣數據在屏幕上正確顯示?
因為我的資料輸出是 16 位元,而點陣數據是 8 位元一組,
這意味著我必須抓兩次 8 位元合成一個 16 位元來顯示一個點的顏色值,
能否給我指導我一下具體的程式寫法,謝謝。
ScottWang
版主


發表:32
回覆:486
積分:688
註冊:2009-04-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-12-10 07:30:32 IP:36.229.xxx.xxx 訂閱
這裡有份單色LCD的圖形寫入程式,你可以參考看看.
How to Use a Graphic LCD.
------
高壓模組,高壓直流電源供應器(全範圍可調電壓電流),中低壓直流電源供應器,電壓放大器,
電流放大器,帶通濾波器,高精度參考電壓,標準電壓,恆流源(定電流源),恆壓源(定電壓源),
測試LED專用AC LED定電流源,專門接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,
研究單位實驗設備,另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A.
http://hvpower.myweb.hinet.net/
...Scott Wang...
walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-12-10 14:12:47 IP:124.219.xxx.xxx 訂閱
程式中的文件有寫:

typedef struct _HEADCOLOR
{
unsigned char scan;
unsigned char gray;
unsigned short w;
unsigned short h;
unsigned char is565;
unsigned char rgb;
}HEADCOLOR;
scan、gray、w、h與HEADGRAY結構中的同名成員變數含義相同。
is565: 在4096色模式下為0表示使用[16bits(WORD)]格式,此時影像數據中每個WORD表示一個象素;為1表示使用[12bits(連續位元組流)]格式,此時連續排列的每12Bits代表一個象素。 在16位彩色模式下為0表示R G B顏色分量所占用的位數都為5Bits,為1表示R G B顏色分量所占用的位數分別為5Bits,6Bits,5Bits。在24位彩色和32位彩色模式下is565無效。
rgb: 描述R G B顏色分量的排列順序,rgb中每2Bits表示一種顏色分量,[00]表示空白,[01]表示Red,[10]表示Green,[11]表示Blue。
=======================
你的結果是
scan =0;
gray =16;
w=85
h=113
is565 = yes
rgb 順序從LSB過來為BGR
------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
PSIR
初階會員


發表:106
回覆:51
積分:31
註冊:2008-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-12-10 16:25:29 IP:210.244.xxx.xxx 訂閱
unsigned short send_H;
unsigned short send_L;
unsigned long size;
unsigned long temp=19120; //85 × 113 × 2(16BPP)

for(size=0;size send_H=gImage_flower16bit_H[size]; send_H<<=8; //移到Hi Byte
send_L=gImage_flower16bit_H[ size];
LCD_WR_DATA( send_H | send_L );
}
----------------------------------------------------
我將8個Byte的影像頭數據去掉並寫了一小段程式測試,
這樣寫就行了,不過 Image2lcd 的設定要改成「高位在前」,
我也不知道什麼原因,歡迎大神指導。

PSIR
初階會員


發表:106
回覆:51
積分:31
註冊:2008-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-12-24 16:34:06 IP:210.244.xxx.xxx 訂閱
const unsigned char gImage_flower16bit_H[19218] = { 
0X00,0X10,0X55,0X00,0X71,0X00,0X01,0X1B, //8個Byte的影像頭數據
..............................
};
----------------------------------------------------------------------------------------------------------
ypedef struct _HEADCOLOR
{
unsigned char scan;
unsigned char gray;
unsigned short w;
unsigned short h;
unsigned char is565;
unsigned char rgb;
}HEADCOLOR;
----------------------------------------------------------------------------------------------------------
有關上面的影像頭數據和下面的結構體的關係,有些疑問不太明白。

8個Byte的影像頭數據依序為:0X00,0X10,0X55,0X00,0X71,0X00,0X01,0X1B
0X1B 為 成員 rgb 的值,請問代表什麼意思?

系統時間:2017-10-17 10:05:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!