成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

基于STM32移植UCGUI圖形界面框架(3.9.0源碼版本)

microcosm1994 / 1477人閱讀

摘要:基于的移植教程可以看這里二介紹是一種用于嵌入式應(yīng)用的圖形支持軟件。適用于使用任何控制和的任何尺寸的物理和虛擬顯示。一個(gè)層,稱(chēng)作驅(qū)動(dòng)程序,包含了對(duì)的全部訪問(wèn)。并在主函數(shù)里加入下面的代碼,測(cè)試移植是否成功。

一、環(huán)境介紹

keil:? ? 5.25

MCU:? STM32F103ZET6

UCGUI版本:? 3.90(純?cè)创a版本)

3.9.0是源碼版本,可以看到全部源碼,也方便學(xué)習(xí);后續(xù)的版本都是提供lib庫(kù)文件,不再提供源碼了。

基于STM32的STemwin移植教程可以看這里:?https://blog.csdn.net/xiaolong1126626497/article/details/117933355https://blog.csdn.net/xiaolong1126626497/article/details/117933355

二、UCGUI介紹

2.1 UCGUI

? ? ? μC/GUI 是一種用于嵌入式應(yīng)用的圖形支持軟件。它被設(shè)計(jì)用于為任何使用一個(gè)圖形 LCD的應(yīng)用提供一個(gè)有效的不依賴(lài)于處理器和 LCD 控制器的圖形用戶接口。它能工作于單任務(wù)或多任務(wù)的系統(tǒng)環(huán)境下。 μC/GUI 適用于使用任何 LCD 控制和 CPU 的任何尺寸的物理和虛擬顯示。它的設(shè)計(jì)是模塊化的,由在不同的模塊中的不同的層組成。一個(gè)層,稱(chēng)作 LCD 驅(qū)動(dòng)程序,包含了對(duì) LCD 的全部訪問(wèn)。 μC/GUI 適用于所有的 CPU,因?yàn)樗?100%由的 ANSI 的 C 語(yǔ)言編寫(xiě)的。
? ? μC/GUI 很適合大多數(shù)的使用黑色/白色和彩色 LCD 的應(yīng)用程序。 它有一個(gè)很好的顏色管理器,允許它處理灰階。 ?μC/GUI 也提供一個(gè)可擴(kuò)展的 2D 圖形庫(kù)和一個(gè)視窗管理器,在使用一個(gè)最小的 RAM 時(shí)能支持顯示窗口。

? ? UCGUI官網(wǎng)地址:Micrium Software and Documentation - Silicon Labs

?

2.2? GUI相關(guān)文件介紹

?

①.GUI/LCDDriver 文件夾中存放的是一些 LCD 驅(qū)動(dòng)代碼,如果你使用的 LCD 在

這里可以找到代碼,可以直接通過(guò) Config 中的 LCDConfig.h :

#define LCD_CONTROLLER -1 // -1:表示沒(méi)有選擇的 LCD 驅(qū)動(dòng),而是使用里邊的樣本程序進(jìn)行修改。

uCGUI 中具體支持哪些 LCD 可以查詢《uCGUI 用戶手冊(cè)》的第 22 章 LCD 驅(qū)動(dòng)程序。里邊詳細(xì)的說(shuō)明了,支持些什么控制器的 LCD。

②.在工程中只需加載需要的 LCD 驅(qū)動(dòng)代碼文件即可。如果設(shè)置為-1,則選擇加載 LCDDummy.C 或 LCDTemplate.C 文件(不同的版本,此代碼的文件名可能會(huì)不同)。

文件夾的主要內(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:?字庫(kù)。?

6)?JPEG:?圖片操作函數(shù)。?

7)?LCDDriver:?LCD驅(qū)動(dòng)支持。?

8)?MemDev:?內(nèi)存設(shè)備支持。主要功能是防止在項(xiàng)目重疊時(shí)觸摸屏的閃爍。

?9)?Widget:?窗體控件庫(kù)。

?10)?WM:?窗口管理庫(kù)。?

??注意:JPEG、MemDev、Widget、WM是可裁剪項(xiàng),若要支持Widget(窗體控件),需要

? ?WM(窗口管理器)的支持;使用控件時(shí),需要將相應(yīng)的頭文件包含進(jìn)去,比如我們需要使用按鈕BUTTON,那么我們需要先包含BUTTON.h頭文件,否則控件即使支持也不可用。

二、移植步驟

移植準(zhǔn)備工作

  1. 一個(gè)塊STM32開(kāi)發(fā)板
  2. 一個(gè)完好的LCD顯示屏
  3. 一個(gè)完整的基于開(kāi)發(fā)板的KEIL工程(包含完整的LCD驅(qū)動(dòng)代碼)
  4. 一個(gè)完整的UCGUI 3.9源碼包

2.1 創(chuàng)建文件夾

首先在KEIL工程目錄下創(chuàng)建一個(gè)UCGUI的文件夾,用來(lái)存放移植需要用到的源碼文件。

效果圖:

?

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工程

打開(kāi)KEIL工程,添加UCGUI源代碼。

? ? 根據(jù) UCGUI/GUI 目錄下的文件創(chuàng)建KEIL的工程目錄,名字最好用源碼默認(rèn)的名字不要修改,以防止后面查找不方便。額外再添加創(chuàng)建一個(gè)UCGUI_Config目錄,用來(lái)存放UCGUI的配置文件創(chuàng)建好的工程目錄效果圖:

2.4 添加UCGUI源文件

工程創(chuàng)建OK之后,將對(duì)應(yīng)源文件添加到KEIL工程目錄下,將對(duì)應(yīng)的頭文件加入工程。

效果圖:

添加的源文件和頭文件需要對(duì)照GUI文件夾逐個(gè)添加,不能漏掉文件。

源文件只添加.c 。其他文件一律不添加。

UCGUI_Config文件夾添加的文件如下所示:

UCGUI/GUI_X/GUI_X.c          //OS系統(tǒng)接口UCGUI/Config/GUITouchConf.h   //配置觸摸屏UCGUI/Config/ GUIConf.h       //配置GUIUCGUI/Config/ LCDConf.h       //配置LCD顯示屏參數(shù)

?效果圖:

?

2.5 修改配置文件

修改LCD配置文件,打開(kāi)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 控制器的具體型號(hào)*/#define LCD_FIXEDPALETTE (565) /*RGB 顏色位數(shù)*/#define LCD_SWAP_RB (1)        /*紅藍(lán)反色交換*/#define LCD_INIT_CONTROLLER() LCD9341_Init (); /*底層初始化函數(shù),自己寫(xiě)的,而非源碼自帶,這一步非常重要*/#endif /* LCDCONF_H */

?

因?yàn)槲覀冇?/span>LCD的驅(qū)動(dòng),不需要UCGUILCD驅(qū)動(dòng)配置。

其中:LCD9341_Init (); 函數(shù)是我們自己工程的LCD初始化函數(shù)。我們的LCD初始化函數(shù)名字不能是LCD_Init(),因?yàn)?/span>UCGUI自帶的LCD初始化函數(shù)也是這個(gè)名字,我們自己的工程里也不能出現(xiàn)LCD名字的結(jié)構(gòu)體。不然,會(huì)出現(xiàn)重定義的錯(cuò)誤。

?修改UCGUI配置文件,打開(kāi)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的基本操作熟悉之后再打開(kāi)使用。

2.6 修改UCGUI底層驅(qū)動(dòng)

打開(kāi)LCDDummy.c文件,添加UCGUI底層的畫(huà)點(diǎn)函數(shù)和讀點(diǎn)函數(shù)。

先在LCDDummy.c里加入LCD頭文件。并且定義使用自己的LCD驅(qū)動(dòng)。

添加畫(huà)點(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); //添加畫(huà)點(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ù)里加入下面的代碼,測(cè)試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);      //畫(huà)圓  

?代碼寫(xiě)完,編譯工程,編譯時(shí)間1-10分鐘左右(電腦性能決定)。

??效果圖:

編譯成功之后,將代碼下載到開(kāi)發(fā)板運(yùn)行。

效果如圖:

2.8 編譯錯(cuò)誤解決辦法

如果編譯出現(xiàn)下面的錯(cuò)誤:

../OBJ/KEY.axf: Error: L6218E: Undefined symbol exit (referred from jerror.o).

根據(jù)錯(cuò)誤提示,打開(kāi)jerror.c文件,找到error_exit函數(shù),將該函數(shù)的最后一行代碼exit(EXIT_FAILURE); 該為return 。改完,再次編譯,錯(cuò)誤解決。

效果圖:

方法:

  1. 查找自己原來(lái)的工程里是否有以LCD命名的相關(guān)結(jié)構(gòu)體,
  2. 查看原來(lái)工程里的LCD初始化函數(shù)是否是LCD_Init(), 如果是,就修改函數(shù)名字。

一般解決了上述的問(wèn)題,移植一般都沒(méi)有問(wèn)題。出現(xiàn)了問(wèn)題,可以查看錯(cuò)誤信息,判斷是什么錯(cuò)誤,針對(duì)性解決。

三、加入觸摸屏

? ? 加入觸摸屏功能之前,要保證原本工程已經(jīng)有正常的觸摸屏驅(qū)動(dòng)代碼,能正確的轉(zhuǎn)換觸摸屏的X Y坐標(biāo)值。

3.1 打開(kāi)GUIConf.h文件,修改當(dāng)前GUI支持觸摸屏

#define GUI_SUPPORT_TOUCH         (1)  /* 支持觸摸屏 */#define GUI_ALLOC_SIZE             5000   //修改內(nèi)存空間改大一點(diǎn),防止編譯不過(guò)  

效果圖:

3.2 打開(kāi)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ū)動(dòng)頭文件。

修改代碼如下:

#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 輪詢檢測(cè)觸摸屏

如果GUI沒(méi)有加入系統(tǒng),需要定義一個(gè)定時(shí)器去掃描觸摸屏,在定時(shí)器的中斷服務(wù)函數(shù)里加入GUI_TOUCH_Exec();函數(shù)。掃描的頻率為:10毫秒一次

如果GUI加入了系統(tǒng),可以創(chuàng)建一個(gè)多帶帶的任務(wù),在任務(wù)里添加GUI_TOUCH_Exec();

第四章 加入U(xiǎn)COSII系統(tǒng)

4.1 移植準(zhǔn)備步驟

本小節(jié)的的移植是基于UCOSII系統(tǒng)的移植

移植系統(tǒng)之前的準(zhǔn)備工作:

  1. 一份UCOSII源碼
  2. 熟悉UCOSII的基本操作(創(chuàng)建工程和任務(wù)編寫(xiě))

打開(kāi)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文件會(huì)出現(xiàn)重定義。

ucos_ii.c的代碼作用是加載源文件,因?yàn)?/span>UCOSII其他源文件我們已手動(dòng)加入到工程,已不需要ucos_ii.c的代碼

4.4 設(shè)置UCOSII任務(wù)調(diào)度時(shí)間基準(zhǔn)

初始化滴答時(shí)鐘,開(kāi)啟滴答時(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 修改錯(cuò)誤與正確的宏

4.6 添加UCOS支持文件

在進(jìn)行上邊的步驟,之后,編譯工程,會(huì)出現(xiàn)如下的錯(cuò)誤:

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)錯(cuò)提示信息,打開(kāi)GUITask.c 文件。GUITask.c有提示需要在GUI_X.c文件實(shí)現(xiàn)幾個(gè)函數(shù)。

根據(jù)提示,繼續(xù)打開(kāi)GUI_X.C 。前邊有提到,GUI_X.C文件主要是提供OS系統(tǒng)接口,配置/系統(tǒng)相關(guān)的外部環(huán)境。

效果圖:

?我們當(dāng)前移植的OS是UCOSII系統(tǒng),打開(kāi)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會(huì)出現(xiàn)重定義的錯(cuò)誤。

接著修改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ù)測(cè)試效果

?

//開(kāi)始任務(wù)void start_task(void *pdata){  OS_CPU_SR cpu_sr=0;	pdata = pdata;   OS_ENTER_CRITICAL();			      //進(jìn)入臨界區(qū)(無(wú)法被中斷打斷)     	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;	/***************************************	畫(huà)一個(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:顏色值

返回值

無(wú)

6.4 設(shè)置LCD前景顏色

函數(shù)原型

void GUI_SetColor(GUI_COLOR color)????????

函數(shù)功能

設(shè)置LCD前景顏色

函數(shù)參數(shù)

Color:顏色值

返回值

無(wú)

所屬文件

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 :字符串指針

返回值

無(wú)

所屬文件

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)

返回值

無(wú)

所屬文件

GUI_DispStringAt.c

示例:

GUI_DispStringAt("Hello World!!",0,100);? //顯示字符串

6.7 顯示文本API函數(shù)集合

函 數(shù)

說(shuō) 明

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 選擇文本對(duì)齊方式

函數(shù)

功能

GUI_GetTextAlign()

返回當(dāng)前文本對(duì)齊模式

GUI_SetLBorder()

設(shè)置換行后的左邊界

GUI_ SetTextAlign()

設(shè)置文本對(duì)齊模式

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()

清除活動(dòng)視窗(如果背景是活動(dòng)視窗,則是清除整個(gè)屏幕)

GUI_DispCEOL()

清除從當(dāng)前坐標(biāo)到行末的顯示內(nèi)容

?第七章 儲(chǔ)存設(shè)備

默認(rèn)情形下,存儲(chǔ)設(shè)備是被激活的。為了優(yōu)化軟件的性能,對(duì)存儲(chǔ)設(shè)備的支持可以在配
置文件 GUIConf.h 中加入下面一行而關(guān)閉:
#define GUI_SUPPORT_MEMDEV? 0

要是使用時(shí),需要將宏開(kāi)關(guān)打開(kāi):

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/120933.html

相關(guān)文章

  • 基于STM32Cube MX開(kāi)發(fā)的TencentOS-Tiny軟件包

    摘要:基于開(kāi)發(fā)的軟件包導(dǎo)師汪禮超學(xué)員崔林威摘要騰訊物聯(lián)網(wǎng)操作系統(tǒng)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開(kāi)發(fā)的實(shí)時(shí)操作系統(tǒng),具有低功耗,低資源占用,模塊化,可裁剪等特性。圖中斷函數(shù)處理進(jìn)行生成工程配置,按如下界面進(jìn)行配置,最后點(diǎn)擊,并點(diǎn)擊。 ...

    shiyang6017 評(píng)論0 收藏0
  • SimpleFOC移植STM32(四)—— 閉環(huán)控制

    摘要:力矩控制模式電機(jī)在運(yùn)行過(guò)程的電流,始終等于給定的值。設(shè)定電流為零,彈簧不被拉伸。比如機(jī)械臂從點(diǎn)運(yùn)動(dòng)到點(diǎn),并限制揮舞過(guò)程中的最大速度和最大力矩。 目錄 說(shuō)明一、電機(jī)...

    stefanieliang 評(píng)論0 收藏0
  • stm32f373利用esp8266連接onenet平臺(tái)

    摘要:添加設(shè)備名和鑒權(quán)信息。記錄如下數(shù)據(jù)二引腳連接和接電源接地和連接至配置的串口三代碼編寫(xiě)串口配置單片機(jī)需配置兩個(gè)串口,串口打印至串口助手,顯示連接狀態(tài)。串口用來(lái)發(fā)送信息至串口配置代碼如下系列配置和系列配置不同點(diǎn)在于口上拉和推挽配置略有不同。 ...

    sorra 評(píng)論0 收藏0
  • 移植OpenHarmony到星空派ARM芯片【1】

    摘要:已初始化的讀寫(xiě)數(shù)據(jù),程序中定義并且初始化的全局變量和靜態(tài)變量位于此處。好了,初步移植要點(diǎn)講完了,下一篇文章講內(nèi)核配置文件函數(shù)啟動(dòng)后如何進(jìn)入鴻蒙輕量?jī)?nèi)核。 9月30日,OpenHarmony 3.0 LTS版本發(fā)布,新版介紹見(jiàn)OpenHarmony 3.0 發(fā)布:OpenHarmony 3.0...

    mist14 評(píng)論0 收藏0
  • 聯(lián)盛德W806-KIT開(kāi)發(fā)板試用評(píng)測(cè)系列之一:開(kāi)發(fā)環(huán)境搭建篇

    摘要:大信刷抖音時(shí),偶然蹦出了聯(lián)盛德物聯(lián)開(kāi)發(fā)板這個(gè)廣告。板子做的很精致,毫米厚的板子,平滑的板邊緣,亮紫色和鍍金的過(guò)孔透露著高檔品質(zhì),同時(shí)收到售后支持的加好友,在售后支持指導(dǎo)下加入了聯(lián)盛德官方的開(kāi)發(fā)群里,開(kāi)始了開(kāi)發(fā)測(cè)試工作。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

    newsning 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

microcosm1994

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<