uC/GUI是Micrigm 公司推出的用于嵌入式系統(tǒng)的圖形用戶接口(graphics user interface,,GUI)軟件包,,由于uC/GUI完全以ANSI-C編寫(xiě),,因此它與處理器無(wú)關(guān),,可以很方便地移植到不同的操作系統(tǒng)和嵌入式微處理器上,,并可支持不同尺寸的圖形液晶顯示器。它采用層次化的設(shè)計(jì),,功能強(qiáng)大,,移植方便,被廣泛地應(yīng)用于嵌入式領(lǐng)域,,如PDA,、機(jī)頂盒以及DVD NCD播放機(jī)等。本文詳細(xì)介紹了uC/GUI在ARM 內(nèi)核S3C44B0X的移植,。實(shí)踐證明uC/GUI具有良好的實(shí)時(shí)性和穩(wěn)定性以及廣泛的應(yīng)用前景,。
1、硬件連接與液晶顯示原理
本設(shè)計(jì)使用的硬件采用ARM7開(kāi)發(fā)板,液晶模塊為L(zhǎng)78C64,,它是7.8in 256色STN型LCD顯示屏,,分辨率為640×480。
LCD控制器外部接口信號(hào)的定義及其與LCD模塊各信號(hào)之間的對(duì)應(yīng)關(guān)系如下:
(1)VFRAME:LCD控制器與LCD驅(qū)動(dòng)器之間的幀同步信號(hào),。該信號(hào)負(fù)責(zé)指出LCD屏新的一幀開(kāi)始的時(shí)間,。LCD控制器在一個(gè)完整幀顯示完成后立即插入一個(gè)VFRAME信號(hào),并開(kāi)始新一幀的顯示,。該信號(hào)與LCD模塊的YD信號(hào)相對(duì)應(yīng);
(2)VLINE:LCD控制器和LCD驅(qū)動(dòng)器之間的線同步脈沖信號(hào),。該信號(hào)用于將LCD驅(qū)動(dòng)器水平線(行)移位寄存器的內(nèi)容傳送給LCD屏顯示。LCD控制器在整個(gè)水平線(整行)數(shù)據(jù)移入LCD控制器后,,插入一個(gè)VLINE信號(hào),。該信號(hào)與LCD模塊的LP信號(hào)相對(duì)應(yīng);
(3)VCLK:LCD控制器和LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào)。由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,,在VCLK的下降沿被LCD驅(qū)動(dòng)器采樣,。該信號(hào)與LCD模塊的XCK信號(hào)相對(duì)應(yīng);
(4)VM:LCD驅(qū)動(dòng)器的AC信號(hào)。VM信號(hào)被LCD驅(qū)動(dòng)器用于改變行和列的電壓極性,,從而控制像素點(diǎn)的顯示和熄滅,。VM信號(hào)可以與每個(gè)幀同步,也可以與可變數(shù)量的VLINE信號(hào)同步;
(5)VD3~0 LCD:像素點(diǎn)的數(shù)據(jù)輸入端口,。與LCD模塊的D3~0相對(duì)應(yīng):
(6)VD7~4 LCD:像素點(diǎn)的數(shù)據(jù)輸入端口,。與LCD模塊的D7~4相對(duì)應(yīng)。
液晶顯示原理:寫(xiě)滿整個(gè)屏的數(shù)據(jù)稱為1個(gè)“幀”數(shù)據(jù),,YD是幀同步信號(hào),該信號(hào)啟動(dòng)LCD屏的新一幀數(shù)據(jù),。兩個(gè)YD脈沖之間的時(shí)間長(zhǎng)度稱為幀周期,。根據(jù)LCD模塊的特性,刷新時(shí)間為12~14ms,,頻率為70~80Hz,。每一幀包括480個(gè)LP脈沖。LP為行(共480行)數(shù)據(jù)輸入鎖存信號(hào),,也就是行同步脈沖信號(hào),。該信號(hào)啟動(dòng)LCD屏的新一行數(shù)據(jù)。XCK為行數(shù)據(jù)輸入信號(hào),,也就是每1行中像素點(diǎn)數(shù)據(jù)傳輸?shù)臅r(shí)鐘信號(hào),。每組8位的數(shù)據(jù)在XCK的下降沿被輸入鎖存,因此,,每1行包括640×3/8個(gè)XCK脈沖信號(hào),。D0~D7是8位的顯示數(shù)據(jù)輸入信號(hào)。
2、驅(qū)動(dòng)程序設(shè)計(jì)
下面分三步完成液晶的初始化,。
(1)I/O口的初始化
由于采用S3C44B0X的PC接口和PD接口作為L(zhǎng)CD驅(qū)動(dòng)接口,,因此,需要設(shè)置PC接口工作在第3功能狀態(tài)和PD接口工作在第2功能狀態(tài),。
(2)相應(yīng)控制寄存器的設(shè)置方法
S3C44B0X包括一個(gè)LCD控制器時(shí)序發(fā)生器TIMEGEN,, 由它來(lái)產(chǎn)生VFRAM,VLINE,,VCLK和VM 控制時(shí)序,。這些控制信號(hào)由寄存器LCOCON1和LCDCON2進(jìn)行配置。通過(guò)對(duì)寄存器種配置項(xiàng)目的設(shè)置,,TIMEGEN就可以產(chǎn)生適應(yīng)于各種LCD屏的控制信號(hào)了,。
VFRAM和VLINE脈沖的產(chǎn)生是通過(guò)對(duì)LCDCON2寄存器的HOZVAL和LINEVAL進(jìn)行配置來(lái)完成的。每個(gè)域都與LCD的尺寸和顯示模式有關(guān),。
其中,,HOZVAL=(顯示寬度/VD數(shù)據(jù)線位數(shù))-1。
在彩色模式下,,顯示寬度=3×每行的像素點(diǎn)數(shù),。
對(duì)所選的液晶模塊,HOZVAL=(640×3/8)-1;LINEVAL=(顯示寬度)-1,。
對(duì)所選的液晶模塊,,LlNEVAL=480-1。
VCLK信號(hào)的頻率可以通過(guò)LCDCON1寄存器的CLKVAL域來(lái)確定,,即
VCLK=MCLK/(CLKVAL×2)
LCD控制器的最大VCLK頻率為16.5MHz,,幾乎支持所有已有的LCD驅(qū)動(dòng)器。由于上述關(guān)系,,CLKVAL的值決定了VCLK的頻率,。為了確定CLKVAL的值,應(yīng)該計(jì)算一下LCD控制器向VD端口傳輸數(shù)據(jù)的速率,,以便使VCLK的值大于數(shù)據(jù)傳輸?shù)乃俾省?/p>
數(shù)據(jù)傳輸速率的公式為:
數(shù)據(jù)傳輸速率=HS×VS×FR×MV
其中,,HS—LCD的行像素值;VS—LCD的列像素值:FR—幀速率;MV—模式值,這里取8位單掃描,,彩色,。
對(duì)于所選用的液晶模塊:HS=640;VS=480;FR=70Hz:MV=3/8。因此,,數(shù)據(jù)傳輸速率=640×480×70×3/8=8,064,000Hz,。
VCLK值應(yīng)該大于8MHz而小于16MHz,因此,,CLKVAL可以取9~15,。
(3)完整的液晶初始化程序
3.2 uC/GUl移植步驟
在使用uC/GUI時(shí),,可以按照以下幾個(gè)步驟來(lái)進(jìn)行:
(1)按照需要,定制uC/GUI;
(2)指定硬件設(shè)備的地址,,編寫(xiě)接口驅(qū)動(dòng)代碼;
(3)編譯,、鏈接、調(diào)試?yán)映绦?
(4)修改例子程序,,并測(cè)試增加需要的功能;
(5)編寫(xiě)自己的應(yīng)用程序,。
3.3 具體實(shí)現(xiàn)
(1)首先介紹uC/GUI的目錄結(jié)構(gòu)和基本配置。
uC/GUI主要目錄如下:
GUI/ConvertMono 使用黑白顯示設(shè)備時(shí),,所要使用的灰度轉(zhuǎn)換函數(shù)
GUI/ConvertColor 使用彩色顯示設(shè)備時(shí),,使用的色彩轉(zhuǎn)換函數(shù)
GUI/Config 包含了對(duì)uC/GUI進(jìn)行配置的一些文件
GUI/Core uC/GUI核心代碼
GUI/Font uC/GUI與字體相關(guān)的代碼文件
GUI/LCDDriver LCD驅(qū)動(dòng)代碼文件
GUI/MemDev 內(nèi)存設(shè)備支持文件代碼
GUI/Touch 輸入設(shè)備支持的文件代碼
GUI/Widget uC/GU1支持的控件代碼,包括編輯框,、列表框,、按鈕和選擇框等
GUI/WM uC/GUI窗口管理部分代碼
(2)修改uC/GUI,使之適于移植,。
在ADS環(huán)境中新建一個(gè)工程,,將上述gui文件夾下的所有文件加入工程。
將Config文件夾下的3個(gè)文件GUIConf.h,、
GUITouchConf.h和LCDConf.h加入新工程,,如下修改LCDConf.h的內(nèi)容: