谁用过UCGUI这个嵌入式系统啊
发布网友
发布时间:2022-04-22 19:42
我来回答
共1个回答
热心网友
时间:2023-09-24 09:23
uC/GUI是Micrium公司研发的通用的嵌入式用户图像界面软体。它给任何使用图像LCD的应用程式提供单独于处理器和LCD控制器之外的有效的图形用户接口。
基本介绍
外文名 :UC-GUI 类型 :嵌入式用户图像界面软体 研发公司 :Micrium公司 特点 :单一任务环或多任务环境
软体简介,软体特点,文档组织,视窗管理,
软体简介
它能够套用于单一任务环境,也能够套用于多任务环境中。uC/GUI能够套用于任何LCD控制器和CPU的任何尺寸的物理显示或模拟显示中。
软体特点
适用于任何8位/16位/32位CPU,可允许于支持ANSI C的任何编译器适用于任何控制器驱动任何LCD(单色,灰度,或彩色)通过配置宏,可支持任何接口可配置显示尺寸可在LCD的任何一点上显示字元和画点阵图对于显示尺寸和速度提供最佳化进程,编译时间依赖于采用的最佳化进程支持虚拟显示,虚拟显示的尺寸比实际显示大。
文档组织
uC/GUI目录下的文档有配置文档目录Config,GUI库函式目录,连同为GUI编写的应用程式目录。下面分别简要介绍相应目录下的函式,更为周详的文档介绍请参考我的uC/GUI移植的原始码。 uC/GUI\Config\目录: GUICONF.h:配置GUI移植到不同作业系统的选项。在本论文中配置移植到uC/OSII中,允许多任务调用uC/GUI函式。 GUITouchConf.h:配置触控萤幕的选项连同编写触控萤幕的驱动。本文移植uC/GUI所使用的LCD屏不支持触控萤幕,所以此文档为空。 LCD_Init.C: LCD控制器的初始化文档。 LCD_Conf.h: LCD显示屏的选项文档,包括bpp,调试板模式,水平、竖直方向的解析度等等。 uC/GUI\GUI\AntiAlias\目录:这个目录中包含9个文档,处理显示的边缘模糊效果,也就是抗锯齿和最佳化LCD锯齿。液晶屏上画斜线往往都有锯齿,所以通过最佳化算法进行美化。 uC/GUI\GUI\ConvertColor\目录:这个目录中包含14个.C文档,涉及调色板模式。uC\GUI的调色板模式支持111模式,222模式,223,323,332,444,555,565,8666等相关模式。我在论文中使用的LCD屏,为单色16级灰度屏,因而不涉及到这些模式。但为了保持UC\GUI文档的完整性,该目录连同目录下14个文档,仍然保存在移植文档中。 uC/GUI\GUI\ConvertMono\目录:此目录下的文档描述单色显示的不同模式,包含4个文档。 uC/GUI\GUI\Core:此目录下包含129个文档,是uC/GUI的核心部分。包括GUI头文档,GUI显示各种文本,二进制,十进制,十六进制,字元型文本,字元串,在不同的位置显示二进制,十进制,十六进制,字元型文本,字元串等;GUI配置各种字型;GUI的2-D图像库,GUI绘图函式,在各种位置绘各种点,线,点阵图,多边形,长方形,圆等等;GUI获取函式,获取当前点,线,点阵图,多边形,长方形,圆,当前字型,当前二进制,十进制,十六进制,字元型文本,字元串等函式;配置GUI画笔函式;GUI支持的滑鼠函式;GUI支持的键盘函式,GUI支持的触控萤幕函式;GUI配置LCD函式等等。这些函式,在uC/GUI系统中都是必须的函式。正是这些函式的组合,使得uC/GUI具备复杂而且完备的图像用户接口。而且,这些函式的组合,使得uC/GUI能够单独的使用,也能够通过配置文档,移植到各种作业系统中使用。 uC/GUI\GUI\Font:此目录下包含的是uC/GUI支持的字型。 uC/GUI\GUI\LCDDriver:LCDAPI目录。该目录下包含很多已完备的LCD控制器的驱动程式连同API函式。 uC/GUI\GUI\MemDev:MemDev目录。MemDev主要用于防止在画交迭图时产生的抖动。uC/GUI函式绘图不使用MemDev时,画图操作直接写到终端上显示,交迭绘图执行时刷新萤幕,多次刷新时就会出现抖动。例如,要在背景色中画图,且在前景中写一些透明的文字,实现的步骤就是先画图,然后写文字,那么结果就会出现文字的抖动。假如在程式中使用MemDev,则任何的执行操作都在MemDev中执行,当任何的操作都执行完毕之后,最后的结果才会送到萤幕上显示,因而能够避免多次刷新,从而避免抖动。此目录下包含这MemDev的任何函式,包括创建MemDev函式,激活MemDev,执行画图操作,显示到终端,删除MemDev函式等等。 uC/GUI\GUI\Touch:触控萤幕驱动函式所在目录。uC/GUI只支持模拟的触控萤幕。因而此目录下只包含模拟触控萤幕。 uC/GUI\GUI\Widget:此目录包含视窗控制项函式,总共46个函式。UC/GUI中视窗控制项机制时uC/GUI的实现难点,也是套用难点。运用视窗管理和回调机制,运用视窗控制项函式,能够任意在LCD萤幕上实现类似于windows的界面,这样完备的功能在工业自动化控制和触控萤幕套用上有着深远而积极的意义。此目录下的函式主要包括uC/GUI的视窗控制项,如按钮BUTTON,校验窗CHECKBOX,编辑区EDIT,视窗框FRAMEWIN,列表LISTBOX,进度条PROGBAR,音频按钮RADIOBUTTON,滚动条SCROLLERBAR,改变值的灰度条SLIDER,连同文本框TEXT相关的各种函式。 uC/GUI\GUI\WM:此目录包括视窗管理函式,总共52个函式。UC/GUI中,视窗管理中的讯息传递机制和回调机制,也是uC/GUI的实现难点和套用难点。4.3节中将周详介绍这两点。此目录下的函式主要包括配置、返回、建立背景视窗、父视窗、各种子视窗连同相应的尺寸、视窗句柄,起点x,y坐标,视窗宽度,高度,位置等等,还包括改变视窗的大小,连同最关键的视窗的回调函式,视窗重绘函式等等。
视窗管理
4.3.1简介 uC/GUI的视窗管理是个单独的软体,不是uC/GUI的基本组成部分。周详代码见\uCGUI\GUI\WM。 当使用uC/GUI视窗管理时,任何能显示在显示终端上的内容都包含在一个视窗里面,这个视窗是LCD萤幕上的一个给用户画图或显示目标的区域。视窗能够是任何尺寸的,能够一次在萤幕上显示多个视窗,也能够在其他视窗当中或之前显示视窗。 视窗管理的几个名词: 活动视窗: 当前正在用来画图或是显示操作的视窗。 回调函式: 回调函式是由用户定义的,当特定事件发生时,指示图像系统调用特定函式的函式。通常当视窗的内容发生改变时,他们用来自动重绘视窗。例如,视窗内显示一幅点阵图,当视窗移动时,点阵图并不会自动移动,此时,就需要调用回调函式对视窗进行重绘,即,从观众的角度来看,移动视窗和视窗内容。 子/父视窗: 子视窗是相对于父视窗定义的视窗。无论何时,只要父视窗移动,则子视窗们都要相应移动。子视窗被父视窗完全包含。拥有同一个父视窗的子视窗们互相间称为兄弟。客户区视窗的客户区就是视窗的可用区。假如视窗包含方框或标题栏,则客户区就是方框或标题栏的内部区域。 句柄: 当一个新的视窗被创建时,WM分配一个唯一的标识符,称为句柄。句柄用在后续对该视窗操作的任何函式中,而且能够利用该句柄唯一标识该视窗。 有效视窗/无效视窗: 有效视窗是个已完全更新,无需重绘的视窗。不管是完全重绘还是局部重绘。当视窗内容发生改变时,WM则标识视窗无效。下一次重绘之后(调用回调函式),视窗又变为有效。 4.3.2回调机制 uC/GUI提供给视窗和视窗控制项的回调机制的背后,是一 个事件驱动标志。在大多数的视窗系统中,流控不但仅时从用户程式到图像系统,而且还要能够从用户程式到图像系统,并且能够通过用户程式提供的回调函式,返 回到用户程式。这个机制,就称为回调机制。在uC/GUI中,回到机制用来在视窗管理中出控制视窗的重绘操作,这使得视窗管理的有效性成为可能。 4.3.3回调函式的使用 使用回调函式建立一个视窗时,必须有一个回调函式。所用的回调函式必须有如下原型: void callback (WM_MESSAGE *pMsg)。其中pMsg为指向讯息的指针。 回调函式执行的功能依赖于所接收到的讯息。以上原型后一般跟着switch表达式,表达式定义不同的case表达式下不同的信息对应的不同行为,至少要有一个重绘函式:WM_PAINT()。如程式清单4.1,建立一个自动更新视窗的回调函式 程式清单 4.1 建立一个自动更新视窗的回调函式 void WinHandler (WM_MESSAGE * pMsg) { switch (pMsg->MsgId) { case: WM_PAINT GUI_SetBkColor(0xff00); GUI_Clear(); GUI_DispStringAt(“hello world”,0,0); Break; } } 使用回调函式,更为周详的示例如程式清单4.2所示: 程式清单4.2 回调函式 #include "GUI.H" /* 背景窗的回调函式*/ static void cbBackgroundWin(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_PAINT: GUI_Clear(); default: WM_DefaultProc(pMsg); } } /* 前景窗的回调函式*/ static void cbForegroundWin(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(GUI_GREEN); GUI_Clear(); GUI_DispString("Foreground window"); default: WM_DefaultProc(pMsg); } } /* 回调机制 */ static void DemoRedraw(void) { GUI_HWIN hWnd; while(1) { /*创建一个前景窗 */ hWnd = WM_CreateWindow(10, 10, 100, 100, WM_CF_SHOW, cbForegroundWin, 0); /*显示前景窗*/ GUI_Delay(1000); /* 删除前景窗 */ WM_DeleteWindow(hWnd); GUI_DispStringAt("Background of window has not been redrawn",10, 10); /* 等待,显示并不重绘 */ GUI_Delay(1000); GUI_Clear(); /* 配置背景窗的回调功能 */ WM_SetCallback(WM_HBKWIN, cbBackgroundWin); /*创建一个前景窗 */ hWnd = WM_CreateWindow(10, 10, 100, 100,WM_CF_SHOW, cbForegroundWin, 0); /* 显示前景窗*/ GUI_Delay(1000); /*删除前景窗 */ WM_DeleteWindow(hWnd); /* 等待,显示将重绘*/ GUI_Delay(1000); /* 删除回调函式*/ WM_SetCallback(WM_HBKWIN, 0); } } void main(void) { GUI_Init(); DemoRedraw(); } 4.3.4 讯息传递机制 程式清单4.2中,回调函式执行的功能依赖于所接收到的讯息。Switch语句中根据讯息的类型,分别执行不同的功能。 WM_MESSAGE的成员如下: MsgId:讯息类型 HWin: 目的视窗 HWinSrc: 源视窗 Data.p : 数据指针 Data.v: 数据值 其中MsgId的类型如下: WM_PAINT: 视窗重绘 WM_CREATE: 视窗一建立就传送 WM_DELETE: 视窗一删除就传送 WM_SIZE : 视窗尺寸发生改变就传送 WM_MOVE : 视窗移动就传送 WM_SHOW : 接收到show命令就传送 WM_HIDE : 接收到hide命令就传送 WM_TOUCH: 触控萤幕信息 应用程式还能够为自己定义额外的讯息。为确保他们不用到uC/GUI的讯息ID,用户定义的讯息从WM_USER后面开始,如: #define MY_MESSAGE_AAA WM_USER +0 #defineMY_MESSAGE_BBB WM_USER +1