當前位置:首頁 > 單片機 > 單片機
[導讀] UCGUI是一種嵌入式應用中的圖形支持系統(tǒng)。它設計用于為任何使用LCD圖形顯示的應用提供高效的獨立于處理器及LCD控制器的圖形用戶接口,它適用單任務或是多任務系統(tǒng)環(huán)境, 并適用于任意LCD控制器和CPU下任何尺寸的真

UCGUI是一種嵌入式應用中的圖形支持系統(tǒng)。它設計用于為任何使用LCD圖形顯示的應用提供高效的獨立于處理器及LCD控制器的圖形用戶接口,它適用單任務或是多任務系統(tǒng)環(huán)境, 并適用于任意LCD控制器和CPU下任何尺寸的真實顯示或虛擬顯示。

它的設計架構是模塊化的,由不同的模塊中的不同層組成,由一個LCD驅動層來包含所有對LCD的具體圖形操作。UCGUI可以在任何的CPU上運行,因為它是100%的標準C代碼編寫的。

類似程序還有國產的一個MINIGUI (http://www.minigui.com/zhcn/),MiniGUI 是一個自由軟件項目。其目標是提供一個快速、穩(wěn)定、跨操作系統(tǒng)的圖形用戶界面(GUI)支持系統(tǒng),尤其是基于 Linux/uClinux、eCos 以及其他傳統(tǒng) RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucleus 等)的實時嵌入式操作系統(tǒng)。有機會嘗試下,支持下國產,畢竟國內這樣的公司不多。。

這里移植的UCGUI3.90a版本,雖然已經有更新的版本,比如UCGUI3.98、甚至4.04版本。但是目前來說只有這個版本的代碼是最全的,包括了JPEG , MULTILAYER , MEMDEV ,AntiAlias等模塊。一直想嘗試做一個數碼相冊,JEPG模塊自然少不了,所以移植了這個版本。

UCGUI390a 下載


整個移植過程,讓LCD顯示圖案倒是沒花多少時間,資料也比較多,但是在移植觸摸屏的時候卡了好幾天,然后又是 UCGUI 指針圖標 移動有重影(LCD讀取像素顏色函數有問題)。。??傊浦彩莻€累人的活

首先需要保證你的LCD驅動和觸摸屏驅動是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的觸摸屏可以參考stm32 驅動 TFT LCDstm32 驅動 觸摸屏兩篇文章

UCGUI的文件數量很大,主要用到UCGUI390a/Start/Config 和 UCGUI390a/Start/GUI兩個文件夾下文件,不過文件數量也已經很多了 。。。

相關文件介紹如下:

將Config和GUI下所有文件加入工程,MDK中新建工程需要劃分好結構,這是UCGUI官方推薦的結構:

JPEG, MemDev , MultiLayer ,Widget , Wm 這5 個文件夾的內容可以暫時不加入MDK工程。

因為這些文件起到的是擴展功能,在移植階段可以先不添加,等到以后用到其中的功能時再選擇添加。但是建議都添加進去,避免遇到各種無解問題。。

當然前提是在配置時要把相應的功能開關關掉,在下面的步驟中會提到。

ConverMono , ConverColor ,Core ,Font 這四個目錄下的文件是不用修改的。

要修改的文件在LCDDriver ,Config 這兩個目錄下。

LCDDriver 是LCD的驅動接口函數文件,需要將自己的LCD驅動函數提供給UCGUI調用。

需要提供3個LCD底層驅動函數:

void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) LCD畫點函數,用指定顏色填充一個像素

unsigned int LCD_L0_GetPixelIndex(int x, int y) LCD讀取定點顏色函數,讀取一個像素點的16位RGB顏色值

void LCD_L0_FillRect(int x0, int y0, int x1, int y1) 矩形填充函數,用指定顏色填充一個矩形 。這個函數也可以不改 使用UCGUI的函數,用一個一個的像素點填充成一個矩形。也可以在底層驅動根據像素個數直接往GRAM 中寫數據,封裝成函數,供這個函數調用。速度會快很多。

其他的畫線畫圖形函數,也可以同樣優(yōu)化。

LCDDriver下有三個文件,LCDDummy.c 、 LCDNull.c 和LCDWin.c。 這三個都是UCGUI LCD接口模板文件。功能一樣,只是移植時修改的細節(jié)不一樣。我們可以選用其中一個,稍作修改作為接口文件。以LCDDummy.c為例:

#include"LCD_Private.h"/*privatemoduldefinitions&config*/#include"GUI_Private.h"#include"GUIDebug.h"/*#if(LCD_CONTROLLER==-1)&&(!defined(WIN32)|defined(LCD_SIMCONTROLLER))*///必須注釋,否則不會編譯#include"ili93xx.h"http://包含你的LCD驅動函數聲明#if(LCD_CONTROLLER==-1)//這句對應Config/LCDConf.h................voidLCD_L0_SetPixelIndex(intx,inty,intPixelIndex){POINT_COLOR=PixelIndex;//我的畫點函數使用了一個全局變量設定顏色LCD_DrawPoint(x,y);//畫點函數}................unsignedintLCD_L0_GetPixelIndex(intx,inty){returnLCD_ReadPoint(x,y);//我的讀取像素顏色函數}................voidLCD_L0_FillRect(intx0,inty0,intx1,inty1){LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//填充矩形函數/*for(;y0<=y1;y0++){LCD_L0_DrawHLine(x0,y0,x1);}*/}

UCGUI提供了一些LCD控制器的驅動函數,但是這種配置方法,可以適用于任何控制IC。

到這就算完成三分之一了,接下來修改Config文件夾下文件,Config下有三個文件:

GUIConf.h LCDConf.hGUITouchConf.h

還需要加入一個GUI_X.c文件,要不然編譯的時候會有錯誤。直接復制UCGUI390aSampleGUI_XGUI_X.c即可。如果打開了觸摸功能還需要加入一個UCGUI390aSampleGUI_XGUI_X_Touch.c 。

這三個文件是UCGUI的上層配置文件,也就是GUI 一些功能的開關。

GUIConf.h:

#ifndefGUICONF_H#defineGUICONF_H#defineGUI_OS(0)/*操作系統(tǒng)的支持,當用到ucos時需要打開Compilewithmultitaskingsupport*/#defineGUI_SUPPORT_TOUCH(1)/*觸摸屏的支持Supportatouchscreen(req.win-manager)*/#defineGUI_SUPPORT_UNICODE(0)/*用漢字庫時再打開SupportmixedASCII/UNICODEstrings*/#defineGUI_DEFAULT_FONT&GUI_Font6x8/*定義字體大小*/#defineGUI_ALLOC_SIZE12500/*分配的動態(tài)內存空間Sizeofdynamicmemory...ForWMandmemorydevices*//***********************************************************************Configurationofavailablepackages*/#defineGUI_WINSUPPORT1/*窗口功能支持要使用指針圖標必須打開Windowmanagerpackageavailable*/#defineGUI_SUPPORT_MEMDEV1/*內存管理Memorydevicesavailable*/#defineGUI_SUPPORT_AA1/*抗鋸齒功能,打開后可以提高顯示效果Antialiasingavailable*/#endif/*Avoidmultipleinclusion*/

LCDConf.h

#ifndefLCDCONF_H#defineLCDCONF_H#defineLCD_XSIZE(240)/*lcd的水平分辨率X-resolutionofLCD,Logicalcoor.*/#defineLCD_YSIZE(320)/*lcd的垂直分辨率Y-resolutionofLCD,Logicalcoor.*/#defineLCD_BITSPERPIXEL(16)/*16位顏色RGB值顏色深度*/#defineLCD_SWAP_RB(1)/*紅藍反色交換*//*lcd控制器的具體型號**設置為-1時會編譯LCDDriver下LCDDummy.c*設置為-2時會編譯LCDDriver下LCDNull.c**還需要修改LCDDriver下文件的宏定義才可以被編譯*eg.LCDDummy.c:**#if(LCD_CONTROLLER==-1)&&(!defined(WIN32)|defined(LCD_SIMCONTROLLER))*改為*#if(LCD_CONTROLLER==-1)*/#defineLCD_CONTROLLER-1//設置為-1-2,因為UCGUI沒有相應LCD控制IC驅動#defineLCD_INIT_CONTROLLER()LCD_Config();//綁定相關LCD底層驅動的初始化函數

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉