UCGUI學習之路 2 移植

2021-08-09 22:09:34 字數 3725 閱讀 3321

開始學習之前,先簡單說說我的移植過程及一些問題的解決。

ucgui

的源**。

我用的是

3.90

版的,並且準備乙個簡單工程,並且編譯無誤。

開啟源**資料夾,複製

start\gui

目錄下所有檔案到工程資料夾中, 複製

start\config 目錄下所有檔案

到工程目錄下的

gui資料夾中, 複製

sample\gui_x

資料夾到工程目錄下的

gui\config

資料夾中。

開啟之前建好的

mdk工程,把拷貝入工程中的

ucgui

檔案加入工程中,

相應的標頭檔案也要加上。

當然別處也可以。原始檔中我之所以放此資料夾中,

想著以後複製到別的工程時方便。要注意的是自己的 lcd 底層驅動不能命名為 lcd.c 和 lcd.h,這樣編譯會出錯,

因為在 ucgui內部檔案中已經有 lcd.c 和 lcd.h 檔案,

比如我這裡使用 lcd_base.c。而這個驅動程式最重要的就是三個函式:

1、lcd 初始化函式,我定義的是void lcd_base_init(void);記好這個初始化的函式名不能定義為lcd_init();

因為在 ucgui 檔案中已經使用了這個函式名,所以會導致編譯出錯。

還有就是返回看第五步配置檔案最下面用到的就是這個函式,

你的檔案 lcd 初始化檔名換的話也別忘了給第五步配置中的也替換掉。

2、lcd 填充乙個畫素的函式,我定的的是void lcd_fast_drawpoint(u16 x,u16 y,u16 color);

3、得到乙個畫素顏色的函式我定義的是 u16  lcd_readpoint(u16 x,u16 y);

要修改的檔案主要是這三個

lcddummy.c 

guiconf.h lcdconf.h

檔案。上層配置:也就是

gui一些功能的開關,開啟

guiconf.h

檔案:按照如下**配置:(注:

0 是關,

1是開)

#ifndef guiconf_h

#define guiconf_h

#define gui_os (0) //

作業系統的支援,當用到

ucos

時需要開啟

#define gui_support_touch (0) /*

觸控螢幕的支援,這裡關閉

*/#define gui_support_unicode (1) /*

建議初始關閉,以後用漢字型檔時再開啟

*/#define gui_default_font &gui_font6x8 //

定義字型大小

#define gui_alloc_size 5000 /*

分配的動態記憶體空間

*#define gui_winsupport 0 /*

視窗功能支援

*/#define gui_support_memdev 0 /*

記憶體管理,建議先關閉

*/#define gui_support_aa 0 /*

抗鋸齒功能,開啟後可以提高顯示效果,建議先關閉

*/#endif

上層配置完當然還有下層,就是

lcdconf.h

檔案,這個也很簡單,它原來的看

起來比較複雜,我這裡把它簡化了,大家用的時候可以把我的拷貝過去替換掉原

來的,**如下:

#ifndef lcdconf_h

#define lcdconf_h

#define lcd_xsize (240)   //具體lcd螢幕x方向畫素

#define lcd_ysize (320)   //具體lcd螢幕y方向畫素

#define lcd_controller (-1)  //乙個標誌位,用來指定初始化函式,後面看了就明白了

#define lcd_bitsperpixel (16)  //顏色深度

#define lcd_fixedpalette (565)  //rgb顏色格式

#define lcd_swap_rb (1) //紅藍交換

#define lcd_swap_xy (1)  //xy座標交換

//lcd_mirror_x 

#define lcd_init_controller() lcd_base_init();   //指定初始化函式,這裡是具體lcd屏的初始化函式。

#endif

關於配置中

lcd

型號問題,這裡我們用的是通用型的方法也就是沒有用到官方提供的具體型號配置檔案,所以這裡具體型號填-1,

要是用官方配置檔案那就要填具體型號了,比如我看他們的例程用到的是

ili9320

,這裡的

-1就改為

9320.

有的同學可能還看到

guiconfig

目錄下還有

guitouchconf.h

檔案,其實這裡可以不管了,因為我們在

guiconf.h

中有#define gui_support_touch (0)

這條語句把觸控螢幕的功能已經關閉,當然以後用到觸控時還要具體配置,這裡就不**了。其實這一部分很簡單關鍵就是幾個開關的控制和乙個

lcd初始化函式的替換。

這一步就是修改

lcddummy.c

檔案了。

1、開啟

lcddummy.c

檔案,在開頭的標頭檔案中增加語句

#include」lcd_base.h」,

把lcd

的底層驅動介面包含進來。

2、將接下來這句話

#if (lcd_controller == -1) && (!defined(win32) |defined(lcd_simcontroller))

中 後 半 部 分 的 刪 掉 ,

即 剩 下

#if(lcd_controller == -1)

這一句就行了,要是不修改的話整個

lcddummy.c

檔案都不會編譯。

3、再往下找到

void lcd_l0_setpixelindex(int x, int y, int pixelindex)

這個函式把函式裡面的都刪掉然後用自己的填充乙個畫素的函式替換掉如下所示:

void lcd_l0_setpixelindex(int x, int y, int pixelindex)

4unsigned int lcd_l0_getpixelindex(int x, int y)

編譯通過後,修改

main

函式如下:

int main()

如果顏色和自己設定的不一樣,就要修改自己的底層驅動。

如果還有報錯,可能的原因有:

1、一些標頭檔案沒有包含,仔細檢查一下。

2、一些變數的名字跟自己編寫的底層函式有衝突,注意修改一下。

ucgui移植記錄

196568501 qq 最近移植了ucgui 想把他寫下來跟正在關注ucgui的人一起 和學習,初次寫東西還希望大俠們多多指教。移植分為主要的三步 第一步 第二步 找到最底層函式,跟你的液晶驅動器對接。第三步 測試你一直的gui功能。編譯ucgui 第一步詳解 編譯器 vitual dsp 4.5...

UCGUI學習之路 5 MemDev

lcd液晶屏上有動畫的時候,一般都需要高頻重新整理螢幕。如果不使用memdev,而按傳統方法做動畫效果,螢幕會閃爍,效果不好。memdev的使用是為了上述情況引起的閃爍。其原理在於,先把這一幀到下一幀的顯示過程在記憶體中預演。把生成的最終結果,再重新整理到螢幕上。這樣一來螢幕的顯示內容變化次數降到最...

stm32移植ecos,移植ucgui到ecos

ucgui是乙個開源的輕型嵌入式gui,使用廣泛,資料豐富,功能完整,尤其適合嵌入式產品的gui。只是它開源但不免費。僅管如此,移植來玩玩還是可以的。ucgui設計優秀,具有良好移植性,配合ecos framebuf優秀框架,可以讓你很快見到ucgui呈現的精美顯示介面。本文主要介紹了ucgui移植...