emWin使用文档.docx
《emWin使用文档.docx》由会员分享,可在线阅读,更多相关《emWin使用文档.docx(51页珍藏版)》请在冰豆网上搜索。
emWin使用文档
目录
一、emWin介绍1
1.1emWin简介1
1.2emWin应用的软件架构2
二、《emWin用户手册》介绍及使用2
2.1《emWin用户手册》简介2
2.2根据函数名查找库函数说明3
2.3根据功能查找库函数3
三、emWin开发过程中调用API及功能4
3.1通用小工具API4
3.2BUTTONAPI5
3.3EDITAPI6
四、搭建emWin的Windows仿真环境7
4.1仿真版本emWin文件介绍7
4.2使用VS2010仿真emWin8
4.3emWin仿真工程概览9
五、GUI_Builder18
5.1简介18
5.2创建对话框19
5.3GUI_Builder的输出20
5.4如何使用C文件24
六、项目代码结构概述24
七、emWin的keil项目介绍32
7.1keil环境搭建32
7.2keil项目主要文件简介32
7.3硬件驱动配置(LCD、SDRAM)34
八、Keil环境下实板调试36
九、问题总结37
参考资料:
37
软件工具:
Keil4、VS2010
硬件工具:
TFT-LCD7寸、LPC1788控制板
一、emWin介绍
1.1emWin简介
emWin(大概是embedwin的缩写)是Segger公司针对嵌入式平台开发的图形软件库,通过调用emWin提供的函数接口,开发嵌入式图形界面应用变得简单而快捷。
图形软件库就是一些与图形界面相关的函数,它提供接口给用户调用。
例如,在没有使用图形软件库时,要控制LCD显示一个圆,需要用户自行根据LCD驱动编写画圆的函数,而使用图形界面软件库的话,这个画圆函数已经由该软件库提供给用户,用户只需要调用这个函数,设置圆的半径、圆心、颜色就可以画出自己想要的圆,不需要再考虑画圆的算法了。
emWin并不只是提供了画圆之类的基本绘图函数库,它的主要功能如下:
●绘制2-D图形:
绘制圆、椭圆、多边形、弧线、线图和饼形图等;
●显示位图文件:
显示BMP、JPEG、GIF及PNG格式的图片文件;
●显示文字:
支持显示多国语言的文字,如中英文;
●处理用户输入:
如键盘、鼠标及触摸屏的人机交互输入处理;
●提供各种窗口对象:
这些窗口对象也被称为图形控件,最常见的如菜单控件、窗口控件、按键控件、复选框及框架窗口控件等,有了这些控件,就非常容易地制作出类似windows系统的控制界面了。
emWin的这些功能,就是为了解决人机交互应用的设计难题。
而它对ROM和RAM的消耗相对来说并不高。
据官方统计,它们提供的一个基本例程(移植了emWin函数库显示“HelloWorld”),消耗ROM60KB,RAM7KB,这在当前大多数嵌入式平台都是可以接受的。
又因为emWin可以在多任务系统及裸机的平台上运行,尤其适合嵌入式乱七八糟的开发要求,自然使得emWin在嵌入式人机交互场合中大放异彩。
1.2emWin应用的软件架构
图1-1
从最底层看起,首先是硬件层,硬件层就是指最基本的板级支持软件包(BSP),也就是我们常说的底层驱动,它提供了对硬件平台资源最直接的访问;emWin软件库承上启下,它运行在硬件层之上,与硬件层之间仅靠液晶驱动连接起来,而向应用层则提供了各种便于用户制作GUI应用的接口。
在没有使用emWin的软件架构中,很可能就是由硬件层直接过渡到应用层,甚至根本没有分层的概念,这样的应用程序将十分依赖于某个特定的硬件平台,不容易迁移到其它设备之中。
从这个架构图可以看出,只需要编写好液晶驱动这个粘合emWin库和硬件BSP层的中间件,就可以正常使用emWin了,迁移应用到不同的平台也简单得多。
二、《emWin用户手册》介绍及使用
2.1《emWin用户手册》简介
《emWin用户手册》就是关于Segger官方给出的emWin帮助文档,它的内容包括emWin简介、仿真、各种库函数详细信息、液晶驱动移植、配套工具软件的使用、emWin性能及资源占用都一一进行了说明,对于没有开源代码的软件库,其帮助文档的重要性不言而喻。
2.2根据函数名查找库函数说明
我们会经常遇到一些陌生的emWin库函数,库函数大多以GUI为前缀命名,如GUI_Init、GUI_DispString等GUI_xxx格式。
当我们想要获这些库函数详细信息时,可在《emWin用户手册》中搜索。
如下图示:
图2-1
2.3根据功能查找库函数
我们根本不知道emWin库有没有这种功能的函数,就算知道有,也常常忘记了函数的
名字。
这时候我们就可以根据《emWin用户手册》的目录来找了,《emWin用户手册》对
它每种功能的函数集都有一个函数列表,简要介绍函数的功能,浏览相关的函数列表及其
简介,就可以找到相关的库函数名了,这时再搜索该函数名就可以获得详细的函数说明。
例如我们想查找某个在特定位置显示字符串的函数,就可以在用户手册的标签页中找到“文本API”标签(其它功能函数如“评估API(此处文档翻译有误,应为:
数值API)”、“图形API”等),然后就可以在文本API函数列表中找到一个名叫GUI_DispStringAt的函数,其功能简介是“在指定位置显示字符串”,它正符合我们的要求,再根据给出的函数名,就可以搜索到该函数的详细说明,如下图示:
图2-2
三、emWin开发过程中调用API及功能
3.1通用小工具API
例程
描述
WM_DeleteWindow()
删除窗口
WM_DisableMemdev()
禁止使用存储设备进行重绘
WM_EnableMemdev()
启用存储设备用于重绘
WM_InvalidateWndow()
使窗口无效
WM_Paint()
立即绘制或重绘窗口
WM_DelectWindow()
原型
voidWM_DeleteWindow(WM_HWINhWin);
参数:
hWin描述:
窗口句柄
其他信息
删除窗口前,他将收一条WM_DELETE消息,此消息通常用于删除所使用的任何对象(小工具),并释放窗口动态内存分配。
如果指定的窗口具有任何现有子窗口,则在删除窗口前自动删除这些子窗口,因此不必分别删除子窗口,窗口删除前会发送一条WM_NOTIFICATION_CHILD_DELETED消息到其父窗口。
WM_DisableMemdev()
原型
voidWM_DisableMemdev(WM_HWINhWin);
参数:
hWin描述:
窗口句柄
WM_EnableMemdev()
原型
voidWM_EnableMemdev(WM_HWINhWin);
参数:
hWin描述:
窗口句柄
WM_InvalidateWndow()
原型
voidWM_InvalidateWindow(WM_HWINhWin);
参数:
hWin描述:
窗口句柄
WM_Paint()
原型
voidWM_Paint(WM_HWINhWin);
参数:
hWin描述:
窗口句柄
3.2BUTTONAPI
例程
描述
BUTTON_Create()
创建BUTTON小工具
BUTTON_SetBkColor()
设置按钮背景色
BUTTON_SetDefaultFont()
设置BUTTON小工具默认字体
BUTTON_SetDefaultTextAlign()
设置BUTTON小工具默认文本对齐方式
BUTTON_SetBitmap()
设置显示指定按钮时要使用的位图
BUTTON_Create()
描述
在指定位置创建指定尺寸大小的BUTTON小工具
原型
BUTTON_HandleBUTTON_Create(intx0,inty0,intxSize,ySizeintId,intFlags);
参数:
x0描述:
按钮的最左像素(在父窗口中)
y0按钮的最上像素(在父窗口中)
xSize按钮的水平尺寸(单位:
像素)
ySize按钮的垂直尺寸(单位:
像素)
Id按钮按下时要返回的ID
Flags窗口创建标记,为了使小工具可见,通常是WM_CF_SHOW
返回值
已创建BUTTON小工具的句柄,函数失败时为0;
BUTTON_SetBkColor()
原型
voidBUTTON_SetBkColor(BUTTON_HandlehObj,unsigedintIndex,GUI_COLORColor);
参数:
hObj描述:
按钮的句柄
Index颜色的索引
Color要设置的颜色
BUTTON_SetDefaultFont()
描述
设置用于显示BUTTON小工具文本GUI_FONT结构的指针
原型
voidBUTTON_SetDefaultFont(constGUI_FONT*pFont);
参数:
pFont描述:
要使用的GUI_FONT指针
BUTTON_SetDefaultTextAlign()
描述
设置用于显示BUTTON小工具文本的默认对齐方式
原型
voidBUTTON_SetDefaultTextAlign(intAlign);
参数:
Align描述:
要使用的文本对齐方式
BUTTON_SetBitmap()
原型
VoidBUTTON_SetBitmap(BUTTON_HandlehObj,unsignedintIndex,constGUI_BITMAP*pBitmap);
参数:
hObj描述:
按钮的句柄
Index位图的索引
pBitmap位图结构的指针
其他信息
如果仅设置了未按下状态的位图,则当按钮按下或者禁用时,按钮也将显示该位图。
3.3EDITAPI
例程
描述
EDIT_Create()
创建EDIT小工具
EDIT_GetText()
获取用户输入
EDIT_SetFont()
选择文本字体
EDIT_SetMaxLen()
设置编辑字段的最大字符
EDIT_SetVlaue()
设置当前值
EDIT_Create()
原型
EDIT_HandleEDIT_Create(intx0,inty0,intxsize,intysize,intId,int,MaxLen,intFlags);
参数:
x0描述:
编辑字段的最左像素(在父坐标中)
y0编辑字段的最上像素(在父坐标中)
xsize编辑字段的水平尺寸(单位:
像素)
ysize编辑字段的垂直尺寸(单位:
像素)
Id将返回的ID
MaxLen最大字符数
Flags窗口创建标记
EDIT_GetText()
原型
VoidEDIT_GetText(EDIT_HandlehObj,char*sDest,intMaxLen);
参数:
hObj描述:
编辑字段句柄
sDest指向缓冲区指针
MaxLen缓冲区的大小
EDIT_SetFont()
原型
VoidEDIT_SetFont(EDIT_HandlehObj,constGUI_FONT*pFont);
参数:
hObj描述:
编辑字段的句柄
pFont字体的指针
EDIT_SetMaxLen()
原型
VoidEDIT_SetMaxLen(EDIT_HandlehObj,intMaxLen);
参数:
hObj描述:
编辑字段的句柄
MaxLen字符数
EDIT_SetVlaue()
原型
voidEDIT_SetVlaue(EDIT_HandlehObj,I32Value);
参数:
hObj描述:
编辑字段的句柄
Value新值
四、搭建emWin的Windows仿真环境
4.1仿真版本emWin文件介绍
emWin的windows仿真版本是免费的,大家可以直接在Segger官网下载,下载链接:
下载得到压缩包的文件名为:
SeggerEval_WIN32_MSVC_MinGW_GUI_V522.zip,它是emWin的5.22版本,解压该文件,其文件内容说明如下图示:
emWin仿真版本的工程在windows上是使用Microsoftvisualstudio2010作为编译器的。
4.2使用VS2010仿真emWin
1)解压文件。
解压emWin仿真版本压缩包,注意解压后的文件路径不要出现中文,否则在编译时会出错的;
2)打开仿真工程。
安装了VS2013集成环境后,打开emWin仿真版本的目录,找到“SimulationTrial.sln”文件,双击打开,打开后会弹出一个对话框提示VC++版本问题的,直接选择“是”即可,如下图示:
3)开始编译工程。
可以直接按快捷键“F5”,或者点击编译器中的调试按钮,编译并运
行工程,编译器会弹出一个提示框,我们在该对话框打上勾,并选择“是”,让它以
后都不用再提示我们选择生成新项目。
接下来就开始了编译过程,正常的话都会编译
通过,然后弹出一个emWin仿真运行的界面,如下图示:
4.3emWin仿真工程概览
主要包含了Application、Config、GUI、Sample、Simulation目录及一些外部依赖项文件,如下图示:
4.3.1Application文件夹
Application文件夹是演示例程的应用文件包。
我们编译的文件都是在这个Application目录下的,它包含了官方演示例程的应用文件,展开Application目录后,可以到这些文件命名都很规范,基本上每个文件对应一个演示例程的小环节,如果看到很炫酷的示例,可以到这里找找它的源代码来学习(演示例程学习难度较大,适合有一定emWin基础的用户)。
文件列表如下图:
4.3.2Config文件夹
Config文件夹是显示配置文件包。
在Config文件夹下,有GUIConf.c、GUIConf.h、LCDConfig.c、LCDConfig.h及SIMConfig.c文件,其中前三个文件在实际的嵌入式平台是非常重要的,它们分别起到了分配存储空间、裁剪emWin功能模块和LCD底层驱动实现。
而LCDConfig.h文件没有内容,SIMConfig.c文件是VS2013仿真环境需求的一些特定设置,在此我们不作探讨。
关于GUIConf.c、GUIConf.h与LCDConfig.c文件的内容见代码清单如下所示:
GUIConf.c文件内容
/*********************************************************************
*SEGGERMicrocontrollerGmbH&Co.KG*
*Solutionsforrealtimemicrocontrollerapplications*
**********************************************************************
**
*(c)1996-2015SEGGERMicrocontrollerGmbH&Co.KG*
**
*Internet:
Support:
support@*
**
**********************************************************************
**emWinV5.28-Graphicaluserinterfaceforembeddedapplications**
emWinisprotectedbyinternationalcopyrightlaws.Knowledgeofthe
sourcecodemaynotbeusedtowriteasimilarproduct.Thisfilemay
onlybeusedinaccordancewithalicenseandshouldnotbere-
distributedinanyway.Weappreciateyourunderstandingandfairness.
----------------------------------------------------------------------
File:
GUIConf.c
Purpose:
Displaycontrollerinitialization
---------------------------END-OF-HEADER------------------------------
*/
#include"GUI.h"
/*********************************************************************
*
*Defines
*
**********************************************************************
*/
//
//DefinetheavailablenumberofbytesavailablefortheGUI
//
#defineGUI_NUMBYTES0x400000
//
//Definetheaverageblocksize
//
#defineGUI_BLOCKSIZE0x80
/*********************************************************************
*
*Publiccode
*
**********************************************************************
*/
/*********************************************************************
*
*GUI_X_Config
*
*Purpose:
*Calledduringtheinitializationprocessinordertosetupthe
*availablememoryfortheGUI.
*/
voidGUI_X_Config(void){
//
//32bitalignedmemoryarea
//
staticU32aMemory[GUI_NUMBYTES/4];
//
//AssignmemorytoemWin
//
GUI_ALLOC_AssignMemory(aMemory,GUI_NUMBYTES);
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
}
/***************************Endoffile****************************/
GUIConf.c文件主要包含了一个GUI_X_Config函数,在这个函数中向系统申请了一个大小为4MB(0x400000)的静态空间aMemory,接着调用emWin的库函GUI_ALLOC_AssignMemory把这个空间分配给emWin,并使用库函数GUI_ALLOC_SetAvBlockSize设置存储块的平均大小。
所以emWin的库函数使用的存储空间都是aMemory中分配的。
在嵌入式平台上,我们需要根据其限制控制分配给emWin库的aMemory大小,修改宏GUI_NUMBYTES即可。
LCDConfig.c文件内容
/*********************************************************************
*SEGGERMicrocontrollerGmbH&Co.KG*
*Solutionsforrealtimemicrocontrollerapplications*
**********************************************************************
**
*(c)1996-2015SEGGERMicrocontrollerGmbH&Co.KG*
**
*Internet:
Support:
support@*
**
**********************************************************************
**emWinV5.28-Graphicaluserinterfaceforembeddedapplications**
emWinisprotectedbyinternationalcopyrightlaws.Knowledgeofthe
sourcecodemaynotbeusedtowriteasimilarproduct.Thisfilemay
onlybeusedinaccordancewithalicenseandshouldnotbere-
distributedinanyway.Weappreciateyourunderstandingandfairness.
----------------------------------------------------------------------
File:
LCDConf.c
Purpose:
Displaycontrollerconfiguration(singlelayer)
---------------------------END-OF-HEADER------------------------------
*/
#include"GUI.h"
/*********************************************************************
*
*Layerconfiguration(tobemodified)
*
*******************************************