基于uC/GUI的數據顯示系統的設計

發(fā)布時(shí)間:2010-8-19 10:35    發(fā)布者:lavida
關(guān)鍵詞: GUI , 數據顯示
uC/GUI是Micrigm 公司推出的用于嵌入式系統的圖形用戶(hù)接口(graphics user interface,GUI)軟件包,由于uC/GUI完全以ANSI-C編寫(xiě),因此它與處理器無(wú)關(guān),可以很方便地移植到不同的操作系統和嵌入式微處理器上,并可支持不同尺寸的圖形液晶顯示器。它采用層次化的設計,功能強大,移植方便,被廣泛地應用于嵌入式領(lǐng)域,如PDA、機頂盒以及DVD NCD播放機等。本文詳細介紹了uC/GUI在ARM 內核S3C44B0X的移植。實(shí)踐證明uC/GUI具有良好的實(shí)時(shí)性和穩定性以及廣泛的應用前景。  

1、硬件連接與液晶顯示原理  

本設計使用的硬件采用ARM7開(kāi)發(fā)板,液晶模塊為L(cháng)78C64,它是7.8in 256色STN型LCD顯示屏,分辨率為640×480。  

LCD控制器外部接口信號的定義及其與LCD模塊各信號之間的對應關(guān)系如下:  

(1)VFRAME:LCD控制器與LCD驅動(dòng)器之間的幀同步信號。該信號負責指出LCD屏新的一幀開(kāi)始的時(shí)間。LCD控制器在一個(gè)完整幀顯示完成后立即插入一個(gè)VFRAME信號,并開(kāi)始新一幀的顯示。該信號與LCD模塊的YD信號相對應;  

(2)VLINE:LCD控制器和LCD驅動(dòng)器之間的線(xiàn)同步脈沖信號。該信號用于將LCD驅動(dòng)器水平線(xiàn)(行)移位寄存器的內容傳送給LCD屏顯示。LCD控制器在整個(gè)水平線(xiàn)(整行)數據移入LCD控制器后,插入一個(gè)VLINE信號。該信號與LCD模塊的LP信號相對應;  

(3)VCLK:LCD控制器和LCD驅動(dòng)器之間的像素時(shí)鐘信號。由LCD控制器送出的數據在VCLK的上升沿處送出,在VCLK的下降沿被LCD驅動(dòng)器采樣。該信號與LCD模塊的XCK信號相對應;  

(4)VM:LCD驅動(dòng)器的AC信號。VM信號被LCD驅動(dòng)器用于改變行和列的電壓極性,從而控制像素點(diǎn)的顯示和熄滅。VM信號可以與每個(gè)幀同步,也可以與可變數量的VLINE信號同步;  

(5)VD3~0 LCD:像素點(diǎn)的數據輸入端口。與LCD模塊的D3~0相對應:  

(6)VD7~4 LCD:像素點(diǎn)的數據輸入端口。與LCD模塊的D7~4相對應。  

液晶顯示原理:寫(xiě)滿(mǎn)整個(gè)屏的數據稱(chēng)為1個(gè)“幀”數據,YD是幀同步信號,該信號啟動(dòng)LCD屏的新一幀數據。兩個(gè)YD脈沖之間的時(shí)間長(cháng)度稱(chēng)為幀周期。根據LCD模塊的特性,刷新時(shí)間為12~14ms,頻率為70~80Hz。每一幀包括480個(gè)LP脈沖。LP為行(共480行)數據輸入鎖存信號,也就是行同步脈沖信號。該信號啟動(dòng)LCD屏的新一行數據。XCK為行數據輸入信號,也就是每1行中像素點(diǎn)數據傳輸的時(shí)鐘信號。每組8位的數據在XCK的下降沿被輸入鎖存,因此,每1行包括640×3/8個(gè)XCK脈沖信號。D0~D7是8位的顯示數據輸入信號。  

2、驅動(dòng)程序設計  

下面分三步完成液晶的初始化。  

(1)I/O口的初始化  

由于采用S3C44B0X的PC接口和PD接口作為L(cháng)CD驅動(dòng)接口,因此,需要設置PC接口工作在第3功能狀態(tài)和PD接口工作在第2功能狀態(tài)。  

(2)相應控制寄存器的設置方法  

S3C44B0X包括一個(gè)LCD控制器時(shí)序發(fā)生器TIMEGEN, 由它來(lái)產(chǎn)生VFRAM,VLINE,VCLK和VM 控制時(shí)序。這些控制信號由寄存器LCOCON1和LCDCON2進(jìn)行配置。通過(guò)對寄存器種配置項目的設置,TIMEGEN就可以產(chǎn)生適應于各種LCD屏的控制信號了。  

VFRAM和VLINE脈沖的產(chǎn)生是通過(guò)對LCDCON2寄存器的HOZVAL和LINEVAL進(jìn)行配置來(lái)完成的。每個(gè)域都與LCD的尺寸和顯示模式有關(guān)。  

其中,HOZVAL=(顯示寬度/VD數據線(xiàn)位數)-1。  

在彩色模式下,顯示寬度=3×每行的像素點(diǎn)數。  

對所選的液晶模塊,HOZVAL=(640×3/8)-1;LINEVAL=(顯示寬度)-1。  

對所選的液晶模塊,LlNEVAL=480-1。  

VCLK信號的頻率可以通過(guò)LCDCON1寄存器的CLKVAL域來(lái)確定,即  

VCLK=MCLK/(CLKVAL×2)  

LCD控制器的最大VCLK頻率為16.5MHz,幾乎支持所有已有的LCD驅動(dòng)器。由于上述關(guān)系,CLKVAL的值決定了VCLK的頻率。為了確定CLKVAL的值,應該計算一下LCD控制器向VD端口傳輸數據的速率,以便使VCLK的值大于數據傳輸的速率。  

數據傳輸速率的公式為:  

數據傳輸速率=HS×VS×FR×MV  

其中,HS—LCD的行像素值;VS—LCD的列像素值:FR—幀速率;MV—模式值,這里取8位單掃描,彩色。  

對于所選用的液晶模塊:HS=640;VS=480;FR=70Hz:MV=3/8。因此,數據傳輸速率=640×480×70×3/8=8,064,000Hz。  

VCLK值應該大于8MHz而小于16MHz,因此,CLKVAL可以取9~15。  

(3)完整的液晶初始化程序  

C程序  

void LCD_Init_Controler() { rLCDCON1=(0)|(2>22)>1); //256-color,LCDBANK,LCDBASEU rLCDSADDR2=M5D((((U32)frameBuffer256+(SCR_XSIZE*LCD_YSIZE))>>1))|(MVAL經(jīng)過(guò)以上幾步,就完成了液晶的硬件驅動(dòng),下面就是移植軟件包,調用底層驅動(dòng),完成復雜的顯示任務(wù)。  

3、uC/GUI軟件包的移植  

3.1 uC/GUI特點(diǎn)  

(1)支持任何8位、16位和32位的CPU,只要求CPU具有相應的ANSI-C編譯器即可;  

(2)所有硬件接口定義都使用可配置的宏;  

(3)字符、位圖可顯示與LCD的任意點(diǎn),并不限制與字節長(cháng)度的整數倍數地址;  

(4)所有程序在長(cháng)度和速度方面都進(jìn)行了優(yōu)化,結構清晰;  

(5)對于慢速的LCD控制器,可以使用緩沖存儲器減少訪(fǎng)問(wèn)時(shí)間,提高顯示速度。  

3.2 uC/GUl移植步驟  

在使用uC/GUI時(shí),可以按照以下幾個(gè)步驟來(lái)進(jìn)行:  

(1)按照需要,定制uC/GUI;  

(2)指定硬件設備的地址,編寫(xiě)接口驅動(dòng)代碼;  

(3)編譯、鏈接、調試例子程序;  

(4)修改例子程序,并測試增加需要的功能;  

(5)編寫(xiě)自己的應用程序。  

3.3 具體實(shí)現  

(1)首先介紹uC/GUI的目錄結構和基本配置。  

uC/GUI主要目錄如下:  

GUI/ConvertMono 使用黑白顯示設備時(shí),所要使用的灰度轉換函數  

GUI/ConvertColor 使用彩色顯示設備時(shí),使用的色彩轉換函數  

GUI/Config 包含了對uC/GUI進(jìn)行配置的一些文件  

GUI/Core uC/GUI核心代碼  

GUI/Font uC/GUI與字體相關(guān)的代碼文件  

GUI/LCDDriver LCD驅動(dòng)代碼文件  

GUI/MemDev 內存設備支持文件代碼  

GUI/Touch 輸入設備支持的文件代碼  

GUI/Widget uC/GU1支持的控件代碼,包括編輯框、列表框、按鈕和選擇框等  

GUI/WM uC/GUI窗口管理部分代碼  

(2)修改uC/GUI,使之適于移植。  

在A(yíng)DS環(huán)境中新建一個(gè)工程,將上述gui文件夾下的所有文件加入工程。  

將Config文件夾下的3個(gè)文件GUIConf.h、  

GUITouchConf.h和LCDConf.h加入新工程,如下修改LCDConf.h的內容:  

C程序  

/*LCDConf.h*/#ifndef LCDCONF_H #define LCDCONF_H #define LCDG4 //lcd顏色數,必須定義,LCDMONO(單色),LCDG4(四級灰度),LCDG16(16級灰度)#define LCD_XSIZE(640) /* LCD水平分辨率 */#define LCD_YSIZE(480) /* LCD垂直分辨率 */#define LCD BITSPERPIXEL(8) #endif /*LCDC0NF_H*//*以下是S3C44B0X LCD控制器的配置*/#include "..incoption.h" #define SCR_XSIZE (640) //視窗屏幕大小#define SCR_YSIZE (480) #define LCD_XSIZE (640) //液晶屏幕大小#define LCD_YSIZE (480) #define M5D(n)((n)&0x1fffff) #define ARRAY_SIZE_G4(SCR_XSIZE/4*SCR_YSIZE) #define HOZVAL (LCD_XSIZE/4-1) #define HOZVAL_COLOR (LCD_XSIZE*3/8-1) #define LINEVAL (LCD_YSIZE-1) #define MVAL (13) #define CLKVAL_G4 (10) #define MVAL_USED 0 #endif /*LCDCONF_H */  

(3)加載LCD驅動(dòng)。  

LCD驅動(dòng)程序如前面所述,保存在lcd44b0.c中。出了底層的初始化函數LCD_Init_Controler()以外,還需要做以下修改,這里只提關(guān)鍵部分。  

主要進(jìn)行相關(guān)的寄存器配置,以及和GUI的接口程序。這里只提及關(guān)鍵部分。  

① 定義顯示緩沖區時(shí)使用的char數據類(lèi)型,它是8bit的:  

unsigned char Bmp[ARRAY_SIZE_G16];//液晶顯示緩沖數組  

② 定義讀寫(xiě)緩沖區時(shí)使用的數據類(lèi)型,也是8bit的U8:  

#define LCD_READ_MEM (Off)*((U8*)(frameBuffer256+(((U32)(Off)))))  

#define LCD_WRRITE_MEM(Off,data)*((U8*)frameBuffer256+(((U32)(Off)))))=data  

#define LCD_WRITE_REG(Off,data)  

⑧ 定義液晶總線(xiàn)寬度定義位8bit:  

#ifndef LCD_BUSWIDTH  

#define LCD_BUSWIDTH(8)  

#endif  

④ 定義字節順序:  

#define LCD_SWAP_BYTE_ORDER(0)  

至此uC/GUI的移植基本上已經(jīng)完成了。當然這里只提供了移植的關(guān)鍵部分,更多更完整的移植還需要做不少的工作,如觸控屏的移植、鍵盤(pán)鼠標的移植以及中文字體的移植等。詳情請參閱uC/GUI手冊中Getting Started一章。  

4、數據顯示程序設計  

數據顯示程序主要是基于uC/GUI平臺的GUI函數庫,完成字符、曲線(xiàn)的繪制。與畫(huà)線(xiàn)相關(guān)的GUI函數有:  

GUI DrawHLine()  

原型:void GUI_DrawLine(int x0,int y0,int x1,int y1);  

其中,x0、y0、x1、y1分別為UGI坐標系下的起點(diǎn)和終點(diǎn)的橫坐標和縱坐標。  

GUI DispDec()  

原型:void GUI_DispDec(I32 v,U8 Len);  

其中,v為要顯示的十進(jìn)制變量值,Len為要顯示的數據的位數。  

5、總結  

本文主要介紹了基于A(yíng)RM7內核S3C44B0X和L78C64液晶模塊硬件平臺的uC/GUI的移植,以及在工程上的應用,經(jīng)過(guò)實(shí)際應用發(fā)現,uC/GUI功能強大,響應迅速,穩定性高,具有廣泛的應用前景。
本文地址:http://selenalain.com/thread-22341-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页