ucgui显示数值

ucgui显示数值
ucgui显示数值

ucGUI第二篇:Displaying Values(显示数值)

说明:我的硬件平台STM32F103ZET6,开发软件是KEIL V4.12 ,OS系统和GUI的版本分别是uCOS-II V2.86,ucGUI V3.94。

数值的显示部分也比较的简单些,总体来说有几点要注意,我下面就把要注意的问题说说。

(-)十进制数的显示

GUI_DispDec(),

这个要注意的是首位不能是0,是0的话显示会出现错误。

显示负数的话,负号也要算在No. of digits里面,切记,要不也会出错。

设置的No. of digits比实际要显示的字符串大的话,前面会补0。

设置的No. of digits比实际要显示的字符串小的话,会出现错位。

GUI_DispDecAt()

这个的显示类似上面,只是多了个可以设置显示的坐标。

GUI_DispDecMin()

不需要指定长度,自动的用最少的字符显示,如果需要对其方式且显示的个数不一样的话,这个方式不太合适。

这个的首位也不可以是0,是0的话也会出现错位。

GUI_DispDecShift()

首位也不可以是0。

负号和小数点都要算在No. of digits,最大支持9位。

No. of digits设置的大了的话前面要补0。

GUI_DispSDec()

类似于GUI_DispDec(),不支持首位是0,不管是正的,还是负的,都要显示负号,而且这个正负号也要算在No. of digits里面。

GUI_DispSDecShift()

这个是GUI_DispSDec()和GUI_DispDecShift()的合并版,只要注意No. of digits里面要包括正号负号还有小数点。

总结:用时一定要保证自己设置的No. of digits要大于等于自己实际要显示的。

多了的话前面会补零,少了的话就会出错的,显示一堆9.

(二)十六进制和二进制

GUI_DispBin()

GUI_DispBinAt()

GUI_DispHex()

GUI_DispHexAt()

这四个差不多,第一个最大支持32位的显示,后面三个中最大支持16位,No. of digits 设置的多了的话前面会补零,少了的话有几个显示几个。

关于这几个函数附上自己设计的例子,很能说明问题

GUI_SetBkColor(GUI_BLUE);

GUI_SetColor(GUI_LIGHTRED);

GUI_SetFont(&GUI_Font13B_ASCII);

GUI_Clear();

GUI_GotoXY(0,0);

GUI_DispDec(-123,4);

GUI_GotoXY(100,0);

GUI_DispDec(012,4);

GUI_GotoXY(200,0);

GUI_DispDec(1234,7);

GUI_GotoXY(300,0);

GUI_DispDec(1234,2);

GUI_DispDecAt(-123,0,20,5);

GUI_DispDecAt(045 ,100,20,3);

GUI_DispDecAt(345 ,200,20,5);

GUI_DispDecAt(345 ,300,20,2);

GUI_GotoXY(0,40);

GUI_DispDecMin(-33232);

GUI_GotoX(100);

GUI_DispDecMin(0032);

GUI_GotoX(200);

GUI_DispDecMin(00330);

GUI_GotoX(300);

GUI_DispDecMin(5980);

GUI_GotoXY(0,60);

GUI_DispDecShift(1234,4,2);

GUI_GotoX(100);

GUI_DispDecShift(01234,6,2);

GUI_GotoX(200);

GUI_DispDecShift(-1234,6,2);

GUI_GotoX(300);

GUI_DispDecShift(1234,5,2);

GUI_GotoXY(0,80);

GUI_DispDecShift(123456789,9,2);

GUI_GotoX(200);

GUI_DispDecShift(12345678,9,2);

GUI_GotoXY(0,100);

GUI_DispSDec(-1234,5);

GUI_GotoX(100);

GUI_DispSDec(1234,5);

GUI_GotoX(200);

GUI_DispSDec(1234,3);

GUI_GotoX(300);

GUI_DispSDec(0234,5);

GUI_GotoXY(0,120);

GUI_DispSDecShift(02345,7,3);

GUI_GotoX(100);

GUI_DispSDecShift(345,6,2);

GUI_GotoX(200);

GUI_DispSDecShift(12345,3,3);

GUI_GotoX(300);

GUI_DispSDecShift(-1234,6,3);

//测试二进制

GUI_GotoXY(0,140);

GUI_DispBin(0x08,8);

GUI_GotoX(100);

GUI_DispBin(0x88,9);

GUI_GotoX(200);

GUI_DispBin(0x08,6);

GUI_GotoX(300);

GUI_DispBin(0x08,2);

GUI_DispBinAt(0x55,0,160,8);

GUI_DispBinAt(0x55,100,160,7);

GUI_DispBinAt(0x05,200,160,4);

GUI_DispBinAt(0x05,300,160,16);

(三)浮点数

关于浮点的ucGUI里面有个很好的说明的例子,我这里直接的贴上 float f = 123.45678;

GUI_Clear()

GUI_SetFont(&GUI_Font8x8);

GUI_DispStringAt("GUI_DispFloat:\n",0,0);

GUI_DispFloat (f,9);

GUI_GotoX(100);

GUI_DispFloat (-f,9);

GUI_DispStringAt("GUI_DispFloatFix:\n",0,20);

GUI_DispFloatFix (f,9,2);

GUI_GotoX(100);

GUI_DispFloatFix (-f,9,2);

GUI_DispStringAt("GUI_DispSFloatFix:\n",0,40);

GUI_DispSFloatFix (f,9,2);

GUI_GotoX(100);

GUI_DispSFloatFix (-f,9,2);

GUI_DispStringAt("GUI_DispFloatMin:\n",0,60);

GUI_DispFloatMin (f,3);

GUI_GotoX(100);

GUI_DispFloatMin (-f,3);

GUI_DispStringAt("GUI_DispSFloatMin:\n",0,80);

GUI_DispSFloatMin (f,3);

GUI_GotoX(100);

GUI_DispSFloatMin (-f,3);

GUI_SetFont(&GUI_Font6x8);

GUI_DispStringAt("Press any key",0,GUI_VYSIZE-8);

UCGUI移植教程

UCGUI在STM32上移植教程 1说明 ●开发板芯片型号STM32F103VET6 ●板载液晶型号ILI9341 ●所需准备资料UCGUI3.90源码 ●一个工程模板 为了节约时间,此处所用模板为野火M3工程模板(3.5.0) 制作时间---2013-08-07 By NUAA---Kylin 2移植过程讲解 2.1首先打开工工程模板,页面如下,这个模板工程很简单

2.2在工程模板中新建两个文件夹 2.2.1命名为GUI与Mylib 2.2.2在GUI文件夹下添加以下内容 ●上述图片为UCGUI3.90源码中的一些文件夹 ●进入UCGUI3.90源码文件夹/Start,将Config文件夹原封不动的拷过来 ●进入UCGUI3.90源码文件夹/Start/GUI文件夹,将其中所有文件夹拷过来 ●在GUI文件夹下新建GUI_X文件夹,进入UCGUI3.90源码文件夹/ Sample/ GUI_X文件夹 中,如果带操作系统应该拷贝GUI_X_uCOS.c,如果不带操作系统拷贝GUI_X.c,在这里我们将将GUI_X.c拷贝到新建GUI_X文件夹。

2.2.3各文件夹说明 1)AntiAlias:9个C文件,主要用于抗锯齿的显示效果。 2)ConvertColor:彩色显示的色彩转换支持。 3)ConvertMono:(b/w)和灰度显示的色彩转换支持。 4)Core:核心文件,提供了GUI基本的功能。 5)Font:字库。 6)JPEG:图片操作函数。 7)LCDDriver:LCD驱动程序 8)MenDev:Memorydevice 支持。这个东西可用在很多情况下,但最主要的功能是防止在 项目重叠时,防止屏幕的闪烁。 9)Widget:窗体控件库。 10)WM:窗口管理库。 11)Config:配置文件。 12)GUI:源代码。 13)GUI_X:操作系统接口函数。 2.3添加组及源文件 2.3.1将GUI文件夹下的所有文件夹添加到GROUP 右键工程工程项目名选择manage components将这些组全部添加上如图

关于uCGUI移植详解

关于uCGUI在STM32上的移植移详解 首先我们得知道啥是μC/GUI: 它是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和LCD 控制器的图形用户接口。它能工作于单任务或多任务的系统环境下。 μC/GUI 适用于使用任何LCD 控制和CPU 的任何尺寸的物理和虚拟显示。 它的设计是模块化的,由在不同的模块中的不同的层组成。一个层,称作LCD 驱动程序,包含了对LCD 的全部访问。因为它100%由ANSI 的C 语言编写的,μ所以C/GUI 适用于所有的CPU。 我们知道windowsXP的操作界面,是通过窗口、按钮、等来对计算机进行操作,同样,我们所讲的uC/GUI也能实现类似效果。 在网上找了些教程,但是讲述的不够详细,导致我在移植过程中遇到了很多问题,自己重头开始自己一点点移植,遇到的问题也只能靠自己解决,终于在忙活了一天后把它搞定了。希望对初次进行移植的同学能有所帮助。下面是我的吐血总结: 所需工具:1、uC/GUI v3.90 尽量找到没有修改的源码 2、一个硬件开发平台、LCD底层驱动程序,我使用的是STM32F103ZE+TFT3.2寸LCD 3、MDK开发软件(就是Keil) 4、一个编译无误的工程模板 4、uC/GUI相关的中文手册 移植步骤:

第一步:首先,得把你的LCD底层驱动写好,既在裸机下,可以正常显示。 通常只需3个底层驱动函数: LCD_SetPoint(u16 x,u16,y,int color);//设置某点,及颜色 LCD_GetPoint(u16 x,u16 y); //读取某点及颜色返回 LCD_Init(); //LCD初始化硬件函数,这里改成其他名字如LCD2_Init();防止和 uC/GUI冲突 第二步:向事先准备好的工程中加入uC/GUI文件夹,在工程设置中包含相应头文件 工程目录如下: 第三步:配置LCDConf.h、GUIConf.h、GUITouchConf.h(由于我没使用触摸功能,此配置在此不讲。) 配置LCDConf.h文件如下:LCD的设置 #ifndef LCDCONF_H #define LCDCONF_H #define LCD_XSIZE (320) //配置TFTLCD的水平分辨率 #define LCD_YSIZE (240) //配置TFTLCD的垂直分辨率 #define LCD_CONTROLLER (-1) //为什么是-1?接下来讲 #define LCD_BITSPERPIXEL (16) //每个像素的位数

uCGUI 汉字显示技巧及总结

UCGUI的基础应用 汉字显示 在uC/GUI中显示汉字,必要的一个步骤就是汉字取模。通常有两种方法: 一、单个字模法:使用字模取模软件,进行单个字的取模。此方法可应用于显示汉字字 数较少的情况下。其优点是:占用存储空间小,无冗余。但当显示汉字字数较多时,该方法则非常繁琐。 二、字模库法:该方式需要移植整个汉字字库,若项目要求需显示多种汉字字体,则需 移植多种字体的字库。其优点是:操作方便。若嵌入式系统的FLASH存储容量够大时,该方式可行。 根据作者多年的项目实践,找到一个兼具上述两种方式优点的显示方案:利用UCGUIFontTool软件,提取windows自带的字模库。该方法的使用步骤: 1、将项目中所要显示的汉字根据字体进行分类并汇总。 2、使用UCGUIFontTool软件分别提取上述字模。 3、将所产生的.C文件添加到工程中。 4、更改gui.h中的配置,添加该汉字的宏定义,如图 5、显示汉字前更改需显示的字体,如图 6、利用函数进行显示。 该方法移植方便,易实现同时显示多种字体,无字模冗余,占用存储空间最小。图片显示 uC/GUI提供了位图的解决方案,在GUI显示图片时,需先将其他格式的图片转换为bmp格式。可利用windows系统自带的画图软件打开一个图片,再另存为bmp格式,继而转换为.c 格式文件加入到工程中。其操作步骤如下: 1、将其他格式的图片另存为bmp格式。 2、打开UCGUI源码自带的工具uC-GUI-BitmapConvert,选择相应参数,并转换为.c文件。 3、将该.c文件加入到工程中。 4、添加外部变量,并调用相应函数进行显示。如图 5、也可UCGUI提供的缩放函数可对图片进行缩放显示。如图

基于STM32的uCGUI移植和优化

基于STM32的uCGUI移植和优化 移植篇 首先,我们需要准备的东西有uCGUI3.90,这个版本是大家现在用的比较多的,效率也比较高,别人都是这么评论的,至于其他版本的,我没有接触很多,所以 不能过多评论. uCGUI有三个文件夹,一个是tool,这个文件夹是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的.在sample文件夹下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能.在Start文件夹里面,这是我们最主要的文件夹.里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以放在任何C语言平台下编译而不会担心兼容性问题,这个uCGUI在这方面做的算是完美了),所以,我们可以在vc平台下写界面,然后再把代码拷进我们的下位机编译器进行编译,这样子效率就会非常高了.(像51 那时候写界面就是疯狂的一次一次的烧,真是纠结..). 然后这里放的就是uCGUI的源代码了,在GUI文件夹下面. 这则是每个文件夹的功能(参考uCGUI中文手册,https://www.360docs.net/doc/5310864265.html,翻译). 大概看一下就可以了,这个跟我们移植的关系不大,关键点是带*的可以不包含进去(待会配置会讲到.).然后其他的都要包含进去. 接着我们要把我们的文件包含进我们已经搭建好的工程,这里说明下我们的工程要求. 一般来说,我们要画一个图形,最基本的就是从点开始,从点到线,从点到面...,所以在已经建好的工程里面你要能点亮你的屏幕,能点出最基本的点,能填充出 最基本矩阵(这是uCGUI最包含的函数),反正我移植的时候涉及到的包括三个函 数,LCD_Init();LCD_Draw_Point(x,y,color),LCD_Fillcircuit(x1,x2,y1,y 2).这三个函数是必须的,后面也会说明如何把这三个函数进行填充. 当我们把文件复制进去的时候,再加上我们一开始已经创建好的工程的时候,文件结构差不多就是这个样子了,截图如下 user包括,main函数就是我们初始化和函数调用,绘图用的文件,另外那几个文件相信大家都明白了把,tft_lcd.c就是你在,没有移植uCGUI的情况下,纯液晶屏驱动,这里建议把液晶屏的API和最底层驱动(API就是画圆啊,画椭圆啊,清除屏幕之类的,底层驱动就是驱动液晶屏的管脚运作,fsmc初始化,时钟配置之类的),不过我这里也是集成在一起了,比较懒,大家别学.

UCOS-II ucGUI的完美移植

stm32 UCGUI 完美移植 作者:Changing发表时间:09-16 04:13分类:电子相关1 Comment 前一篇:stm32 DA 数模转换 后一篇:Stm32 SWD 下载 调试配置 UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。 它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。 类似程序还有国产的一个MINIGUI (https://www.360docs.net/doc/5310864265.html,/zhcn/),MiniGUI 是一个自由软件项目。其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Li nux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucleus 等)的实时嵌入式操作系统。有机会尝试下,支持下国产,毕竟国内这样的公司不多。。 这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。但是目前来说只有这个版本的代码是最全的,包括了JPEG , MULTILAYER , MEMDEV ,AntiAlias等模块。一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。 UCGUI390a 下载 整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。。。总之移植是个累人的活 首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 T F T LCD stm32 驱动 触摸屏 两篇文章 UCGUI的文件数量很大,主要用到UCGUI390a/Start/Con f ig 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。。。 相关文件介绍如下:

ucgui做界面切换

这次在用ucgui做界面切换的时候,决定不给每个菜单界面都创建一个对话框,和网友讨论的过程中,得出两种方法,一位网友说的是STM32的存储空间足够,可以先把自己所要用到的控件全部建立好,然后根据需要去设置控件是显示还是隐藏。另一位网友认为这样有点浪费内存,采用的方法是,先建立好一个对话框,然后根据自己的需要去删除和新建控件。 之后我就选择了第二种方法,在菜单的切换中去删除和新建控件。可能是自己太菜了,第一次删除控件和新建控件就出了问题。 问题是这样的:我先创建一个对话框作为欢迎界面(两个TEXT控件和一个BUTTON控件) hWinMenu = GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbWelcome,0,0,0) ; 我的想法是,点击按钮后删掉按钮控件和两个TEXT控件。然后再新建4个按钮控件。 1.hButton[0] = BUTTON_CreateAsChild(30,26,115,70,hWinMenu ,GUI_ID_BUTTON1,WM_CF_SH OW); 2.hButton[1] = BUTTON_CreateAsChild(30,124,115,70,hWinMenu,GUI_ID_BUTTON2,WM_CF_S HOW); 3.hButton[2] = BUTTON_CreateAsChild(188,26,115,70,hWinMenu,GUI_ID_BUTTON3,WM_CF_S HOW); 4.hButton[3] = BUTTON_CreateAsChild(188,124,115,70,hWinMenu,GUI_ID_BUTTON4,WM_CF_S HOW); 5.BUTTON_SetBitmapEx(hButton[0],0,&bmqd,30,10); 6.BUTTON_SetBitmapEx(hButton[1],0,&bmpf,30,10); 7.BUTTON_SetBitmapEx(hButton[2],0,&bmsz,30,10); 8.BUTTON_SetBitmapEx(hButton[3],0,&bmdc,30,10); 9.BUTTON_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_BUTTON0)); 10.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT0)); 11.TEXT_Delete(WM_GetDialogItem(hWinMenu,GUI_ID_TEXT1)); 这样写了之后的结果是,原先的控件被删除了,我所需要的4个按钮新建成功。但是此时出现了一个问题,我仿真的时候发现,我按下新建的按钮时,按键颜色虽然有变化但是回调函数里并没有收到按钮传递给父窗口的按钮按下的消息。这样我就很纳闷的总是想不出是为什么。 通过查看新建对话框函数的源代码之后有了一点发现 hWinMenu=GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbWelcome,0,0,0); 我是想查看一下hWinMenu是不是我之后新建按钮所需要的父窗口句柄。

关于ucgui的字库

关于ucgui的字库 1、在UCGUI中有两种类型字体, 一种是等宽字体(Monospaced Font),即字体当中所有字都是同一宽度,它在UCGUI中的相应结构体是GUI_FONT_MONO, 一种是均衡字体(Proportional font), 这种字体中的字都有自己独立的宽度, 字体内的每个字都可以有不同宽度, 它在UCGUI中的相应结构体是GUI_FONT_PROP, 对于等宽字体, 一般都是将所有字的点阵存放在一个数组中, 因为每个字都宽度相同. 对于均衡字体, 则要单独用数组来定义每个字符的点阵, 然后将每一个字符的宽高及点阵存为一个数组即字符信息(ucgui中对应结体为GUI_CHARINFO), 所有字符信息再存到一个数组当即称为字符集, 它包含每个字的字符信息(点阵高宽及一行占几个字节), 所谓一行占几个字节, 是指这个字体的点阵每一行有多少个字节, 它与宽度高度单位不同, 宽度高度的单位是象素数. 2.另外特别指出的是, 在等宽字体中不仅所有字符宽度相同,高宽也是相等的; 对于均衡字体, 不仅可以宽度不同, 高度也可以不同, 每一行有多少个字节自然也不同, 在均衡字体中每一个字符都单独定义之后才组成字体的字符集.

3.字符集的问题, 在UCGUI中每种字体含的字符集不同, 这个可以参看UCGUI手册中的"Standard Font"一章,这一章中对于字符集有如下描述: ASCII: Only ASCII characters 0x20-0x7E (0x7F).[仅包含 0x20-0x7E这个范围内的ansii字符] 1: ASCII characters and European extensions 0xA0 - 0xFF.[除 0x20-0x7E这个范围内的ansii字符, 还有0xA0 - 0xFF这个范围内的欧洲字符集, 这里要指出美国英语只用到 0x20-0x7E, 它只考虑了自己的须求, 没有考虑其它国家的须求, 在欧洲是有拉丁字符的, 所以欧洲国家扩展了剩余的 0xA0 - 0xFF这个范围内的来表示欧洲的字符集, 其实我们 国家的汉字也是在这个范围内扩展的, 不过我们用的是二个字节来表示一个汉字, 是因为汉字太多, 这区区94个值无法满足汉字的须求, 94*94就差不多了. 汉字用到的第一个值为0xb0a1(啊), 最后一个为0xf7fe(齄), 在机内码1当中只用到a1+15~a0+86这个范围的, 关于机内码是这个意思: 对于"啊"字模,机内码:(0xb0,0xa1), 0xb0为"啊"字的机内码1,0xa1为机内码2. 对于机内码2合使用是0xa1~0xff这个范围内的所有值, 关于机内码及汉字显示的原理及汉字库的构成, 本论坛中有专门的一篇文章介绍--"ucgui中处理汉字显示的说明",

ucgui液晶显示深度优化篇

UCGUI液晶显示深度优化篇 Author:wzt 2012年7月21日10:55:12 前一段进行了ucgui的移植,但是移植后续还是存在很多问题,比如液晶刷新速率慢,横竖屏切换不支持等,所以针对这些问题进行了一次彻底的优化,现在刷新能够达到20帧的速度对于50mhz的io口来说已经相当可以了。下面就进行一次彻底的剖析,看究竟是那些问题占用了宝贵的百万分之一秒: 一、速度优化篇: 1.我用的是stm32的处理器,stm32公司为了让使用者加快项目开发速度 和便于日后对整个软件部分的维护管理编写了一套标准库。这个库用 起来确实很方便也另学习简化了很多,但是它也有缺点所在:就是效 率问题。我之前用的液晶屏驱动就是基于库函数编写的,所以第一步 就是液晶驱动全部换为直接对寄存器操作,经实践确实刷新率成好几 倍的增长。这个代码比较长,这里就不贴出来的,这里仅仅指点下思 路,具体请看源代码。 代码下载地址:https://www.360docs.net/doc/5310864265.html,/icview-357489-1-1.html 2.深入液晶驱动内部:液晶屏刷新可不是像我们眼睛看到的一样瞬间整 个屏幕同时更新。实际上一个一个像素更新的:也就是说我的屏幕分 辨率是320*240就要更新320*240=76800个点。每一个点更新时都要 调用一个写数据函数。所以接下来要做的就是提高调用这个函数的速 度。有两种解决办法:使用宏定义函数或者内敛函数。我使用的是内 敛函数:如下定义: __inline void LCD_WR_DATA(u16 data) { LCD_RS_SET; LCD_CS_CLR; DATAOUT(data); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET; }可以看到和普通函数区别就在于前面增加了__inline关键字。它有什么 作用?为什么可以提高速度?下面讲解一下它是如何起作用的:假如现 在我们定义了两个函数A,函数B,函数A调用函数B:正常情况下如

UCGUI

uC/GUI作为一个通用的嵌入式应用的图形模块,它在嵌入式系统中的作用也显得的越来越重要。uC/GUI是一个源代码开放的图形系统,它提供了丰富的资源,包括二维绘图库、多字体及可扩充字符集、Unicode、位图显示、多级RGB及灰度调整、动画优化显示、具有Windows风格的对话框和预定义控件(按钮、编辑框、列表框等),以及对键盘、鼠标、触摸屏等输入设备和双LCD输出的支持,目前在具有图形界面的嵌入式产品中得到越来越广泛地应用。 2 通用嵌入式图形模块uC/GUI uC/GUI是一个通用的嵌入式应用的图形模块,它是美国Micrium公司开发的一种高效的、与处理器和LCD控制器独立的通用GUI,可以适用各种CPU和LC D,在单任务和多任务操作系统中,它都可以工作得很好。它具有驱动接口层和应用层,全部代码采用ANSI _C编写,提供源代码,可以方便的移植到各种平台下。 2.1 uC/GUI特点 (1) 支持任何8位、16位和32位的CPU,只要求CPU具有相应的ANSI_C编译器即可。 (2) 所有硬件接口定义都使用可配置的宏。 (3) 字符、位图可显示与LCD的任意点,并不限制与字节长度的整数倍数地址。 (4) 所有程序在长度和速度方面都进行了优化,结构清晰。 (5) 对于慢速的LCD控制器,可以使用缓冲存储器减少访问时间,提高显示速度[1]。 因为uC/GUI具有这些优点,它越来越受到更多嵌入式设计者的青睐。 2.2 uC/OS-II介绍 在嵌入式系统的开发过程中,选择操作系统与选择开发平台一样的重要。虽然不是一个完整的实时操作系统,只是一个实时内核,但与其它操作系统比起来它具有很多优点因而得到了广泛的应用。首先它是一种结构简单、源代码公开的操作系统,适合所有的开发者使用;它具有可移植性,它的绝大部分源码都是用移植性很强的ANSI _C编写,与微处理器硬件相关的部分采用汇编语言编写,很容易被移植到各种微处理器上;它还具有可固化和可裁剪等特点,对于嵌入式设计者来讲的,只要拥有固化手段(C编译、连接、下载和固化),就可以很方便将其嵌入到产品中去。设计者还可以根据系统应用程序的需要对uC/OS-I I进行相应的裁剪来减少产品中的uC/OS-II所需的存储器空间,这可以通过条件编译来实现。 2.3 uC/GUI接口

Windows平台下Glade GTK开发环境的搭建

Windows平台下Glade GTK开发环境的搭建 【@.1 MVVM设计模式与Glade】做上层软件开发的程序员可能对于MVVM模式比较熟悉,这是一种经典的软件设计模式,很好的将用户界面与后台处理之间分层开,通过属性、事件绑定这种统一的'接口'将软件重新组装起来,将原本看上去很混乱很冗余的软件开发流程抽象出来,以一种统一而又合理的思想来组织软件开发。下面截自wiki的一幅图简单说明了MVVM模式的组织结构。View层提供了人机交互界面,Model层则是处理实际逻辑操作、数据操作的核心,二者之间由ViewModel层来进行协调,即绑定(Binding)View层的操作和属性,请求Model执行并得到反馈结果。MVVM模式在Windows平台下的WPF开发得到了很好的体现,而WPF开发中View层并不是用C代码,而是用XAML来描述的,这是以前的传统软件开发或是MFC 开发中所没有的。在实际使用这种WPF开发时可以用Expression Blend来进行UI设计,这个软件专门而且仅仅生成一个XAML文件用于界面描述,而底层的逻辑代码直接连到Visual Studio中进行编写。通过Blend画出的界面可以很好的释放你的创造力想象力,而其跟Visual Studio之间的无缝连接将MVVM模式演绎的淋漓尽致。因此我开始考虑有没有一种更通用的工具,不仅仅局限于Windows平台,

能在多数平台下用MVVM模式进行开发。于是我发现了Glade与GTK的配合。GTK是一个以纯C语言开发的图形库,同样适用于跨平台开发中。对于做底层开发比较多的人来说看到纯C代码比较亲切,我也一直想用纯C,而不是Visual Studio中提倡的C#,进行软件开发。单独使用GTK 非常棒,但是一个问题就在于,需要手写的代码太多了。画一个按键,按键的布局,按键的事件,这些都需要自己一行行手写,而且还得留意代码的顺序。而其中一个我觉得是很大的门槛在于,布局需要盲打,即,你只能先在脑中有个界面的想法,写好代码后才能看到界面的结果。当然对于嵌入式设计中的很多界面设计都是盲打,比如uCGUI,但是如果有一个工具能像Visual Studio之类的集成开发环境一样能画界面,再生成代码,那开发的速度将大大提升。Glade就很好的解决了这一问题。Glade很像Expression Blend的作用,它仅仅生成一个xml文件,描述了界面是怎样布局的,界面上需要绑定那些事件(Signal)。通过Glade+GTK开发的程序每次在运行时都会解析这个xml文件生成一个界面(是不是跟WPF一样~),main函数里的代码量大大减少,所需要的就是新建一个builder,解析这个xml,传给gtk中的窗口类型,再显示这个窗口,之后进入Gtk的主循环即可。但是,Glade+GTK劣势于Blend的一个关键特性是,不支持属性绑定。虽然GTK中的Glib在2.26以后就增加了

嵌入式用户图形接口uCGUI的简单分析.

? 嵌入式用户图形接口uC/GUI的简单分析 4.1 uC/GUI简介 uC/GUI是Micrium 公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD 的应用程序提供独立于处理器和LCD 控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。uC/GUI能够应用于任何LCD 控制器和CPU 的任何尺寸的物理显示或者模拟显示中。 uC/GUI的特点如下: o 适用于任何8位/16位/32位CPU ,可允许于支持ANSI C的任何编译器 o 适用于任何控制器驱动任何LCD (单色,灰度,或者彩色) o 通过配置宏,可支持任何接口 o 可配置显示尺寸 o 可在LCD 的任何一点上显示字符和画位图 o 对于显示尺寸和速度提供优化进程,编译时间依赖于采用的优化进程 o 支持虚拟显示,虚拟显示的尺寸比实际显示大。 4.2 uC/GUI文件组织 uC/GUI目录下的文件有配置文件目录Config ,GUI 库函数目录,以及为GUI 编写的应用程序目录。下面分别简要介绍相应目录下的函数,更为详细的文件介绍请参考我的uC/GUI移植的源代码。 o uC/GUI\Config\目录: GUICONF.h :配置GUI 移植到不同操作系统的选项。在本论文中配置移植到uC/OSII中,允许多任务调用uC/GUI函数。

GUITouchConf.h :配置触摸屏的选项以及编写触摸屏的驱动。本文移植 uC/GUI所使用的LCD 屏不支持触摸屏,所以此文件为空。 LCD_Init.C: LCD 控制器的初始化文件。 LCD_Conf.h: LCD 显示屏的选项文件,包括bpp ,调试板模式,水平、竖直方向的分辨率等等。 o uC/GUI\GUI\AntiAlias\目录: 这个目录中包含9个文件,处理显示的边缘模糊效果,也就是抗锯齿和优化LCD 锯齿。液晶屏上画斜线往往都有锯齿,所以通过优化算法进行美化。 o uC/GUI\GUI\ConvertColor\目录: 这个目录中包含14个.C 文件,涉及调色板模式。uC\GUI的调色板模式支持111模式,222模式,223,323,332,444,555,565,8666等相关模式。我在论文中使用的LCD 屏,为单色16级灰度屏,因而不涉及到这些模式。但为了保持UC\GUI文件的完整性,该目录以及目录下14个文件,仍然保存在移植文件中。 o uC/GUI\GUI\ConvertMono\目录: 此目录下的文件描述单色显示的不同模式,包含4个文件。 o uC/GUI\GUI\Core 此目录下包含129个文件,是uC/GUI的核心部分。包括GUI 头文件,GUI 显示各种文本,二进制,十进制,十六进制,字符型文本,字符串,在不同的位置显示二进制,十进制,十六进制,字符型文本,字符串等;GUI 设置各种字体;GUI 的2-D 图形库,GUI 绘图函数,在各种位置绘各种点,线,位图,多边形,长方形,圆等等;GUI 获取函数,获取当前点,线,位图,多边形,长方形,圆,当前字体,当前二进制,十进制,十六进制,字符型文本,字符串等函数;设置GUI 画笔函数;GUI 支持的鼠标函数;GUI 支持的键盘函数,GUI 支持的触摸屏函数;GUI 设置LCD 函数等等。这些函数,在uC/GUI

emWin522(uCGUI)图形用户接口移植详细实例_STM32_2013_12_30

emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32 作者:Ach 日期:2013年12月29日 联系方式:ox000008@https://www.360docs.net/doc/5310864265.html, 1.概要 移植图形用户接口的好处是不言而喻的。本文图文并茂地介绍了一个emWin 5.22(uCGUI)的移植实例。文章具体分为emWin简介,硬件平台简介,开发环境及项目简介,移植过程以及总结几个部分。 2.emWin简介 emWin是一种高效的而图形用户界面,是我们能够摆脱处理器和显示控制器而更专注于GUI的设计。这里借用STemWin的一幅图来说明emWin的作用和结构。它通过LCD及GUI的配置来驱动底层硬件,而应用程序又是通过调用emWin来实现各种GUI。5.22版的emWin带有许多常用的显示控制器的驱动(在参考手册Display Driver一章中有详细介绍),因此为我们移植带来了诸多方便。emWin的更详细的内容可参照它的参考手册。 图1. emWin在项目中的结构 3.硬件平台简介 笔者使用的是一块以STM32F103VET6为核心的ARM开发板,没有外部的SRAM及Flash。显示屏为2.8”320*240的彩色液晶屏,屏的驱动芯片为ILI9341(emWin 5.22带有它的驱动)。屏与CPU 的连接方式为该ARM核心所特有的FSMC_SRAM方式,访问LCD内容时操作就如同读写SRAM一样方便。 如果你想使用其它硬件平台来移植emWin,本文亦有一定的参考价值。希望本文能助你成功移植emWin。

图2. 硬件平台 4.开发环境简介 笔者所使用的开发软件为MDK-ARM 4.70。项目模板使用的是STemWin库中的(可从ST官方下载)。 图3. 项目截图 如图,项目下面有3个文件夹,其中Appli存放的是应用层的程序,第二个文件夹就如文件名,存放了emWin5.22所有部件,第三个文件夹存放了一些STM32及其它的库。具体见附件。 5.移植过程 有了MDK-ARM以及STemWin库,整个移植过程应该比较简单。STemWin中有4个文件夹,第一个可以不用看了,Libraries中包含所有需要的库(其中包含emWin5.22),Project中存放工程文件,Utilities中是一些应用文件。为了保持代码及工程结构的格式统一,我们尽量套用原有的格式。下面开始一步步的移植工作。 5.1 项目配置 打开Project文件夹,看到众多STM32的开发板文件夹。如果你有相应的板子,就不用修改直接用。我使用的是STM32F103核心的板子,因此我选了STM3210E-EVAL为模板,取名TEST(自取)。打开该文件夹,里面有2个文件夹,分别为RTOS和Standalone,RTOS是带操作系统的。我们打开Standalone,其中有6个文件夹,分别为Config、Demo、EWARM、MDK-ARM、TrueSTUDIO及User,具体的不一一介绍了。打开MDK-ARM,我们要的工程文件就在其中了。 打开工程,先点击如图左边红圈处编译一下,工程应该是没有错误的。然后根据你所使用的硬

UCGUI 简介

UCGUI 简介 译者:UCGUI 邮箱:UCGUI@https://www.360docs.net/doc/5310864265.html, 主页:https://www.360docs.net/doc/5310864265.html, 版本:v1.0.0.0 1.0......UCGUI整体简介. ...............UCGUI简介. ...............本文档的目的 ...... .........前提学习要求. 1.1.....要求 ...............目标硬件系统. ...............开发环境(编译器). 1.2.....UCGUI特性. ...... ........示例. 1.3.....评估板. 1.4.....如何使用本手册. ...............印刷上的字体说明. 1.5.....屏幕及坐标系统. 1.6.....LCD控制器的连接类型. 1.7.....数据类型. UCGUI UCGUI是一种嵌入式应用中的图形支持系统.它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示. 它的设计架构是模块化的, 由不同的模块中的不同层组成, 由一个LCD驱动层来包含所有对LCD的具体图形操作, UCGUI可以在任何的CPU上运行, 因为它是100%的标准C 代码编写的. UCGUI能够适应大多数的使用黑白或彩色LCD的应用, 它提供非常好的允许处理灰度的颜色管理.还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系. 本文档的目的 本文档描述如何在嵌入式应用中安装,配制,使用UCGUI的图形用户接口, 并讲解UCGUI的内部设计架构.

uCGUI绘制曲线GUI_DrawGraph

uC/GUI图形界面系统提供了非常多的功能强大的用户接口函数, 利用uC/GUI提供的图象绘制函数GUI_DrawGraph(),可以非常容易的绘制出想要的函数的波形。 GUI_DrawGraph()函数的原型为: void GUI_DrawGraph(I16 *paY, int NumPoints, int x0, int y0); 需要提供的参数:paY为纵坐标的数组头指针 NumPoints,顾名思义,为所需绘制的图象的点数 x0,y0为坐标原点在TFT_LCD屏幕上的坐标 这个函数的效果为在屏幕上依次绘制出相对于(x0,y0)坐标为(*(paY+0),0),(*(paY+1),1),(*(paY+2),2).。。。(*(paY+NumPoints),NumPoints)的 一系列的点,由于一般TFT屏都是设置成向下为坐标加的,所以这个函数的效果也是向下为正,向上为负。 写个简单的程序测试一下; 复制代码 1.I16 aY[240];//纵坐标数组,相当于函数值 2. 3.int main() 4.{ 5. u16 i; 6. cdz_rcc_init(); 7. GUI_Init(); 8. GUI_SetBkColor(GUI_WHITE);//白色背景 9. GUI_Clear(); 10. GUI_SetColor(GUI_BLACK);//黑色字体 11. 12.for (i = 0; i < GUI_COUNTOF(aY); i++) {

13.aY[i] = rand() % 80; //rand()函数产生一个0-100之间的随 机数,aY[i]为0-80之间一随机数 14.} 15.GUI_DrawGraph(aY, GUI_COUNTOF(aY), 0, 160);//调用绘图函数 16.} 效果如下: 本文源自https://www.360docs.net/doc/5310864265.html,/read.php?tid=435

uCGUIBuilder使用说明

一、ucGUBuilder使用方法 (2) 1,新建ucGUI窗体 (2) 2、设置窗体的属性 (3) 3、向窗体添加控件 (4) 二、V ersion 2.1.0.5 新增功能 (9) 1、新增C语言语法高亮显示 (9) 2、支持设计的窗体保存为文件,并可以打开 (9) 3、对所有控件属性添加了Description (12) 4、保存窗体布局 (13) 三、Version 3.0.0.0 新增功能 (15) 1、支持窗体设计器基本操作 (15) 2、多控件操作 (15) 3、文件关联 (16) 4、在线检查更新 (18) 5、自定义控件ID (20) 四、Version 3.1.0.0新增功能 (22) 1、添加了控件ID自动增加功能 (22) 2、用户自定义字体 (22) 3、中英文切换 (23) 4、自动检查更新 (24) 6、问题反馈或提建议 (25) 五、Version 4.0新增功能 (27) 1、代码分离 (27) 2、添加编辑器工具栏 (28) 3、内嵌VC编译器能直接运行模拟器 (29) 4、如何使用代码自动完成功能 (30)

声明:此程序用C#开发,需要.Net Framework 3.5或跟高版本支持 大家在测试的过程中发现什么BUG或者有什么建议可以发Email:ucguibuilder@https://www.360docs.net/doc/5310864265.html,给我, 一、ucGUBuilder使用方法 1,新建ucGUI窗体 或者单击新建窗体设计器工具栏按钮 或者点下拉箭头选择新建窗体设计器

新建后的效果: 2、设置窗体的属性(包括大小,标题栏文本,……)

3、向窗体添加控件 (1)、在工具箱单击选中你要添加的控件

ucGUI添加自定义汉字字库

在uCGUI中添加自定义字体的方法 uCGUI 自带的字体文件中只包含英文及标点,想要显示中文字体最简单的方法便是自己动手添加。先来看一下ucGUI 中自带字体文件的取模方式,如图1所示 其中用X 表示的部分是需要在屏幕上显示的一个像素点,下划线的部分则不显示,uCGUI 中自带的字体都是基于这个方法来显示的。其实图1 中,每一个逗号前都是1 个字节的数据,所以我们可以将图1 的取模方式改为如图2 所示的情况,这样也是正确的,当然也可以改成全16 进制的表示方式,但显示效果没有图1 来的直观。下面进入具体实现步骤。 步骤1:下载字体生成软件 步骤2:首先需要一个字体生成软件,该软件要能制作出如图1 所示的字体取模效果,我使用的是ucGUI 字体生成器V3.0,界面如图3 所示。 图三

步骤3:开始制作自己想要的字体文件 如图四所示 图四 步骤四:在GUI/Font文件夹中创建一个.c文件,这里定义为Font.c(文件名可以随意更改,只要不和库文件名冲突就可以)如图5所示 图5 步骤五:把Font.c添加到keil工程目录下,如图六所示

图六 步骤六:修改程序 将Font.c文件中里面的数组加上const修饰,如图七所示 图七

步骤七:在KEIL工程中找到GUI.H 在GUI.h中添加一段代码,声明数组,该数组名就是Font .c文件中的最末尾数组的数组名,如图八所示 图八 步骤八:调用GUI_SetFont(&GUI_FontHZ16)函数,如图九所示 图九

步骤九:编译,如果没有出现错误,就可以下载到开发板,显示效果如图十所示 图十

ucGUI一般移植标准步骤

μc/GUI一般移植过程 移植的版本为3.90a,主要包含的文件夹如下图所示,主要涉及到: 1.Config:配置文件 2.GUI:源代码 3.GUI_X:操作系统接口函数 GUI源代码文件: 1)AntiAlias:9个C文件,主要用于抗锯齿的显示效果。 2)ConvertColor:彩色显示的色彩转换支持。 3)ConvertMono:(b/w)和灰度显示的色彩转换支持。 4)Core:核心文件,提供了GUI基本的功能。 5)Font:字库。 6)JPEG:图片操作函数。 7)LCDDriver:LCD驱动程序 8)MenDev:Memory device支持。这个东西可用在很多情况下,但最主要 的功能是防止在项目重叠时,防止屏幕的闪烁。 9)Widget:窗体控件库。 10)WM:窗口管理库。 注意:JPEG、MenDev、Widget、WM都可以裁减掉,若要支持Widget(窗体控件),需要WM(窗口管理器)的支持;使用控件时,需要将相应的头文件包含进去,比如我们要使用按钮button,那么我们需要先包含button.h头文件,否则控件即使支持也不可用! 一、Config文件夹配置文件修改 1.LCDConfig.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)//总线宽度 #define LCD_FIXEDPALETTE(565)//TFT格式 #define LCD_CONTROLLER(9325)//控制器型号(-1即可) #define LCD_SWAP_RB(1)//是否红蓝交换 注意:LCD_SWAP_RB会影响到颜色的正确性,倘若发现颜色是反向的,那么不如改变LCD_SWAP_RB的值。 2.GUIConfig.h #define GUI_OS(0)//单任务支持 #define GUI_SUPPORT_TOUCH(1)//支持触摸屏 #define GUI_SUPPORT_UNICODE(1)//UNICODE支持 #define GUI_DEFAULT_FONT&GUI_Font6x8//默认字体 #define GUI_ALLOC_SIZE7000//动态内存(不支持内存设备可小些) #define GUI_WINSUPPORT1//支持窗口操作 #define GUI_SUPPORT_MEMDEV1//Menory devices支持 #define GUI_SUPPORT_AA1//支持抗锯齿显示 3.GUI_TOUCH_Conf.h #define GUI_TOUCH_AD_LEFT200//触摸屏左侧AD测量值 #define GUI_TOUCH_AD_RIGHT3850//触摸屏左侧AD测量值 #define GUI_TOUCH_AD_TOP200//触摸屏上方AD测量值 #define GUI_TOUCH_AD_BOTTOM3700//触摸屏底部AD测量值 #define GUI_TOUCH_SWAP_XY0//X、Y方向翻转 #define GUI_TOUCH_MIRROR_X0//X方向镜像 #define GUI_TOUCH_MIRROR_Y0//Y方向镜像 二、LCDDriver文件夹修改 修改LCDDriver中c文件,实现LCD_L0_Init()初始化、LCD_L0_Set_PixelIndex()画点、LCD_L0_Get_PixelIndex()读取点值、LCD_On()、LCD_Off()。 注意:LCDDriver下有三个文件,任选其一就行,我选择LCDDummy.c,还必须去掉文件中的宏判断语句,否则整个文件不会被编译。

uCGUI使用

uCGUI使用 最好多参考几篇文章,比如UC/GUI中文手册与 emWin5_UM_SC 0:画图函数 GUI_DrawRect:在当前窗口中的指定位置绘制矩形(不填充,画线颜色为前景色) void GUI_DrawRect(int x0, int y0, int x1, int y1); GUI_FillRect:在当前窗口中的指定位置绘制填充的矩形区域(填充前景色) GUI_ClearRect:清除矩形区域(为矩形区域填充背景颜色,图形界面用填充背景色达到清除屏幕的效果) 1:存储设备 不使用存储设备时,绘制操作直接写入显示器。屏幕 在执行绘制操作时随时更新,从而在进行各 种更新时使屏幕闪烁。如果在此过程中使用存储设备, 则所有绘制操作都在存储器中执行。仅在所有操作都完 成后才将最终结果显示在屏幕上,其优点是没有闪烁。 如果不使用存储设备,则可以看到一步步的绘制操作 效果,缺点是会出现显示器闪 烁。使用存储设备时,一次可见到所有例程的效果,就 象单次操作一样,不能实际看见中间步骤。

以下例程是在使用存储设备时通常会调用的,基本用法非常简单: 1. 创建存储设备(使用GUI_MEMDEV_Create() )。 2. 激活它(使用GUI_MEMDEV_Select() )。 3. 执行绘制操作。 4. 将结果复制到显示器中(使用 GUI_MEMDEV_CopyToLCD() )。 5. 不再需要它时,删除该存储设备(使用 GUI_MEMDEV_Delete() )。 2:WM窗口管理器 回调例程:回调例程由用户程序定义,指示在特定事件出现时图形系统调用特定的函数。它们通常用于在窗口内容更改时自动重绘窗口。窗口管理器的默认特性是向每个需要重绘的窗口发送一条 WM_PAINT 。 当用户对窗口有操作时,WM会发送相应的消息给该窗口,窗口可通过回调函数根据消息直接对屏(没有用存储设备时)或对窗口的存储设备进行操作再拷贝到屏幕上,具体的消息说明可以参考emWin的中文手册。 WM_SetCallback 设置窗口的回调例程:WM_CALLBACK* WM_SetCallback (WM_HWIN hWin, WM_CALLBACK* cb) 有了这个函数就可以动态的选择操作的重绘操作等消

相关文档
最新文档