?
一、環(huán)境介紹
keil: 5.25
UCGUI版本: 3.90(純源碼版本)
3.9.0是源碼版本,可以看到全部源碼,也方便學(xué)習(xí);后續(xù)的版本都是提供lib庫文件,不再提供源碼了。
2.1 UCGUI
μC/GUI 是一種用于嵌入式應(yīng)用的圖形支持軟件。它被設(shè)計(jì)用于為任何使用一個(gè)圖形 LCD的應(yīng)用提供一個(gè)有效的不依賴于處理器和 LCD 控制器的圖形用戶接口。它能工作于單任務(wù)或多任務(wù)的系統(tǒng)環(huán)境下。 μC/GUI 適用于使用任何 LCD 控制和 CPU 的任何尺寸的物理和虛擬顯示。它的設(shè)計(jì)是模塊化的,由在不同的模塊中的不同的層組成。一個(gè)層,稱作 LCD 驅(qū)動程序,包含了對 LCD 的全部訪問。 μC/GUI 適用于所有的 CPU,因?yàn)樗?100%由的 ANSI 的 C 語言編寫的。
μC/GUI 很適合大多數(shù)的使用黑色/白色和彩色 LCD 的應(yīng)用程序。 它有一個(gè)很好的顏色管理器,允許它處理灰階。 μC/GUI 也提供一個(gè)可擴(kuò)展的 2D 圖形庫和一個(gè)視窗管理器,在使用一個(gè)最小的 RAM 時(shí)能支持顯示窗口。
UCGUI官網(wǎng)地址:Micrium Software and Documentation - Silicon Labs
?
2.2 GUI相關(guān)文件介紹
?
①.GUI/LCDDriver 文件夾中存放的是一些 LCD 驅(qū)動代碼,如果你使用的 LCD 在
這里可以找到代碼,可以直接通過 Config 中的 LCDConfig.h :
#define LCD_CONTROLLER -1 // -1:表示沒有選擇的 LCD 驅(qū)動,而是使用里邊的樣本程序進(jìn)行修改。
uCGUI 中具體支持哪些 LCD 可以查詢《uCGUI 用戶手冊》的第 22 章 LCD 驅(qū)動程序。里邊詳細(xì)的說明了,支持些什么控制器的 LCD。
②.在工程中只需加載需要的 LCD 驅(qū)動代碼文件即可。如果設(shè)置為-1,則選擇加載 LCDDummy.C 或 LCDTemplate.C 文件(不同的版本,此代碼的文件名可能會不同)。
文件夾的主要內(nèi)容如下:
Config-----------配置文件
GUI-----------源代碼
GUI_X----------操作系統(tǒng)接口函數(shù)定義文件
GUI源代碼文件:
1)AntiAlias:抗鋸齒顯示效果支持。
2)ConvertColor:彩色顯示的色彩轉(zhuǎn)換支持。
3)ConvertMono:(b/w)和灰度顯示的色彩轉(zhuǎn)換支持。
4)Core:核心文件,提供了GUI基本的功能。
5)Font:字庫。
6)JPEG:圖片操作函數(shù)。
7)LCDDriver:LCD驅(qū)動支持。
8)MemDev:內(nèi)存設(shè)備支持。主要功能是防止在項(xiàng)目重疊時(shí)觸摸屏的閃爍。
9)Widget:窗體控件庫。
10)WM:窗口管理庫。
注意:JPEG、MemDev、Widget、WM是可裁剪項(xiàng),若要支持Widget(窗體控件),需要
WM(窗口管理器)的支持;使用控件時(shí),需要將相應(yīng)的頭文件包含進(jìn)去,比如我們需要使用按鈕BUTTON,那么我們需要先包含BUTTON.h頭文件,否則控件即使支持也不可用。
二、移植步驟
移植準(zhǔn)備工作:
- 一個(gè)塊STM32開發(fā)板
- 一個(gè)完好的LCD顯示屏
- 一個(gè)完整的基于開發(fā)板的KEIL工程(包含完整的LCD驅(qū)動代碼)
- 一個(gè)完整的UCGUI 3.9源碼包
2.1 創(chuàng)建文件夾
首先在KEIL工程目錄下創(chuàng)建一個(gè)UCGUI的文件夾,用來存放移植需要用到的源碼文件。
效果圖:
?
2.2 拷貝源碼文件
將GUI_V3.9_官方源碼\uCGUI3.90版源碼\Start路徑下的Config文件夾和GUI文件拷貝到剛才在KEIL工程目錄下創(chuàng)建的UCGUI文件夾里。
效果圖:
?
將GUI_V3.9_官方源碼\uCGUI3.90版源碼\Sample路徑下的GUI_X文件夾拷貝到剛才在KEIL工程目錄下創(chuàng)建的UCGUI文件夾里。(GUI_X文件夾是操作系統(tǒng)的接口)
效果圖:
?
2.3 創(chuàng)建UCGUI工程
打開KEIL工程,添加UCGUI源代碼。
?
根據(jù) UCGUI\GUI 目錄下的文件創(chuàng)建KEIL的工程目錄,名字最好用源碼默認(rèn)的名字不要修改,以防止后面查找不方便。額外再添加創(chuàng)建一個(gè)UCGUI_Config目錄,用來存放UCGUI的配置文件創(chuàng)建好的工程目錄—效果圖:
?
2.4 添加UCGUI源文件
工程創(chuàng)建OK之后,將對應(yīng)源文件添加到KEIL工程目錄下,將對應(yīng)的頭文件加入工程。
效果圖:
?
添加的源文件和頭文件需要對照GUI文件夾逐個(gè)添加,不能漏掉文件。
源文件只添加.c 。其他文件一律不添加。
UCGUI_Config文件夾添加的文件如下所示:
UCGUI\GUI_X\GUI_X.c //OS系統(tǒng)接口
UCGUI\Config\GUITouchConf.h //配置觸摸屏
UCGUI\Config\ GUIConf.h //配置GUI
UCGUI\Config\ LCDConf.h //配置LCD顯示屏參數(shù)
效果圖:
?
2.5 修改配置文件
修改LCD配置文件,打開LCDConf.h文件,替換下面的代碼:
#ifndef LCDCONF_H
#define LCDCONF_H
#define LCD_XSIZE (240) /* 水平分辨率X-resolution of LCD, Logical coor. */
#define LCD_YSIZE (320) /* 垂直分辨率Y-resolution of LCD, Logical coor. */
#define LCD_BITSPERPIXEL (16) /*lcd 顏色深度*/
#define LCD_CONTROLLER (-1) /*lcd 控制器的具體型號*/
#define LCD_FIXEDPALETTE (565) /*RGB 顏色位數(shù)*/
#define LCD_SWAP_RB (1) /*紅藍(lán)反色交換*/
#define LCD_INIT_CONTROLLER() LCD9341_Init ();
/*底層初始化函數(shù),自己寫的,而非源碼自帶,這一步非常重要*/
#endif /* LCDCONF_H */
因?yàn)槲覀冇蠰CD的驅(qū)動,不需要UCGUI的LCD驅(qū)動配置。
其中:LCD9341_Init (); 函數(shù)是我們自己工程的LCD初始化函數(shù)。我們的LCD初始化函數(shù)名字不能是LCD_Init(),因?yàn)閁CGUI自帶的LCD初始化函數(shù)也是這個(gè)名字,我們自己的工程里也不能出現(xiàn)LCD名字的結(jié)構(gòu)體。不然,會出現(xiàn)重定義的錯誤。
修改UCGUI配置文件,打開GUIConf.h文件,修改成下面的代碼:
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* 系統(tǒng)支持 */
#define GUI_SUPPORT_TOUCH (0) /* 支持觸摸屏 */
#define GUI_SUPPORT_UNICODE (0) /* 支持混合ASCII / UNICODE字符串 */
#define GUI_DEFAULT_FONT &GUI_Font6x8
//#define GUI_ALLOC_SIZE 12500 /* Size of dynamic memory ... For WM and memory devices*/
#define GUI_ALLOC_SIZE 1024*1024 /* Size of dynamic memory ... For WM and memory devices*/
#define GUI_WINSUPPORT 0 /* 窗口管理器包可用 */
#define GUI_SUPPORT_MEMDEV 0 /* 內(nèi)存設(shè)備可用 */
#define GUI_SUPPORT_AA 0 /* 抗鋸齒可用 */
#endif /* Avoid multiple inclusion */
初次移植,將不需要用到的配置全部關(guān)閉,等UCGU的基本操作熟悉之后再打開使用。
2.6 修改UCGUI底層驅(qū)動
打開LCDDummy.c文件,添加UCGUI底層的畫點(diǎn)函數(shù)和讀點(diǎn)函數(shù)。
先在LCDDummy.c里加入LCD頭文件。并且定義使用自己的LCD驅(qū)動。
?
添加畫點(diǎn)函數(shù)
該函數(shù)在LCDDummy.c文件(大約382行)處。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Write into hardware ... Adapt to your system */
{
LCD_DrawPoint_color(x,y,PixelIndex); //添加畫點(diǎn)函數(shù)
}
}
添加讀點(diǎn)函數(shù)
該函數(shù)在LCDDummy.c文件(大約407行)處。
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
LCD_PIXELINDEX PixelIndex;
/* Convert logical into physical coordinates (Dep. on LCDConf.h) */
#if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
int xPhys = LOG2PHYS_X(x, y);
int yPhys = LOG2PHYS_Y(x, y);
#else
#define xPhys x
#define yPhys y
#endif
/* Read from hardware ... Adapt to your system */
{
PixelIndex=LCD_ReadPoint(x,y); //添加讀點(diǎn)函數(shù)
}
return PixelIndex;
}
2.7 編譯工程
文件修改完畢之后,回到主函數(shù),添加#include "GUI.h"頭文件。
并在主函數(shù)里加入下面的代碼,測試GUI移植是否成功。
GUI_Init(); //GUI初始化
GUI_SetBkColor(GUI_BLUE); //設(shè)置顏色
GUI_Clear(); //清屏
GUI_GotoXY(60,50); //設(shè)置字符顯示的XY坐標(biāo)
GUI_DispString("Hello World!!"); //顯示字符
GUI_DrawCircle(100,200,50); //畫圓
代碼寫完,編譯工程,編譯時(shí)間1-10分鐘左右(電腦性能決定)。
效果圖:
?
編譯成功之后,將代碼下載到開發(fā)板運(yùn)行。
效果如圖:
?
2.8 編譯錯誤解決辦法
如果編譯出現(xiàn)下面的錯誤:
..\OBJ\KEY.axf: Error: L6218E: Undefined symbol exit (referred from jerror.o).
根據(jù)錯誤提示,打開jerror.c文件,找到error_exit函數(shù),將該函數(shù)的最后一行代碼exit(EXIT_FAILURE); 該為return 。改完,再次編譯,錯誤解決。
效果圖:
?
方法:
- 查找自己原來的工程里是否有以LCD命名的相關(guān)結(jié)構(gòu)體,
- 查看原來工程里的LCD初始化函數(shù)是否是LCD_Init(), 如果是,就修改函數(shù)名字。
一般解決了上述的問題,移植一般都沒有問題。出現(xiàn)了問題,可以查看錯誤信息,判斷是什么錯誤,針對性解決。
三、加入觸摸屏
加入觸摸屏功能之前,要保證原本工程已經(jīng)有正常的觸摸屏驅(qū)動代碼,能正確的轉(zhuǎn)換觸摸屏的X Y坐標(biāo)值。
3.1 打開GUIConf.h文件,修改當(dāng)前GUI支持觸摸屏
#define GUI_SUPPORT_TOUCH (1) /* 支持觸摸屏 */
#define GUI_ALLOC_SIZE 5000 //修改內(nèi)存空間改大一點(diǎn),防止編譯不過
效果圖:
?
3.2 打開GUITouchConf.h文件,替換成下邊代碼。
#ifndef GUITOUCH_CONF_H
#define GUITOUCH_CONF_H
#define GUI_TOUCH_AD_LEFT 0 //屏幕左邊尺寸
#define GUI_TOUCH_AD_RIGHT 240 //屏幕右邊尺寸
#define GUI_TOUCH_AD_TOP 0 //屏幕頂端尺寸
#define GUI_TOUCH_AD_BOTTOM 320 //屏幕底部尺寸
#define GUI_TOUCH_SWAP_XY 0 //是否交換坐標(biāo)
#define GUI_TOUCH_MIRROR_X 0 //設(shè)置鏡像X
#define GUI_TOUCH_MIRROR_Y 0 //設(shè)置鏡像Y
#endif /* GUITOUCH_CONF_H */
效果圖:
?
3.3 將GUI_X_Touch.c文件加入到工程UCGUI_Config目錄。
GUI_X_Touch.c在UCGUI\GUI_X路徑下。
并修改獲取X Y 坐標(biāo)代碼,加入觸摸屏驅(qū)動頭文件。
修改代碼如下:
#include "GUI.h"
#include "GUI_X.h"
#include "touch.h" //頭文件
void GUI_TOUCH_X_ActivateX(void) {
}
void GUI_TOUCH_X_ActivateY(void) {
}
int GUI_TOUCH_X_MeasureX(void) {
//添加獲取觸摸X坐標(biāo)代碼
Touch_check(); //掃描觸摸屏
return TOUCH.x; //X坐標(biāo)
}
int GUI_TOUCH_X_MeasureY(void) {
//添加獲取觸摸Y坐標(biāo)代碼
Touch_check(); //掃描觸摸屏
return TOUCH.y; //Y坐標(biāo)
}
效果圖:
?
3.4 添加初始化函數(shù)
上邊步驟完成之后,在主函數(shù)添加(自己工程的)觸摸屏的初始化函數(shù),觸摸屏即可正常運(yùn)行。
3.5 輪詢檢測觸摸屏
如果GUI沒有加入系統(tǒng),需要定義一個(gè)定時(shí)器去掃描觸摸屏,在定時(shí)器的中斷服務(wù)函數(shù)里加入GUI_TOUCH_Exec();函數(shù)。掃描的頻率為:10毫秒一次
如果GUI加入了系統(tǒng),可以創(chuàng)建一個(gè)單獨(dú)的任務(wù),在任務(wù)里添加GUI_TOUCH_Exec();
第四章 加入UCOSII系統(tǒng)
4.1 移植準(zhǔn)備步驟
本小節(jié)的的移植是基于UCOSII系統(tǒng)的移植
移植系統(tǒng)之前的準(zhǔn)備工作:
- 一份UCOSII源碼
- 熟悉UCOSII的基本操作(創(chuàng)建工程和任務(wù)編寫)
打開GUIConf.h文件,修改當(dāng)前GUI支持系統(tǒng)
#define GUI_OS (1) /* 系統(tǒng)支持 */
效果圖:
?
4.2 在GUI.h加入U(xiǎn)COSII的頭文件。
添加相關(guān)頭文件路徑效果圖:
?
4.3 添加UCOSII源碼到工程目錄
效果圖:
?
注意:加載源碼的時(shí)候,不能將ucos_ii.c加入到工程。加入了ucos_ii.c文件會出現(xiàn)重定義。
”ucos_ii.c的代碼作用是加載源文件,因?yàn)閁COSII其他源文件我們已手動加入到工程,已不需要ucos_ii.c的代碼”。
4.4 設(shè)置UCOSII任務(wù)調(diào)度時(shí)間基準(zhǔn)
初始化滴答時(shí)鐘,開啟滴答時(shí)鐘中斷,設(shè)置滴答時(shí)鐘10毫秒中斷一次。
(用任何一個(gè)硬件定時(shí)器都可以代替)
在滴答時(shí)鐘中斷服務(wù)函數(shù)里加入下面的代碼:
(記得在滴答定時(shí)器中斷函數(shù)的代碼文件里引用UCOSII的頭文件:#include "includes.h" )
/*
滴答時(shí)鐘中斷服務(wù)函數(shù)
*/
void SysTick_Handler(void)
{
OSIntEnter(); //進(jìn)入中斷
OSTimeTick(); //調(diào)用ucos的時(shí)鐘服務(wù)程序
OSIntExit(); //觸發(fā)任務(wù)切換軟中斷
}
效果圖:
?
4.5 修改錯誤與正確的宏
?
4.6 添加UCOS支持文件
在進(jìn)行上邊的步驟,之后,編譯工程,會出現(xiàn)如下的錯誤:
Build target 'UCGUI移植'
linking...
..\OBJ\KEY.axf: Error: L6218E: Undefined symbol GUI_X_GetTaskId (referred from guitask.o).
..\OBJ\KEY.axf: Error: L6218E: Undefined symbol GUI_X_InitOS (referred from guitask.o).
..\OBJ\KEY.axf: Error: L6218E: Undefined symbol GUI_X_Lock (referred from guitask.o).
..\OBJ\KEY.axf: Error: L6218E: Undefined symbol GUI_X_Unlock (referred from guitask.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 4 error messages.
"..\OBJ\KEY.axf" - 4 Error(s), 0 Warning(s).
Target not created
根據(jù)報(bào)錯提示信息,打開GUITask.c 文件。GUITask.c有提示需要在GUI_X.c文件實(shí)現(xiàn)幾個(gè)函數(shù)。
?
根據(jù)提示,繼續(xù)打開GUI_X.C 。前邊有提到,GUI_X.C文件主要是提供OS系統(tǒng)接口,配置/系統(tǒng)相關(guān)的外部環(huán)境。
效果圖:
?
我們當(dāng)前移植的OS是UCOSII系統(tǒng),打開KEIL工程路徑下的GUI_X文件夾:
效果圖:
?
該目錄下有6個(gè)與系統(tǒng)接口相關(guān)的文件,我們移植的是UCOS系統(tǒng),其中GUI_X_uCOS.c文件是UCOSII系統(tǒng)的接口。我們將GUI_X_uCOS.c文件加入到工程
效果圖:
?
將GUI_X.C文件的三個(gè)底層函數(shù)拷貝一份到GUI_X_uCOS.c文件
void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
void GUI_X_ErrorOut (const char *s) { GUI_USE_PARA(s); }
效果圖:
?
完成上面的步驟之后,將GUI_X.c文件從工程中卸載掉,因?yàn)镚UI_X_uCOS.c與GUI_X.c文件實(shí)現(xiàn)的函數(shù)有很多是相同的,不卸載GUI_X.c會出現(xiàn)重定義的錯誤。
接著修改GUI_X_uCOS.c文件,替換UCOS的延時(shí)函數(shù)。(大約在78行)。
void GUI_X_ExecIdle (void)
{
//OS_X_Delay(1);
OSTimeDly(50); //UCOS延時(shí)函數(shù)
}
效果圖:
?
4.7 建立任務(wù)測試效果
//開始任務(wù)
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OS_ENTER_CRITICAL(); //進(jìn)入臨界區(qū)(無法被中斷打斷)
OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO); //創(chuàng)建的任務(wù)
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //掛起起始任務(wù).
OS_EXIT_CRITICAL(); //退出臨界區(qū)(可以被中斷打斷)
}
//LED0任務(wù)
void led0_task(void *pdata)
{
u8 i;
u16 cnt=0;
/***************************************
畫一個(gè)進(jìn)度條控件
****************************************/
hProgBar_1 = PROGBAR_Create(0, 0, 240, 40, WM_CF_SHOW); //設(shè)置進(jìn)度條的大小坐標(biāo)參數(shù)
PROGBAR_SetBarColor(hProgBar_1,0,GUI_GREEN); //參數(shù)(句柄,1(0)代表本函數(shù)是顯示進(jìn)度條覆蓋的區(qū)域還未覆蓋的區(qū)域,進(jìn)度條覆蓋的顏色)
PROGBAR_SetBarColor(hProgBar_1,1,GUI_RED); //參數(shù)(句柄,1(0)代表本函數(shù)是顯示進(jìn)度條覆蓋的區(qū)域還未覆蓋的區(qū)域,進(jìn)度條未覆蓋的顏色)
PROGBAR_SetValue(hProgBar_1,99); //參數(shù)(句柄 ,99是進(jìn)度條顯示的99%)
while(1)
{
i=!i;
LED2(i);
LED3(i);
PROGBAR_SetValue(hProgBar_1,cnt); //顯示進(jìn)度條1控件 的進(jìn)度
OSTimeDlyHMSM(0,0,1,0); //將一個(gè)任務(wù)延時(shí)若干時(shí)間(設(shè)定時(shí)、 分、 秒、 毫秒)
WM_Exec();
cnt++;
if(cnt>=100)
{
cnt=0;
}
}
}
//LED1任務(wù)
void led1_task(void *pdata)
{
u8 i;
u16 cnt;
hProgBar_2 = PROGBAR_Create(0, 80, 240, 40, WM_CF_SHOW); //設(shè)置進(jìn)度條的大小坐標(biāo)參數(shù)
PROGBAR_SetBarColor(hProgBar_2,0,GUI_GREEN); //參數(shù)(句柄,1(0)代表本函數(shù)是顯示進(jìn)度條覆蓋的區(qū)域還未覆蓋的區(qū)域,進(jìn)度條覆蓋的顏色)
PROGBAR_SetBarColor(hProgBar_2,1,GUI_RED); //參數(shù)(句柄,1(0)代表本函數(shù)是顯示進(jìn)度條覆蓋的區(qū)域還未覆蓋的區(qū)域,進(jìn)度條未覆蓋的顏色)
while(1)
{
//GUIDEMO_main(); //運(yùn)行DEMO代碼
i=!i;
LED1(i);
LED4(i);
PROGBAR_SetValue(hProgBar_2,cnt); //顯示進(jìn)度條2控件 的進(jìn)度
WM_Exec(); //顯示生效
OSTimeDlyHMSM(0,0,0,500); //將一個(gè)任務(wù)延時(shí)若干時(shí)間(設(shè)定時(shí)、 分、 秒、 毫秒)
cnt++;
if(cnt>=100)
{
cnt=0;
}
}
}
效果圖:
?
第五章 移植DEMO代碼
?
將DEMO文件全部加入工程編譯,最后運(yùn)行DEMO代碼。
//LED0任務(wù)
void led0_task(void *pdata)
{
u8 i;
while(1)
{
i=!i;
LED2(i);
LED3(i);
GUI_TOUCH_Exec(); //監(jiān)視和刷新觸摸板
OSTimeDlyHMSM(0,0,0,10); //將一個(gè)任務(wù)延時(shí)若干時(shí)間(設(shè)定時(shí)、 分、 秒、 毫秒)
}
}
//LED1任務(wù)
void led1_task(void *pdata)
{
u8 i;
while(1)
{
GUIDEMO_main(); //運(yùn)行DEMO代碼
i=!i;
LED1(i);
LED4(i);
OSTimeDlyHMSM(0,0,0,10); //將一個(gè)任務(wù)延時(shí)若干時(shí)間(設(shè)定時(shí)、 分、 秒、 毫秒)
}
}
系統(tǒng)時(shí)間計(jì)算
如果跑UCOS系統(tǒng)可以設(shè)置UCOS工作頻率高一些: #define OS_TICKS_PER_SEC 1000 //一秒的節(jié)拍時(shí)間。
節(jié)拍時(shí)間計(jì)算方式:滴答時(shí)鐘中斷時(shí)間 * 節(jié)拍次數(shù) = 1秒
第六章 常用相關(guān)函數(shù)解析
6.1 初始化函數(shù)
函數(shù)原型 |
GUI_Init(); |
函數(shù)功能 |
初始化GUI的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和變量,使用GUI任何功能之前必須調(diào)用本函數(shù) |
函數(shù)參數(shù) |
|
返回值 |
|
6.2 設(shè)置XY坐標(biāo)
函數(shù)原型 |
GUI_GotoXY(int x, int y) |
函數(shù)功能 |
設(shè)置當(dāng)前的XY坐標(biāo) |
函數(shù)參數(shù) |
X :橫坐標(biāo) Y:縱坐標(biāo) |
返回值 |
成功返回0 |
相關(guān)函數(shù) |
GUI_GotoX() 設(shè)置當(dāng)前X坐標(biāo) GUI_GotoY() 設(shè)置當(dāng)前Y坐標(biāo) |
6.3 設(shè)置LCD背景顏色
函數(shù)原型 |
void GUI_SetBkColor(GUI_COLOR color) |
函數(shù)功能 |
設(shè)置LCD背景顏色 |
函數(shù)參數(shù) |
Color:顏色值 |
返回值 |
無 |
6.4 設(shè)置LCD前景顏色
函數(shù)原型 |
void GUI_SetColor(GUI_COLOR color) |
函數(shù)功能 |
設(shè)置LCD前景顏色 |
函數(shù)參數(shù) |
Color:顏色值 |
返回值 |
無 |
所屬文件 |
GUI_SetColor.c |
6.5 在當(dāng)前坐標(biāo)顯示文本
函數(shù)原型 |
void GUI_DispString(const char GUI_UNI_PTR *s) |
函數(shù)功能 |
在當(dāng)前坐標(biāo)顯示文本-字符串 |
函數(shù)參數(shù) |
*s :字符串指針 |
返回值 |
無 |
所屬文件 |
GUI_DispString.C |
示例:
GUI_DispString("Hello World!!"); //顯示字符串 |
6.6 指定坐標(biāo)顯示文本
函數(shù)原型 |
void GUI_DispStringAt(const char GUI_UNI_PTR *s, int x, int y) |
函數(shù)功能 |
在指定坐標(biāo)顯示文本-字符串 |
函數(shù)參數(shù) |
*s :字符串指針 X:橫坐標(biāo) Y:縱坐標(biāo) |
返回值 |
無 |
所屬文件 |
GUI_DispStringAt.c |
示例:
GUI_DispStringAt("Hello World!!",0,100); //顯示字符串 |
6.7 顯示文本API函數(shù)集合
函 數(shù) |
說 明 |
GUI_DispChar() |
在當(dāng)前坐標(biāo)顯示單個(gè)字符 |
GUI_DispCharAt() |
在指定坐標(biāo)顯示單個(gè)字符 |
GUI_DispChars() |
按指定重復(fù)次數(shù)顯示一個(gè)字符 |
GUI_DispChars() |
在當(dāng)前坐標(biāo)顯示字符串 |
GUI_DispStringAt() |
在指定坐標(biāo)顯示字符串 |
GUI_DispStringAtCEOL() |
在指定坐標(biāo)顯示字符串,并清除到行末 |
GUI_DispStringInRect() |
在指定矩形區(qū)域內(nèi)顯示字符串 |
GUI_DispStringLen() |
在當(dāng)前坐標(biāo)顯示指定字符數(shù)量的字符串 |
6.8 選擇文本繪圖模式
函數(shù) |
功能 |
GUI_SetTextMode(); |
設(shè)置文本繪圖模式 |
6.9 選擇文本對齊方式
函數(shù) |
功能 |
GUI_GetTextAlign() |
返回當(dāng)前文本對齊模式 |
GUI_SetLBorder() |
設(shè)置換行后的左邊界 |
GUI_ SetTextAlign() |
設(shè)置文本對齊模式 |
6.10 設(shè)置當(dāng)前文本坐標(biāo)
函數(shù) |
功能 |
GUI_GotoX() |
設(shè)置當(dāng)前X坐標(biāo) |
GUI_GotoXY() |
設(shè)置當(dāng)前YX坐標(biāo) |
GUI_GotoY() |
設(shè)置當(dāng)前Y坐標(biāo) |
6.11 返回當(dāng)前文本坐標(biāo)
函數(shù) |
功能 |
GUI_GetDispPosX() |
返回當(dāng)前X坐標(biāo) |
GUI_GetDispPosY() |
返回當(dāng)前Y坐標(biāo) |
6.12 清除視窗相關(guān)函數(shù)
函數(shù) |
功能 |
GUI_Clear() |
清除活動視窗(如果背景是活動視窗,則是清除整個(gè)屏幕) |
GUI_DispCEOL() |
清除從當(dāng)前坐標(biāo)到行末的顯示內(nèi)容 |
第七章 儲存設(shè)備
默認(rèn)情形下,存儲設(shè)備是被激活的。為了優(yōu)化軟件的性能,對存儲設(shè)備的支持可以在配
置文件 GUIConf.h 中加入下面一行而關(guān)閉:
#define GUI_SUPPORT_MEMDEV 0
要是使用時(shí),需要將宏開關(guān)打開:
完整資料包下載: https://download.csdn.net/download/xiaolong1126626497/24238463
審核編輯:符乾江
-
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
356011 -
ucguibuilder
+關(guān)注
關(guān)注
0文章
2瀏覽量
6095
發(fā)布評論請先 登錄
相關(guān)推薦
評論