搜档网
当前位置:搜档网 › 第13章emWin(UCGUI)GIF图片显示

第13章emWin(UCGUI)GIF图片显示

第13章emWin(UCGUI)GIF图片显示
第13章emWin(UCGUI)GIF图片显示

关于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) //每个像素的位数

基于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.sodocs.net/doc/7111706192.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.sodocs.net/doc/7111706192.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液晶显示深度优化篇 Author:wzt 2012年7月21日10:55:12 前一段进行了ucgui的移植,但是移植后续还是存在很多问题,比如液晶刷新速率慢,横竖屏切换不支持等,所以针对这些问题进行了一次彻底的优化,现在刷新能够达到20帧的速度对于50mhz的io口来说已经相当可以了。下面就进行一次彻底的剖析,看究竟是那些问题占用了宝贵的百万分之一秒: 一、速度优化篇: 1.我用的是stm32的处理器,stm32公司为了让使用者加快项目开发速度 和便于日后对整个软件部分的维护管理编写了一套标准库。这个库用 起来确实很方便也另学习简化了很多,但是它也有缺点所在:就是效 率问题。我之前用的液晶屏驱动就是基于库函数编写的,所以第一步 就是液晶驱动全部换为直接对寄存器操作,经实践确实刷新率成好几 倍的增长。这个代码比较长,这里就不贴出来的,这里仅仅指点下思 路,具体请看源代码。 代码下载地址:https://www.sodocs.net/doc/7111706192.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:正常情况下如

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以后就增加了

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

emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32 作者:Ach 日期:2013年12月29日 联系方式:ox000008@https://www.sodocs.net/doc/7111706192.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的简单分析.

? 嵌入式用户图形接口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

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.sodocs.net/doc/7111706192.html,/read.php?tid=435

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)函数,如图九所示 图九

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

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.sodocs.net/doc/7111706192.html,给我, 一、ucGUBuilder使用方法 1,新建ucGUI窗体 或者单击新建窗体设计器工具栏按钮 或者点下拉箭头选择新建窗体设计器

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

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

uCGUI中的窗口管理机制以及解决独立窗口并存的方法

修改UCGUI源代码以支持多个独立窗体的说明 发布时间: 2008-11-17 来源: 来自网络作者:匿名浏览: 2868 问题的提出: 关于对话框对话框处理程序中,ok按钮按下后想出现一个消息框。但直接加在程序中好像不行,该怎么办? [独立窗体]------指该窗体的父窗体不是用户创建窗体,在UCGUI中其父窗体为句柄为1. 一,消息处理的流程. ucgui是采用的消息驱动的. 它专门有对外的一套采集消息的接口, 我在模似器中, 就是通过LCD窗口的MOUSE消息,将MOUSE移动, 点击消息传入到这个接口中, 以驱动UCGUI中的事件的.. UCGUI中的消息驱动, 其实与WINDOWS的是类似的, 几种基本的消息与WINDOWS是一样的, 但UCGUI的更简单, 消息更少, 没有WINDOWS那么多的消息种类. 在WINDOWS中, 我们最简单处理按钮事件的是在WM_COMMAND消息中, 通过按钮的标志ID来处理不同的按钮, 所以, 我们的按钮的标志ID都是不同的. 要不然无*区别开的. 要处理点击OK这个按钮的事件, UCGUI的处理方*有些不同, 是在WM_NOTIFY_PARENT消息中处理: case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_RELEASED: /* React only if released */ if (Id == GUI_ID_OK) { /* OK Button */ GUI_EndDialog(hWin, 0); } if (Id == GUI_ID_CANCEL) { /* Cancel Button */ GUI_EndDialog(hWin, 1); } break; } break; ucgui中的消息非常的少, 只有差不多不到二十种, 其实这对于嵌入式系统来说, 已经完全足够了, 用户可以自定义消息, WM_NOTIFY_PARENT这个消息是由你窗体传送过来的, 是由函数 WM_NotifyParent(hObj, Notification)实现的. void WM_NotifyParent(WM_HWIN hWin, int Notification) { WM_MESSAGE Msg; Msg.MsgId = WM_NOTIFY_PARENT; Msg.Data.v = Notification; WM_SendToParent(hWin, &Msg); } 这个函数相当简单, 其主要还是WM_SendToParent这个函数的调用, 这个函数又调用void WM_SendMessage(WM_HWIN hWin, WM_MESSAGE* pMsg), 这个函数是最基本的一个消息处理函数, 它的第一个参数指定了接受这个要处理的消息的句柄, 第二个指定了是什么消息.这个函数的主要作是, 是调用相就窗口的消息处理函数来处理消息. 比如说, 在这里,我们这个消息的处理过程是这样的, 首先, 你左键点击OK按钮, 那么在GUI_Exec()这个窗体消息LOOP处理当中, 首先将此消息(WM_TOUCH)传给OK按钮(注意这也是一个窗体), 然后, OK按

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) 有了这个函数就可以动态的选择操作的重绘操作等消

原创 ucGUI入门心得

ucGUI入门心得 学习ucGUI近一个月,感觉已经达到入门的级别,先前掌握的Windows应用程序开发经验对于学习ucGUI有着很大的帮助。 首先,我使用的是ucGUI的高版本——emwin5.22。这个版本较旧版本多了些可用的控件和皮肤,这会让我们设计出外观更好,功能更强的界面。 然后,我们设计出来的界面需要在VC6.0上进行调试。网上可以下载到移植好的emwin及附带的小工具。这些工具包括界面设计工具 GUIBuilder,图片转16进制数据工具BmpCvt和字体生成工具FontCvt。用好这些工具对我们开发GUI有很大的帮助。 接着开始创建一个GUI工程。第一步用GUIBuilder创建一个对话框做为窗体,第二步在这个对话框上面放上一些用到的控件,接下来对这些控件进行属性设置,这些都做完以后,点击保存菜单就会生成一个C文件。VC6.0引用这个C文件就可以显示刚才设计的界面了。如果让我们的界面更加美观就需要用到 BmpCvt工具,它可以把图片生成16进制数据供图片框调用。BmpCvt可以生成透明背景的图片,效果相当不错。制作透明图片需要用到 Photoshop,在PS里新建一个带透明背景的图片,然后把我们图片粘贴进去,再擦除一此不需要的颜色就可以了。带透明背景的图片用BmpCvt打开以后,可以看到透明部分显示的是马赛克就对了。用FontCvt工具可以生成我们需要的各种字体,也包括汉字。我习惯使用Keil开发环境,Keil里使用汉字是Ansi编码,而FontCvt生成的是Unicode编码,这显然不能兼容。这需要转换一下就可以直接使用了。 最后总结一下在使用emwin过程中遇到的一些问题。 1.在对话框里使用画线画多边形或显示文字这些基本绘图功能。只需要在窗口回调函数下的WM_PAINT消息里操作即可。 2.在点取下拉列表的表项时,会点击到其下边的其它控件,造成误操作。遇到这种情况判断下拉列表底下这个控件是否有焦点就可以了。if(WM_HasFocus(hItem) >0) 3.灵活使用WM_TIMER窗口定时消息和WM_USER用户自定义消息。 4.ListView控件里没有获取当前点击到哪一列的函数,我们需要在点击到某一行列时做相应的操作。解决这个问题需要用到WM_TOUCH_CHILD 控件触摸消息。 if(pMsg->Data.p) { Msg = *(WM_MESSAGE*)pMsg->Data.p; if(Msg.Data.p ==0) break; //防止划过界 State = *(GUI_PID_STATE*)Msg.Data.p;

GUI的种类及uCGUI的架构

GUI的种类及uCGUI的架构 (说明:本博文转载自他人笔下,希望可以帮助同僚更深刻的认识GUI) GUI的种类及uC/GUI的架构 一.GUI概述 GUI(Graphic User Interface)是图形化的用户界面,它能提供友好的人机交互接口。 它有以下特性:体积小,运行时耗用系统资源少,层次化的结构,易移植,可靠性高 嵌入式GUI种类 嵌入式GUI种类有很多,下面列举几种: 1. WINCE的GWES(图形、窗口、事件子系统),由应用程序接口(API)、用户接口(UI)和图形设备接口(GDI)组成,包含了消息机制 2. Trolltech公司的产品:QT、QTE、QTOPIA,它们跨平台、功能强大,但资源消耗多 3.MINIGUI是魏永明创建的嵌入式GUI中间件,可以以多线程、多进程、以及单任务运行,是比较成熟的商用系统 4.ucGUI能支持多种环境的GUI,可以以多任务形式运行或

者以前后台模式运行。商用化,但功能相对简单 GUI的两种模式: 1. Windows模式,采用类似windows的API和相应的消息机制,如ucGUI、MicroWindows、miniGUI 2.C/S模式,采用一个XServer,所有的显示都以客户端的形式请求服务,如Nano-X GUI 在嵌入式系统或实时系统中的地位 越来越多的市场需求数据显示,包括PDA、娱乐消费电子、机顶盒、DVD等影音设备、WAP 手机等高端电子产品得到广泛应用,原先仅在军工、工业控制等领域中使用的GUI图形系统,受到越来越多的关注。 对于轻量级GUI 的系统而言,对GUI 的要求相对较低,如传统51类型单片机这类系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI 之上,如Windows 或X Window。目前此类系统都直接使用原有编程手段,采用比较简单的手法实现GUI。对于太过庞大和臃肿的GUI系统而言,μc/GUI这类可运用于此类资源较紧张的轻型GUI 的需求更加突出 uc/GUI简介

基于ucGUI多任务系统的图形用户界面开发

https://www.sodocs.net/doc/7111706192.html, 基于ucGUI多任务系统的图形用户界面开发 吴建鲁 江苏自动化研究所,江苏连云港 (222006) E-mail:wujianlucool2006@https://www.sodocs.net/doc/7111706192.html, 摘要:图形用户界面是人与计算机进行交互的一种操作方式,它的质量直接影响着产品的推广和用户的使用效率。针对嵌入式系统中图形用户界面应用的广泛需求,本文介绍ucos-II 和ucGUI在S1C33209上的移植过程,并在此基础上实现了ucGUI多任务系统中图形用户界面的开发。 关键词:ucos-II; ucGUI; 移植;图形用户界面 1 引言 与命令式用户界面(Command Line Iser Interface)不同,图形用户界面(Graphical User Interface,GUI)不需要用户通过输入专业性很强的抽象命令来操作计算机,而代之以窗口、图标、菜单等直观的图形或图标,再加上可以控制光标移动的指示装置来完成数据和控制命令的输入,从而实现对计算机的交互式操作。由于这样的用户界面不需要记忆专门性很强的控制命令并且非常直观易懂,图形用户界面受到了普遍的欢迎[1]。ucGUI是Micrium公司出品的一款针对嵌入式系统的开放源代码的优秀图形软件,它为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口。适用于单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示与虚拟显示。架构基于模块化设计,由不同的模块中的不同层组成。采用100%的标准C代码编写,由一个LCD驱动层来包含所有对LCD的具体图形操作,ucGUI可以在任何CPU上运行。 在ucGUI单任务系统中,程序顺序的执行,一个软件单元的反应时间依赖于这个系统中所有其他单元的执行时间,实时行为变得极为有限。为了增强实时性,采用ucGUI多任务系统,使用开放源代码ucos-II实时内核,把应用程序分割成不同的部分运行在不同的任务中,具有不同的优先级。这样,任务的实时行为只受运行在更高优先级的任务影响,系统的实时性得到极大的改善。本文使用AEDK-EMB33实验系统,介绍ucos-II在S1C33209处理器上的移植以及ucGUI的移植过程,并在此基础上研究开发基于ucGUI的图形用户界面。 2系统硬件资源简介 AEDK-EMB33嵌入式系统实验平台的硬件采用模块化、开放式的结构设计,采用底板+CPU板+扩展槽的系统结构[2]。系统主要硬件资源如下: 核心的MCU为S1C33209:cpu指令采用RISC架构,内部为16位指令集;硬件采用Harvand 结构,内部独立总线方式;最大处理速度60MIPS。 显示和键盘专用接口:一个复位按键和20个按键输入,采用5×4矩阵键盘;彩色320×240, (STN)256色LCD显示;4线电阻式触摸屏。 3 ucos-II和ucGUI的移植 由于嵌入式系统中具体硬件组成和参数大都不同,ucos-II和ucGUI移植的目的就是针对具体硬件及其配置修改源码底层和硬件相关的部分,添加一些内核没有的外设驱动并修改相应得配置文件,为应用程序的开发提供前提条件。 3.1 ucos-II的移植 为了增强系统的实时性,采用ucGUI多任务系统,在系统中移植一个ucos-II实时内核。移植ucos-II的主要工作是修改3个与cpu相关的文件:os_cpu_c.c,os_cpu_a.s,os_cpu.h,

stm32 UCGUI 完美移植

1/6 https://www.sodocs.net/doc/7111706192.html,/stm32-ucgui.html About Links Invite Rss Home / Archive Trip Share E-Factory Findpark Quickweibo Mr.YongLan here is siri .. 五十将相寻死路,生不认魂,死不认尸。 UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。 它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。 类似程序还有国产的一个MINIGUI (https://www.sodocs.net/doc/7111706192.html,/zhcn/),MiniGUI 是一个自由软件项目。其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Linux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucle us 等)的实时嵌入式操作系统。有机会尝试下,支持下国产,毕竟国内这样的公司不多。。 这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。但是目前来说只有这个版本的代码是最全的,包括了J PEG , MULTILAYER , MEMDEV ,AntiAlias等模块。一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。 UCGUI390a 下载 整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。。。总之移植是个累人的活 首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 TFT LCD stm32 驱动 触摸屏 两篇文章 UCGUI的文件数量很大,主要用到UCGUI390a/Start/Config 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。。。 相关文件介绍如下: 将Config和GUI下所有文件加入工程,MDK中新建工程需要划分好结构,这是UCGUI官方推荐的结构: JPEG, MemDev , MultiLayer , Widget , Wm 这5 个文件夹的内容可以暂时不加入MDK工程。 因为这些文件起到的是扩展功能,在移植阶段可以先不添加,等到以后用到其中的功能时再选择添加。但是建议都添加进去,避免遇到各种无解问题。。 stm32 UCGUI 完美移植 作者:Changing 发表时间:09-16 04:13分类:电子相关 2 Comments 前一篇:stm32 DA 数模转换后一篇:Stm32 SWD 下载 调试配置

相关主题