emWin使用文档.docx

上传人:b****7 文档编号:10022565 上传时间:2023-02-08 格式:DOCX 页数:51 大小:1.68MB
下载 相关 举报
emWin使用文档.docx_第1页
第1页 / 共51页
emWin使用文档.docx_第2页
第2页 / 共51页
emWin使用文档.docx_第3页
第3页 / 共51页
emWin使用文档.docx_第4页
第4页 / 共51页
emWin使用文档.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

emWin使用文档.docx

《emWin使用文档.docx》由会员分享,可在线阅读,更多相关《emWin使用文档.docx(51页珍藏版)》请在冰豆网上搜索。

emWin使用文档.docx

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)

*

*******************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1