久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
ILI9325橫屏顯示程序與解析
[打印本頁]
作者:
電子黑
時(shí)間:
2016-6-29 14:48
標(biāo)題:
ILI9325橫屏顯示程序與解析
源程序請(qǐng)到以下地址下載查看:
STM32_240320_TFTLCD_ILI9325_HX8352_Final.rar
(66.27 KB, 下載次數(shù): 34)
2016-6-29 14:48 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
約定:豎屏?xí)r,Horizontal(Column):X=0~239;Vertical(Row):Y=0~319,原點(diǎn)位置(0,0)為左上角,如下圖:
一、掃描方式
以上文字大意是9325由720個(gè)源極通道和320個(gè)柵極通道組成,為什么是720呢,因?yàn)槊總(gè)像素點(diǎn)由三個(gè)部分組成:R G B ,分別對(duì)應(yīng)紅綠藍(lán)三原色,液晶顯示的原理就是控制三種光色的搭配形成各種顏色 ,720個(gè)Source(240*3=720 ,分布在X軸),320個(gè)Gate驅(qū)動(dòng)分布在Y軸。G和S構(gòu)成像素矩陣,通過掃面輸出G和S信號(hào)就可以在屏幕上顯示信息。
G驅(qū)動(dòng)的掃描方式看寄存器R01和R60H,需要GS與SM配合設(shè)置,SS控制S通道正序或倒序掃描,GS同理,SM控制G通道逐行或隔行掃面。
SS:0為正序,1為倒序
GS:0為正序,1為倒序
實(shí)際測試,豎屏?xí)r,先設(shè)置SM=0,設(shè)置SS=0,GS=0和SS=1,GS=1效果剛好中心對(duì)稱顯示(旋轉(zhuǎn)180);
Sm=0、SS=0不變時(shí),GS由0改為1,則顯示結(jié)果和原圖一Y軸方向軸對(duì)稱,因此看起來圖像上下顛倒了,因?yàn)榈刂穬?nèi)存數(shù)據(jù)雖然沒有改變,但是輸出到屏幕的順序改變了。
GS=0,SS=0時(shí),SM=1時(shí),由于此時(shí)G通道是隔行掃描的,先送G1,G3,……G317,319再從G2,G4掃到G320,就像食堂打飯,本來正常順序是從第一人開始順序打飯,但是如果隊(duì)伍不變,但是隔一個(gè)人打飯,假設(shè)從奇數(shù)個(gè)開始打飯,那么先給所有奇數(shù)個(gè)打飯,之后才給排偶數(shù)的人打飯,這就造成偶數(shù)個(gè)打到的都是剩飯剩菜。但是液晶還有一個(gè)S通道,S通道是順序掃描,兩種效果疊加,所以最終顯示結(jié)果是下半部圖像和上半部調(diào)換并被拉長。故此得出結(jié)論,
SM一定要設(shè)置為0!
二、顯存GRAM地址設(shè)置
本節(jié)要用到的寄存器有R03H,R50 R51 R52 R53共5個(gè)寄存器。
首先要注意的是,ORG=0時(shí),
ILI9325的內(nèi)存地址是不能修改的
,也就是說,內(nèi)存地址0000H始終對(duì)應(yīng)屏幕左上角(0,0),當(dāng)然這是正常情況下的情形,我們可以通過第一節(jié)介紹的的方法控制顯示方式,但即便如此,也只是控制輸出數(shù)據(jù)的順序而已,地址與屏幕的默認(rèn)對(duì)應(yīng)關(guān)系是不可改變的。而
HIMAX奇景光電的HX8352控制器
是可以改變內(nèi)存地址與屏幕的對(duì)應(yīng)關(guān)系的,也就是說可以修改原點(diǎn)(0,0)在屏幕中的位置
R03:此寄存器用于設(shè)置寫入ram時(shí),內(nèi)存地址增加/減少的方向
其中 TRI DFM均默認(rèn)0,不解釋,BGR置為1,BGR為1表示寫入GRAM的數(shù)據(jù)格式是按B G R的順序存放的,設(shè)置錯(cuò)誤圖像會(huì)按照逆序的RGB顏色顯示,若發(fā)現(xiàn)顯示顏色有誤,改BGR為0就好了。
AM:水平/垂直掃描方向選擇,0為水平,1為垂直;
ID:內(nèi)存地址計(jì)數(shù)器(AC)增/減方向,不解釋,看圖;
實(shí)際上AM和ID只對(duì)開辟窗口寫數(shù)據(jù)方式有用,需要結(jié)合R50~R53,一般初始化時(shí)會(huì)給R50~R53設(shè)置為239,319。
下一期將對(duì)橫屏模式作分析,敬請(qǐng)關(guān)注。由于水平有限,有錯(cuò)漏的地方請(qǐng)見諒,敬請(qǐng)斧正。
一、豎屏顯示
要想實(shí)現(xiàn)橫屏顯示,首先要了解豎屏顯示的操作方法,前面說過原點(diǎn)位置(0,0)位于屏幕左上角,對(duì)于ILI9325(0,0)位置也是顯存地址00000H對(duì)應(yīng)的地方,為什么用00000H而不用0H表示呢,因?yàn)镚ram低八位用于表示X軸坐標(biāo),范圍從0~EFH(0~239),高12位用于Y軸地址坐標(biāo),范圍從0~13FH(0~319),所以右下角終點(diǎn)地址是13FEFH。但坐標(biāo)地址并不是連續(xù)的,因?yàn)?3FEFH = 81903,這與屏幕像素點(diǎn)總數(shù)與240*320=76800并不相等,因?yàn)榈桶宋蛔畲笾凳荅FH,但不要緊,這個(gè)問題并不影響操作。默認(rèn)情況下,每次向gram中寫像素?cái)?shù)據(jù),iLI9325的gram地址自動(dòng)先從左到右,再從上到下增加。ILI9325用R20H和R21H兩個(gè)寄存器來確定GRAM地址
所以我們?cè)谀硞(gè)點(diǎn)寫數(shù)據(jù)的過程是:
1.向寄存器R20H,R21H寫像素地址
2.寫一次R22H命令,通知ILI9325準(zhǔn)備接受RGB數(shù)據(jù)
3.寫RGB數(shù)據(jù)
二、劃定窗口連續(xù)寫數(shù)據(jù)
按照第一節(jié)介紹的方法我們發(fā)現(xiàn)如果要在某個(gè)矩形區(qū)域連續(xù)寫同種顏色數(shù)據(jù),每次都需要重新定義GRAM地址,效率很低,實(shí)際上可以通過劃定區(qū)域來向指定窗口區(qū)域中連續(xù)輸入數(shù)據(jù),因?yàn)镚RAM地址會(huì)按照寄存器R03H中的ORG AM ID確定的方向自動(dòng)增/減,而且豎屏的時(shí)候。ORG = 1時(shí),當(dāng)通過50H~53H劃定區(qū)域時(shí),芯片將GRAM地址00000H映射到窗口區(qū)域的某個(gè)頂點(diǎn)(根據(jù)AM、ID的設(shè)置,見下圖中各種模式中字母B的位置就是00000H的位置(Begin)),這樣就可以再橫屏顯示時(shí)也可以劃定區(qū)域連續(xù)填數(shù)據(jù)。
一般情況下,豎屏顯示時(shí)讓ORG = 0,因?yàn)楹芏嗳硕紩?huì)選擇ID = 11,AM=0的模式(下圖中右上角的模式,看字字母"F"的正常情況下的朝向),這樣區(qū)域填充數(shù)據(jù)時(shí)就符合使用者常規(guī)視覺上的理解,不用做坐標(biāo)轉(zhuǎn)換,。此時(shí),因?yàn)镺RG = 0,即使通過R50~53H劃定窗口,
但是00000H依然是在屏幕的左上角,而不是窗口區(qū)域的左上角!
且此時(shí)向R20H R21H寫的地址必須是窗口內(nèi)的地址,否則無效。
橫屏顯示時(shí),令ORG = 1,這樣我們劃區(qū)域時(shí)GRAM起始地址00000H就始終映射到窗口中起點(diǎn)B的位置,此時(shí)地址自增的方向才符合人體視覺上的從左到右,從上到下。我選擇ID = 10 ,AM=1 ,對(duì)應(yīng)下圖中的第二排第二種模式。記得此時(shí)要么SS=1 GS=1,要么SS=0,GS = 0,不懂什么意思請(qǐng)看上一篇。
程序代碼如下:
//設(shè)置光標(biāo)位置
//Xpos:橫坐標(biāo)
//Ypos:縱坐標(biāo)
__inline void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
if(DeviceCode==0X52)
{
LCD_WriteReg(0x02, Xpos>>8);//起點(diǎn)x高八位
LCD_WriteReg(0x03, Xpos); //起點(diǎn)x低八位
LCD_WriteReg(0x06, Ypos>>8);//起點(diǎn)y高八位
LCD_WriteReg(0x07, Ypos); //起點(diǎn)y低八位
}else
if(DeviceCode==0X9325)
{
#if USE_HORIZONTAL == 0
LCD_WriteReg(0x50, Xpos);
LCD_WriteReg(0x51, LCD_W); //把終點(diǎn)定在屏幕右下角,確保Xpos有效,因?yàn)?x50的值必須<0x51的值
LCD_WriteReg(0x52, Ypos);
LCD_WriteReg(0x53, LCD_H);
#else
LCD_WriteReg(0x50, Ypos);
LCD_WriteReg(0x51, 239); //把終點(diǎn)定在屏幕右下角,確保Xpos有效,因?yàn)?x50的值必須<0x51的值
LCD_WriteReg(0x52, 0); //把終點(diǎn)定在屏幕右下角,確保Xpos有效,因?yàn)?x52的值必須<0x53的值
LCD_WriteReg(0x53, 319-Xpos);
#endif
LCD_WriteReg(0x20, 0x0000);
LCD_WriteReg(0x21, 0x0000);
}
LCD_WR_REG(WriteGram); //準(zhǔn)備寫入ram
}
//LCD_SetDomain:設(shè)定窗口區(qū)域?qū)憯?shù)據(jù)
//Xsta , Ysta:起點(diǎn)橫坐標(biāo)和縱坐標(biāo)
//Xend , Yend:終點(diǎn)橫坐標(biāo)和縱坐標(biāo)
void LCD_SetDomain(u16 Xsta, u16 Ysta,u16 Xend, u16 Yend)
{
if(DeviceCode==0X52)//HX8352
{
LCD_WriteReg(0x02, Xsta>>8);//起點(diǎn)x高八位但由于最大值為239,故高八位始終為0,可不寫
LCD_WriteReg(0x03, Xsta); //起點(diǎn)x低八位
LCD_WriteReg(0x04, Xend>>8);//終點(diǎn)x高八位
LCD_WriteReg(0x05, Xend); //終點(diǎn)x低八位
LCD_WriteReg(0x06, Ysta>>8);//起點(diǎn)y高八位
LCD_WriteReg(0x07, Ysta); //起點(diǎn)y低八位
LCD_WriteReg(0x08, Yend>>8);//終點(diǎn)y高八位
LCD_WriteReg(0x09, Yend); //終點(diǎn)y低八位
}
else
if(DeviceCode==0X9325) //ILI9325
{
#if USE_HORIZONTAL == 0
LCD_WriteReg(0x50, Xsta); //水平GRAM起始位置
LCD_WriteReg(0x51, Xend); //水平GRAM終點(diǎn)位置
LCD_WriteReg(0x52, Ysta); //水平GRAM起始位置
LCD_WriteReg(0x53, Yend); //垂直GRAM終點(diǎn)位置
//50h和52h是起點(diǎn),51h和53h是終點(diǎn)
#else
LCD_WriteReg(0x50, Ysta); //水平GRAM起始位置
LCD_WriteReg(0x51, Yend); //水平GRAM終點(diǎn)位置
LCD_WriteReg(0x52, 319-Xend); //垂直GRAM起始位置
LCD_WriteReg(0x53, 319-Xsta); //垂直GRAM終點(diǎn)位置
#endif
LCD_WriteReg(0x20, 0x0000);
LCD_WriteReg(0x21, 0x0000);
}
LCD_WR_REG(WriteGram); //準(zhǔn)備寫入ram
}
在上面代碼中,為什么寫50H~53H寫數(shù)據(jù)時(shí)坐標(biāo)特別呢,因?yàn)樯弦黄f過,ILI9325的GRAM地址與屏幕的對(duì)應(yīng)關(guān)系是不會(huì)改變的,不管怎么設(shè)置50H和51H始終是豎屏?xí)r的橫坐標(biāo),52H和53H始終和豎屏?xí)r的縱坐標(biāo)一樣,這樣一來,只能坐標(biāo)轉(zhuǎn)換了,橫屏?xí)r看上去的坐標(biāo)轉(zhuǎn)換到豎屏的坐標(biāo)圖上去,使(0,0)位置通過程序映射到橫屏?xí)r的左上角,好了,ILI9325的筆記到此為止,摸清了ILI9325,相信其他液晶控制IC也能舉一反三了。
作者:
右走
時(shí)間:
2019-4-23 09:48
很好的資料 正需要
作者:
jinniuxing88888
時(shí)間:
2020-5-22 10:07
謝謝分享!謝謝分享!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久久久电影
|
国产伦精品一区二区三区高清
|
亚洲精品久久久久久久久久吃药
|
欧美不卡视频一区发布
|
国产日韩一区二区
|
国产免费观看久久黄av片涩av
|
精品麻豆剧传媒av国产九九九
|
成人免费视屏
|
日韩成人免费在线视频
|
在线不卡视频
|
一区二区三区中文字幕
|
国产一区二区久久
|
日韩精品免费一区二区在线观看
|
欧美国产日韩精品
|
天天综合网7799精品
|
亚洲一区 中文字幕
|
一级毛片播放
|
亚洲h在线观看
|
www国产成人免费观看视频,深夜成人网
|
午夜免费福利影院
|
一级黄色在线
|
国产精品久久久久久吹潮
|
亚洲一区自拍
|
国产高清一二三区
|
古典武侠第一页久久777
|
久久久久久久久久久一区二区
|
综合久久99
|
一区二区精品
|
在线观看免费av网
|
狠狠的日
|
香蕉视频一区二区
|
欧美在线a
|
国产精品久久久久久久久久免费
|
国产亚洲欧美另类一区二区三区
|
欧美亚洲国语精品一区二区
|
日韩av在线一区
|
日韩高清不卡
|
免费看的av
|
国产精品不卡视频
|
亚洲免费网
|
国产成人精品综合
|