<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > uCGUI 移植到S3C44B0X實(shí)驗(yàn)

          uCGUI 移植到S3C44B0X實(shí)驗(yàn)

          作者: 時(shí)間:2010-01-25 來源:網(wǎng)絡(luò) 收藏

          一、目的

          本文引用地址:http://www.ex-cimer.com/article/152124.htm

          1. 初步掌握底層硬件驅(qū)動(dòng)函數(shù);

          2. 掌握將到ARM S3C44BOX上的方法和步驟。


          二、內(nèi)容

          到ARM處理器S3C44BOX上,并編寫Hello World程序,在Micetek 44B0平臺(tái)的LCD上顯示“Hello World!”字符串,在LCD顯示平面坐標(biāo)(20,20)處,顯示一個(gè)小于10000的整數(shù),該整數(shù)不斷循環(huán)加1,每次加1后立即更新顯示,從而反應(yīng)出顯示輸出的速度。


          三、預(yù)備知識(shí)


          1. uCGUI的體系結(jié)構(gòu):

          uCGUI包含三個(gè)總的文件夾:Application,Config,GUI.其中:

          Ⅰ Application是應(yīng)用程序的文件夾,它中間包含主函數(shù)文件,其它資源文件。

          Ⅱ Config是GUI的配置文件夾,它包含三個(gè)文件:

          ★ GUICONF.H是uCGUI的配置文件,負(fù)責(zé)配置GUI的對OS,window manager,DMA,觸摸屏,Unicode碼的支持。以及設(shè)置默認(rèn)字體和各種控件的默認(rèn)顏色等。

          ★ GUITouchConf.h負(fù)責(zé)配置觸摸屏。

          ★ LCDConf.h負(fù)責(zé)配置LCD顯示器,如分辨率,顏色位數(shù),以及LCD控制器的其它設(shè)置。

          Ⅲ GUI是uCGUI的實(shí)現(xiàn)部分,它是GUI最重要的組成部分,其中包含八―九個(gè)文件夾。

          ★ ConvertColor是彩色顏色轉(zhuǎn)換文件夾,它里面包含24位色―各種顏色之間的轉(zhuǎn)換的函數(shù)。

          ★ ConvertMono是灰度顏色轉(zhuǎn)換文件夾,它里面包含24位色―單色,四級灰度,16級灰度和用戶自定義顏色之間轉(zhuǎn)換的函數(shù)。

          ★ Core是GUI的核心,GUI多數(shù)的處理函數(shù)都在這個(gè)文件夾里面。

          ★ Font是GUI的字體文件夾,我們可以通過對它里面文件的增減來增刪字體。

          ★ LCDDriver是GUI的底層接口部分我們所的部分就應(yīng)該在這個(gè)文件夾。

          ★ MemDev是GUI的DMA模式的一些處理函數(shù)文件。

          ★ Widget里面含有各種窗口控件,如對話框,按鈕等控件。

          ★ WM是GUI的窗口消息處理函數(shù)文件夾。

          ★ Touch是觸摸屏和鼠標(biāo)的底層接口部分。


          2.UCGUI需要移植的部分

          ① uCGUI移植需要修改的文件有:修改Main.c,LCDConf.h,在LCDDrive文件夾添加LCD 44b0.h, LCD 44b0.c其中LCD 44b0.h是LCD 44b0.c的聲明,LCD 44b0.c提供一系列LCD底層函數(shù)接口。

          ② 若要支持DMA模式還要添加一個(gè)LCDMemc.h, LCDMemc.c文件。LCDMemc.h使LCDMemc.c的聲明,LCDMemc.c使DMA模式的底層接口函數(shù)。

          ③ 若要支持觸摸屏和鼠標(biāo)還需要在GUICONF.H中修改一下定義:

          #define GUI_SUPPORT_TOUCH (1)

          使GUI支持鼠標(biāo)觸摸屏,并配置GUITouchConf.h文件。在GUITouch下添加相應(yīng)的接口驅(qū)動(dòng)。

          我們主要移植的使LCD的直接驅(qū)動(dòng)模式,所以只需要修改1>就行了。

          我用的是JediView(for ARM)集成調(diào)試環(huán)境,其它環(huán)境類似,硬件為S3C44b0X,LCD為256色彩色液晶,分辨率為320×240。


          四、實(shí)驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具)

          硬件: Micetek 44B0 實(shí)驗(yàn)系統(tǒng)

          JEDI仿真器

          PC機(jī) Pentumn100以上

          軟件: PC機(jī)操作系統(tǒng)win2000

          JEDIView集成開發(fā)環(huán)境


          五、程序說明

          新建一個(gè)文件夾uCGUI,添加以上體系的所有文件夾及文件加到uCGUI文件夾,刪除LCDDrive文件夾下的LCDWin.c,它是在VC下的仿真驅(qū)動(dòng)程序,在LCDDrive文件夾添加LCD 44b0.h, LCD 44b0.c。暫時(shí)不移植觸摸屏驅(qū)動(dòng),可保持Touch目錄為空,以后擴(kuò)展時(shí)再用。

          在uCGUI目錄下新建一個(gè)Inc文件夾,將option.h, 44b.h, 44blib.h, def.h,cache.h,lcdlib.h,44blcd.h添加進(jìn)來。

          將lcdlib.c添加到Application文件夾。

          新建一個(gè)工程也叫uCGUI,添加以上體系的所有文件夾及其內(nèi)部文件加到uCGU工程。

          修改include配置:打開 Tools->Option->Directory->Include Files添加路徑

          ……uCGUIguiConvertColor

          ……uCGUIguiConvertMono

          ……uCGUIguiCore

          ……uCGUIguiFont

          ……uCGUIguiLCDDriver

          ……uCGUIguiMemDev

          ……uCGUIguiWidget

          ……uCGUIguiWM

          ……uCGUIguiTouch

          ……:ucOSConfig

          ……guiApplication

          其中……為你所建工程所在路徑,以上這些路徑在有的編譯器可不加,自動(dòng)找到,在JediView(for ARM)集成調(diào)試環(huán)境需要添加。

          由于uCGUI 用到了數(shù)學(xué)庫,在Gcc編譯器下需要在link設(shè)置中添加-lm參數(shù),使編譯器可以找到數(shù)學(xué)庫。


          六、實(shí)驗(yàn)現(xiàn)象

          液晶顯示屏顯示的是實(shí)驗(yàn)結(jié)果,其中第2行的數(shù)值不斷加1跳變。




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();