Hello,大家好,今天我們來討論當(dāng)下非常流行的TFT液晶顯示模組,它最大的特點是可以顯示出效果非常好的彩色信息,絕大多數(shù)手機、液晶顯示器,液晶電視、MID、MP4等產(chǎn)品都在使用它,你想抗拒它的魅力還真的很難。 我們主要討論基于ILI9341的TFT液晶顯示模組,但在正式討論之前,還是得先了解一下TFT液晶顯示器的彩色產(chǎn)生原理,它是基于大家都熟悉的紅(Red)、綠(Green)、藍(lán)(Blue)三原色光混合原理,例如,綠色+紅色=黃色,綠色+藍(lán)色=青色,紅色+藍(lán)色+綠色=白色,如下圖所示: 雖然上圖僅顯示了7種顏色,但是只要我們能夠得到紅、綠、藍(lán)三種顏色(原色),然后調(diào)節(jié)它們的亮度比例,就可以得到你想要的五顏六色,而得到的顏色數(shù)量則稱為色深(Color Depth)。 根據(jù)各原色的調(diào)節(jié)級數(shù)也可以分為很多顏色模式,比較常用的是三原色各占8位,即每種原色有2的8次方(256)種亮度變化,相應(yīng)的色深為256*256*256=16777216(俗稱16兆彩色),我們稱其為RGB888模式。RGB配色通常使用RGB(rr,gg,bb)來表示,例如RGB(0xFF, 0x00, 0x00)表示紅色,RGB(0xFF, 0xFF, 0xFF)表示白色。在進行C源代碼編程時,經(jīng)常會使用宏來定義一些常用的顏色,部分RGB888顏色如下: 當(dāng)然,并不是所有場合都需要這么多顏色,RGB565與RGB666模式也很常用(其它還有RGB332、RGB555等等),相應(yīng)的色深分別為32*64*32=65536(65千色)及64*64*64=262144(262千色)。RGB666模式部分常用顏色的宏定義如下圖所示: 現(xiàn)在的問題是:怎么產(chǎn)生三原色呢?看下圖吧 教堂彩色玻璃上繪有各種人物圖案,每一幅都是一個宗教故事,一些教會本地的傳說也會作為主題出現(xiàn),以這種方式向民眾宣傳教義,也成就了它的藝術(shù)……這位同學(xué)你干嘛呢?在座的其它同學(xué)可都是有志于獻(xiàn)身電子技術(shù)領(lǐng)域,并以“為社會謀求福祉”的目標(biāo)而奮斗著,你要是喜歡講故事瞎扯淡就趕緊學(xué)廚師當(dāng)個裁縫比較好一些….等等,我還沒說完(摔門的聲音響起來了)。 呵呵!宗教那啥的我不太懂,只知道上圖已經(jīng)告訴我們?nèi)绾萎a(chǎn)生三原色,那就是:使用一個紅、綠、藍(lán)色的薄膜對光源進行過濾就可以了。TFT液晶顯示模組中總會有一個白光源(CCFL或LED,此處不贅述,具體原理及相應(yīng)的驅(qū)動電路請參考《顯示器件應(yīng)用精粹》(以下簡稱“顯示器件”)與一片彩色濾光膜。假設(shè)TFT屏當(dāng)前正顯示純白的畫面,你用放大鏡去觀察,會發(fā)現(xiàn)有屏上有很多紅、綠、藍(lán)的方塊,如下圖那樣: 我們把每一個點稱為子像素(SubPixel),三個子像素組成一個顯示像素。對于分辨率為240列320行的TFT屏,它需要240*3=720個列驅(qū)動(320個行驅(qū)動)引腳。每個顯示像素都會對應(yīng)驅(qū)動芯片中顯存(Graphics RAM, GRAM)里的一個地址,分辨率為240*320的TFT屏對應(yīng)的GRAM地址應(yīng)該有240*320=76800個,具體容量為多少則取決于芯片支持的RGB模式。例如,ILI9341有720列320行驅(qū)動輸出,支持RGB565與RGB666模式,按最大位數(shù)(18位)來計算,相應(yīng)的GRAM容量大小應(yīng)該為240*320*18=138240bits(位)=172800bytes(字節(jié)),數(shù)據(jù)手冊標(biāo)記的特點如下圖所示: 我們使用VisualCom軟件平臺中 “基于ILI9341的320X240的TFT液晶顯示模組”來仿真一下,相應(yīng)的效果如下圖所示。 ILI9341的指令比較多,英文數(shù)據(jù)手冊超過200頁,涉及的寄存器數(shù)量也非常龐大,VisualCom軟件平臺按功能相近的原則將其劃分為多個類別。由于這是我們第一次接觸TFT液晶顯示模組,所以先給大家演示如何以最少的指令點亮TFT屏,后續(xù)文章會按類別詳細(xì)討論其它指令功能。 首先我們先注意“屬性”窗口的“高級”組合框中有三個選項,其一為起始頁?!绊摗本褪切?,它與“列”是對GRAM地址的定位方式。ILI9341的GRAM共劃分為320頁,每頁240列。在“單步運行”仿真模式下,“內(nèi)存窗口”可以實時觀察GRAM空間的顯示數(shù)據(jù),但是由于320頁的數(shù)據(jù)量太過龐大,為避免加載時間過慢(不影響單步運行時數(shù)據(jù)的刷新時間,只是當(dāng)重新打開另一個文件或更換器件時,VisualCom軟件平臺需要對當(dāng)前工程的內(nèi)存與寄存器數(shù)據(jù)進行清理的時間比較長),我們限制一次性只能加載8頁內(nèi)存(通常也不需要全部載入),你所需要做的就是指定起頁始。上圖指定的起始頁為32,所以加載的內(nèi)存頁為32~39頁。當(dāng)然,在單步運行時,你可以隨時更改起始頁,內(nèi)存窗口會在下一步運行時進行相應(yīng)的刷新。 假設(shè)現(xiàn)在要求顯示一張圖片,怎么辦?由于ILI9341的GRAM空間太大,如果仍然按以往的方式(預(yù)置數(shù)據(jù))來寫滿GRAM,需要預(yù)置的數(shù)據(jù)至少為76800條,恐怕根本不會有人會這么做,即便像ST7920、KS0108B那樣相對小一點的“黑白”點陣LCD驅(qū)動芯片,通過預(yù)置數(shù)據(jù)來連續(xù)寫入顯存的方式也并不討好。VisualCom軟件平臺當(dāng)然不會只提供半套解決方案,它允許你指定一個.BMP圖像文件對GRAM進行初始化,當(dāng)你運行仿真之后,首先會使用指定的圖片初始化ILI9341的GRAM,爽歪歪! 前面已經(jīng)提過,ILI9341支持RGB565與RGB666兩種像素格式。從“高級”屬性中選擇一種后,你剛才指定的圖片會以相應(yīng)像素格式寫入到GRAM中。需要注意的是:屬性窗口里的“像素格式”只是用來控制圖片初始化到GRAM的顯示數(shù)據(jù),而不是用來設(shè)置ILI9341狀態(tài)的(需要指令,后述)。 好的,現(xiàn)在咱們來看看需要哪些指令才能讓屏幕有所顯示呢?相應(yīng)的預(yù)置數(shù)據(jù)如下圖所示: 乖乖,我們只預(yù)置了兩條指令,它首先退出了睡眠模式,然后打開了顯示。我們來看看數(shù)據(jù)手冊中復(fù)位后的狀態(tài),如下圖所示: 整個表格中,只有“睡眠(Sleep)”與“顯示(Display)”兩項影響屏幕的顯示,ILI9341上電復(fù)位后默認(rèn)處于睡眠模式(Sleep In),并且顯示也是關(guān)閉的(Off)。“空閑(Idle)”模式下是可以顯示的,只不過顯示的顏色比較少(后述),更何況還并不在空閑模式下(Idle Off)。(其它是一些地址設(shè)置或讀寄存器等等,咱們暫時忽略) 睡眠模式是個蝦米東東呢?不知道,還是翻翻數(shù)據(jù)手冊吧!其中有一條“進入睡眠模式”指令,如下圖所示: 哦!原來睡眠模式主要是為了省電,此時內(nèi)部電荷泵升壓(Pump DC/DC Converter)電路(有關(guān)硬件電路原理請參考《顯示器件》)、系統(tǒng)振蕩器都會關(guān)閉(但是已經(jīng)寫入到GRAM的數(shù)據(jù)仍然保持不變),那這個屏幕還顯示個毛線,所以執(zhí)行“退出睡眠模式”指令是讓屏幕能夠顯示GRAM數(shù)據(jù)前必須要做的一步。我們再來看看相應(yīng)的指令,如下圖所示: 可以看到,“退出睡眠”指令為0x11,這也是我們預(yù)置的第一條指令,接下來使用“打開顯示”指令0x29,咱們指定的初始化圖片就顯示出來了。在VisualCom軟件的“寄存器窗口”中,SLEEP與DISPLAY位分別代表相應(yīng)的模式(0為關(guān)閉,1為開啟)。 值得一提的是:ILI9341仿真模型還添加了預(yù)置數(shù)據(jù)處理狀態(tài),在“輸出”窗口的信息欄中可以顯示當(dāng)前預(yù)置數(shù)據(jù)的解析狀態(tài)。例如,我在前述預(yù)置數(shù)據(jù)后再添加一條指令(0x14)與兩條任意數(shù)據(jù),如下圖所示: 由于ILI9341不存在0x14對應(yīng)的指令,所以信息欄中會顯示相應(yīng)指令為無效。同樣,后面跟隨的多個數(shù)據(jù)也是無效的,這樣的實時信息反饋能夠進一步幫助使用者應(yīng)證自己對芯片指令作用的理解(如果指令解析結(jié)果不是你需要的,肯定哪里出錯了,而不像以往那樣只能看屏幕、內(nèi)存、寄存器窗口),相應(yīng)的效果如下圖所示。 那如何往指定的GRAM地址寫入指定的顯示數(shù)據(jù)呢?這與以往ST7920、KS0108B之類的驅(qū)動芯片還有點不太一樣,我們下一期再會吧! |
|
來自: 西北望msm66g9f > 《模電》