首页 STM32学uCGUI入门手册.pdf

STM32学uCGUI入门手册.pdf

STM32学uCGUI入门手册.pdf

上传者: 阿璞588 2012-05-08 评分1 评论0 下载642 收藏0 阅读量1339 暂无简介 简介 举报

简介:本文档为《STM32学uCGUI入门手册pdf》,可适用于IT书籍领域,主题内容包含第章µCGUI的介绍µCGUIµCGUI是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和符等。

第章µCGUI的介绍µCGUIµCGUI是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和LCD控制器的图形用户接口。它能工作于单任务或多任务的系统环境下。µCGUI适用于使用任何LCD控制和CPU的任何尺寸的物理和虚拟显示。它的设计是模块化的由在不同的模块中的不同的层组成。一个层称作LCD驱动程序包含了对LCD的全部访问。µCGUI适用于所有的CPU因为它由的ANSI的C语言编写的。µCGUI很适合大多数的使用黑色白色和彩色LCD的应用程序。它有一个很好的颜色管理器允许它处理灰阶。µCGUI也提供一个可扩展的D图形库和一个视窗管理器在使用一个最小的RAM时能支持显示窗口。本文档的目的本指南描述如何安装配置和在嵌入式应用中使用µCGUI图形用户界面。它也说明了软件的内部结构。假设本指南假定你对C编程语言已经具有一个扎实的认识。如果你觉得你对C语言的认识不是很充分的话我们推荐该由Kernighan和Richie编写的“C语言编程语言”给你它描述了程序设计标准而在新版中也包含了ANSI的C语言标准。汇编语言编程的知识不需要。第页µCGUI中文手册jk线条jk线条第章µCGUI的介绍需求在你使用µCGUI进行软件开发时并不需要一个目标系统只需要使用模拟器大多数软件就能够进行开发。然而最后的目的通常是能够在一个目标系统上运行该软件。目标系统(硬件)你的目标系统必须:•有一个CPU(位)•有最少的RAM和ROM•有一个完全的图形LCD(任何类型和任何分辩率)内存需求的变化取决于软件的哪些部分被使用以及你的目标编译程序的效率有多高。所以指定精确值是不可能的但是下面的数值适合典型系统。小的系统(没有视窗管理器)•RAM:字节•堆栈:字节•ROM:~KB(取决于使用的功能)大的系统(包括视窗管理器和控件)•RAM:~KB(取决于所需窗口的数量)•堆栈:字节•ROM:~KB(取决于使用的功能)注意如果你的应用程序使用许多字体的话ROM的需求将增加。以上所有的数值都是粗略的估计不能得到保证。开发环境(编译程序)使用什么样的CPU并不重要仅仅需要一个与ANSI兼容的C编译器。如果你的编辑器有一些限制请告知我们我们将通知你在编译软件时是否会带来问题。我们所知道的任何用于位CPU或者DSP的编译器都可以使用大多数的位编译器也可以使用。一个C编译器并不需要不过可以使用。因此如果想要的话应用程序也可以用C第页µCGUI中文手册第章µCGUI的介绍语言来编制。µCGUI的特点µCGUI被设计用于给使用一个图形LCD的任何应用程序提供一个高效率的与处理器和LCD控制器无关的图形用户界面。它适合于单一任务和多任务环境专用的操作系统或者任何商业的实时操作系统(RTOS)。µCGUI以C源代码形式提供。它可以适用于任何尺寸的物理和虚拟显示任何LCD控制器和CPU。其特点包括下列这些:一般特点•任何位CPU只需要一个与ANSI兼容的C编译器。•任何控制器支持(如果有合适的驱动程序)的任何(单色的灰度级或者彩色)LCD。•在较小显示屏上可以不要LCD控制器工作。•使用配置宏可以支持任何接口。•显示屏大小可配置。•字符和位图可能是写在LCD上的任一点而不仅仅局限于偶数的字节的地址。•程序对大小和速度都进行了最优化。•允许编译时的切换以获得不同的优化。•对于较慢的LCD控制器LCD能够被存储到内存当中减少访问的次数使其最小从而得到非常高的速度。•清晰的结构。•支持虚拟显示虚拟显示能够比实际的显示表现更大尺寸的内容。图库•支持不同颜色深度的位图。•有效的位图转换器。•绝对没有使用浮点运算。•快速线点绘制(没有使用浮点运算)。•非常快的圆多边形的绘制。•不同的绘画模式。字体•为基本软件提供了不同种类的字体:*********以及等几种高度(以象素为单位)的均衡字体。更多的信息参见第章:“标准字体”。第页µCGUI中文手册jk线条jk线条jk线条jk线条jk线条jk线条第章µCGUI的介绍•可以定义和简便地链接新的字体。•只有用于应用程序的字体才实际上与执行结果链接这样保证了最低的ROM占用。•字体可以分别在X轴和Y轴方向上充分地缩放。•提供有效的字体转换器任何在你的主系统(即MicrosoftWindows)上的有效字体都可以转换。字符串数值输出程序•程序支持任何字体的十进制二进制十六进制的数值显示。•程序支持任何字体的十进制二进制十六进制的数值编辑。视窗管理器(WM)•完全的窗口管理器包括剪切在内。一个窗口的外部区域的改写是不可能的。•窗口能够移动和缩放。•支持回调函数(可选择用法)。•WM使用极小的RAM(大约每个窗口字节)。可选择用于PC外观的控件•控件(窗口对象)有效。它们一般自动运行并且易于使用。触摸屏和鼠标支持•对于比如按钮控件之类的窗口对象µCGUI提供触摸屏和鼠标支持。PC工具•模拟器及观察器。•位图转换器。•字体转换器。范例和演示关于µCGUI能做什么为了给你一个更好的概念我们准备有不同的演示作为可运行的仿真程序在目录sampleEXE下。范例程序的源代码位于Sample目录。文件夹SampleGUIDemo包括一个展示大部分µCGUI特点的应用程序。第页µCGUI中文手册jk线条jk线条jk线条第章µCGUI的介绍估价板一个完全的评估板包括一个带有LCD的演示板一个C语言编译器和一个有效的范例工程。它已经设计好主要测试和验证µCGUI并且它可用于熟悉这个软件。评估板评估板包括MitsubishiMCPU和SEDLCD控制器(包括原理图和技术资料)。LCD(像素)或者单色的LCDVGA彩色显示LCD或者TFT。更详细的资料请访问我们的网站:wwwmicriumcom。如何使用本手册该手册说明了如何安装配置和使用µCGUI。它描述了软件的内部结构和µCGUI提供的所有的功能(应用程序接口或者API)。在实际上使用µCGUI之前你应该阅读或者至少浏览本手册对该软件做到耳濡目染。推荐下列步骤:•拷贝µCGUI文件到你的电脑。•仔细研究第章:“入门指南”。•使用模拟器多熟悉一理这个软件能作什么(参考第章:“仿真器”)。•使用本手册其余部分的参考资料扩展你的程序。第页µCGUI中文手册jk线条jk线条第章µCGUI的介绍排版上的语法约定本手册使用下列印刷惯例:类型用于Body正文文字。Keyword那些你在命令提示中输入的文字或者那些能在显示屏上看得见的文字(即系统函数文件或者路径名)。ParameterAPI函数中的参数。Sample在程序范例中的范例代码。NewSample那些已经被加到一个已存在有程序范例中的范例代码。屏幕和坐标屏幕由能够被单独控制的许多点组成。这些被称作像素。大部分µCGUI在它的API中向用户程序提供的文本和绘图函数能够在任何指定像素上写或绘制。水平刻度被称作X轴而垂直刻度被称作Y轴。一个二维坐标用X轴和Y轴坐标表示即值(X,Y)。在程序中需要用到X和Y坐标时X坐标总在前面。显示屏(或者一个窗口)的左上角为一默认的坐标(,)。正的X值方向被总是向右正的Y值方向总是向下。上图说明该坐标系和X轴和Y轴的方向。所有传递到一个API函数的坐标总是以像素为单位所指定。如何连接LCD到微控制器µCGUI处理所有的LCD访问。事实上任何LCD控制器都能够被支持不取决于它是如何访问的。至于细节请参阅第章:“低层配置”。此外如果你的LCD控制器不被支持的话请与我们保持联系。我们目前为全部有销售LCD控制器编写驱动程序对于你打算使用第页µCGUI中文手册jk线条jk线条jk线条jk线条第章µCGUI的介绍的LCD控制器已经有一个经过验证的驱动程序提供。在你的应用程序中写这样的用于访问LCD的程序(或者宏)通常非常简单。如果你的目标硬件有需要的话Micrium公司可以提供定制的服务。LCD如何与系统连接并不真的重要只要它通过软件以某种方式达到可能是按多种方式完成的。大多数这些接口通过一个提供源代码方式的驱动程序来支持。这些驱动程序通常不需要修改但是用于你的硬件要通过修改文件LCDConfh进行配置。有关根据需要如何定制一个驱动程序到你的硬件在第章:“LCD驱动程序”中说明。最通用的访问LCD的方式如下所描述。如果你只是想领会如何使用µCGUI你可以跳过本节。带有存储映像LCD控制器的LCDLCD控制器直接连接到系统的数据总线意思是能够如同访问一个RAM一样访问控制器。这是一个很有效的访问LCD控制器方法最值得推荐。LCD地址被定义为段LCDSEG为了能访问该LCD连接程序定位器只需要告知这些段位于什么地方。该位置必须与物理地址空间中访问地址相吻合。驱动程序对于这类接口是有效的并且能用于不同的LCD控制器。带有LCD控制器的LCD连接到端口缓冲区对于在快速处理器上使用的较慢的LCD控制器端口连线的使用可能是唯一的方案。这个访问LCD的方法有稍微比直接总线接口慢一些的缺点但是特别是使用一个减少LCD访问次数的高速缓存的情况LCD刷新并不会有大的延迟。所有那些需要处理的是定义程序或者宏设置或者读取与LCD连接的硬件端口缓冲区。这类接口也被用于不同的LCD控制器的不同的驱动程序所支持。特殊方案:没有LCD控制器的LCDLCD可以不需要LCD控制器而进行连接。在这种情况下LCD数据通常通过控制器经由一个或位移位寄存器直接提供。这些特殊的硬件方案有价格便宜的优点但是使用上的缺点是占用了大部分有效的计算时间。根据不同的CPU这会占到CPU的开销的到几乎之间对于较慢的CPU它根本是极不合理的。这类接口不需要一个特殊的LCD驱动器因为µCGUI简单地将所有显示数据放入LCD高速缓存中。你自己必须写硬件相关部分软件周期性地将数据从高速缓存的内存传递到你的LCD。对于MC和MC传递图像到显示屏中的范例代码可以用“C”和优化的汇编程序实现。第页µCGUI中文手册jk线条jk高亮jk线条jk线条jk线条jk线条jk线条jk线条第章µCGUI的介绍数据类型因为C语言并不提供与所有平台相吻合的固定长度的数据类型大多数情况下µCGUI使用它自己的数据类型如下表所示:数据类型定义说明Isignedchar位有符号值Uunsignedchar位无符号值Isignedshort位有符号值Uunsignedshort位无符号值Isignedlong位有符号值Uunsignedlong位无符号值IPsignedshort位(或更多)有符号值UPunsignedshort位(或更多)无符号值对于大多数位控制器来说该设置将工作正常。然而如果你在你的程序的其它部分中有相似的定义你可能想对它们进行修改或者重新配置。一个推荐的位置是置于配置文件LCDConfh中。第页µCGUI中文手册jk线条jk矩形jk矩形第章入门指南这一章提供一个在你的目标系统上设置和配置µCGUI的基本处理过程的概述。同时也包括了一个简单的范例程序。请注意大多数主题在后面的章节会有更详细的描述。在你开始更复杂的编程之前你很有必要参阅本手册的其它部分。第页µCGUI中文手册jk线条jk线条第章入门指南推荐的结构使µCGUI和你的应用文件分离这是我们推荐的。在工程文件的“root”目录的GUI子目录下保留所有的程序文件(包括头文件)这是一个好的习惯。目录结构应该和下图相似。这种习惯有一个好处就是很容易升级更新版本的µCGUI只需要替换GUI目录就可以。子目录下表显示了GUI所有子目录的内容目录内容Config配置文件GUIAntiAlias抗锯齿支持*GUIConvertMono用于BW(黑白两色)及灰度显示的色彩转换程序GUIConvertColor用于彩色显示的色彩转换的程序GUICoreµCGUI内核文件GUIFont字体文件GUILCDDriverLCD驱动GUIMendev存储器件支持*GUITouch触摸屏支持*GUIWidget视窗控件库*GUIWM视窗管理器*(带“*”标志的为可选项)第页µCGUI中文手册jk线条jk线条jk线条jk矩形jk线条jk线条第章入门指南“Include”目录确认你的Include路径包括有以下目录(包括的先后顺序并不重要):•Config•GUICore•GUIWidget(如果使用视窗控件库)•GUIWM(如果使用视窗管理器)警告:你必须确认你在每个文件中只使用了一个版本的µCGUI向目标程序加入µCGUI你主要是在这两者之间做一个选择一是将你要在你的工程中使用的源文件包括进来然后进行编译和连接或者建立一个库并连接这个库文件。如果你的链接工具支持“智能化”连接(仅仅连接那些使用到的模块而不是那些没有使用到的模块)那么就完全没有必要建立建立一个库因为只是要求将函数和数据结构进行连接。如果你的工具链接不支持“智能化”连接建立一个库就很有意义了否则如果将每样东西都要进行连接的话程序会变得非常大。对于一些CPU来说我们能提供有效的范例工程帮助你开始使用。建立一个库从源程序建立一个库是一个简单的流程。第一步是拷贝批处理文件(位于“SampleMakelib”目录下面)到根目录下。然后做一些必要的修改。总共有四个批处理文件需要拷贝如下表描述的那样。主文件“Makelibbat”在所有的系统中都是一样的所以无需修改。在你的目标系统上建立一个库正常情况下你需要对其它三个比较小的文件做一些微小的改动。最后执行“Makelibbat”文件建立库。批处理文件假定你的GUI和配置子目录已经如前面所推荐的那样建立起来了。文件说明Makelibbat主批处理文件不需要修改Prepbat由Makelibbat调用建立用于链接工具的工作环境CCbat由Makelibbat调用对库所用到的文件进行处理为这些目标文件建立一个列表该列表在下一步中由libbat中的libbat由Makelibbat调用将列表中的目标文件置入一个库当中建立库的流程如下图所示。Makelibbat文件首先调用Prepbat准备用于链接工具的环境。然后调用CCbat处理库当中所包括的每一个文件做完这些工作需要一些时间。CCbat第页µCGUI中文手册第章入门指南将这些目录文件加入一个列表这个列表是libbat要使用的。当所有加入到库当中的文件已经写入列表后Makelibbat调用libbat使用一个库管理工具将列表中的目标文件置入一个活动的库当中。MakelibbatPrepbatCCbat所有文件已加入库中?Libbat否是我们假设一个微软编译器已经安装到它的默认位置。如果所有的批处理文件都拷贝到根目录(GUI的上一级目录)并且不作任何修改将会产生一个用于µCGUI仿真的仿真库。无论如何要建立一个目标库的话必须要对Prepbat、CCbat和libbat三个文件进行修改。将µCGUI的“C”文件加入工程中通常说法你需要加入µCGUI的核心“C”文件LCD驱动你显示屏所使用的字体文件及其它你定制可选择的模块:•目录GUICore、GUIConvertColor及GUIConvertMono下的所有“C”文件•你的显示屏用到的字体(位于目录GUIFont下)附加的软件包如果你的显示屏使用附加的可选的模块你必须也要包括相关的“C”文件第页µCGUI中文手册jk线条jk线条第章入门指南配置µCGUI配置目录应该包含与你的要求相匹配的配置文件。文件LCDConfh通常包含所有的需要的定义使你能够为你的LCD使用µCGUI这是开始配置µCGUI的主要任务。了解更多的细节请参阅第章“底层配置”。如果因为你没有选择正确的显示方案或选择了错误的LCD控制器而导致µCGUI没有正确配置LCD可能不会显示任何东西或者显示些不是你所期望的内容。因此要注意修改你所需要的LCDConfh。配置宏的类型下面是一些配置宏的类型:二进制开关“B”这个开关的数值是“”或“”“”表示不激活而“”表示激活(除了“”以外的数值都可以激活但是使用“”使配置文件更易于阅读)。这些开关能够启用或禁止某一个功能或行为。开关是配置宏中最简单的格式。数值“N”数值有代码中某些地方使用以替代数值常量。在LCD配置方案中有一个典型的例子。选择开关“S”选择开关用于从多个选项中选择一项(只能选中一项)。典型的例子是用于所使用的LCD控制器的选择选择的数值指示调用相应源代码(相应的LCD驱动)产生目标代码。别名“A”一个类似于简单的文本替代这样操作的宏。一个典型例子是定义U预处理程序会用“unsignedchar”代替“U”。函数替换“F”该宏基本被视为一个正常的函数尽管有某些应用上的限制宏依旧被放入代码当中就象文本代换的例子一样。函数替换主要用于给一个高度依赖硬件的模块增加一些特殊的函第页µCGUI中文手册jk线条jk线条jk线条jk线条jk线条jk线条第章入门指南数(例如LCD的访问)这类宏通常使用括弧(与可选择参数一起)来声明。初始化µCGUI程序GUIInit()初始化LCD和µCGUI的内部数据结构在其它µCGUI函数运行之前必须被调用。这通过将下面一行放入你的程序序列的开始来做到:GUIInit()如果忽略了这个调用整个图形系统将不会得到初始化从而无法准备下一步的动作。在目标硬件上使用µCGUI下面所陈述是只是我们使用µCGUI进行编程的一些基本的步骤要点。这些步骤更详细的解释在以后的章节介绍。第一步:定制µCGUI通常第一步是通过修改头文件LcdConfh来定制µCGUI。你必须定义一些基本数据类型(UU等)及有关显示方案和所使用的LCD控制器的开关配置。第二步:定义访问地址和访问规则对于使用存储器映象的LCD仅仅需要在LcdConfh中定义访问地址。对于端口缓冲的LCD必须定义接口程序在SamplesLcdx目录下或是在我们Web站点的下载区的中有一些所需的接口程序的范例代码可供参考。第三步:编译、连接和测试范例程序µCGUI带有一些单任务和多任务环境下的范例程序编译、连接和测试这些范例程序直到你感觉已经熟悉它们了。第四步:修改范例程序对范例程序进行简单的修改增加些额外的命令诸如在显示时显示不同尺寸的文字显示一条线等等。第页µCGUI中文手册jk线条jk线条jk线条jk线条jk线条jk线条jk线条第章入门指南第五步:多任务应用:适应你的操作系统(如果需要的话)如果多任务允许同时访问显示器则宏GUIMAXTASK和GUIOS与文件GUITaskcg一道开始运行。更详细的内容及范例程序的修改请参考第章:高层次配置。第六步:使用µCGUI编写你的应用程序到现在你应该对如何使用µCGUI应该有一个清楚的了解。考虑如何去构建你的应用要求的程序通过调用适当的程序来使用µCGUI。参考本手册后面相关的章节这些章节讨论特殊的µCGUI函数和配置有效的宏。“HelloWorld”范例程序在早些时候一个“HelloWorld”程序被做为C语言编程的入门程序因为它本质上是一个能写出的最简单的程序。µCGUI的“HelloWorld”程序的名称是Helloc如下所示。在µCGUI所带的范例中的它的名称为BasicHelloWorldc。该程序的目的是在显示器的左上角写“HelloWorld”为了能实现这个功能应用硬件LCD和GUI必须首先要初始化。µCGUI的初始化通过在程序开始调用GUIInit()来实现就象先前所描述的那样。在本程序中我们假设应用硬件的初始化已经完成。*文件:BASICHelloWorldc目的:绘制“Helloworld”的简单范例*#include"GUIH"****************************************************************************主函数****************************************************************************voidmain(void){*要做的事:确认硬件首先初始化了!*GUIInit()GUIDispString("Helloworld!")while()第页µCGUI中文手册第章入门指南}给“HelloWord”程序增加功能我们的小程序能做的工作实在太少现在我们对它扩展一点功能:在显示“HelloWorld”后我们希望程序开始计数以估计能够获得多快的输出速度(至LCD)。我们在主程序末尾的仅仅增加一点点代码进行循环本质上是调用一个显示十进制形态数值的函数。*文件:BASICHelloWorldc目的:绘制“Helloworld”的简单范例*#include"GUIH"****************************************************************************主函数****************************************************************************voidmain(void){inti=*要做的事:确认硬件首先初始化了!*GUIInit()GUIDispString("Helloworld!")while(){GUIDispDecAt(i,,,)if(i>)i=}}第页µCGUI中文手册jk线条jk线条jk线条jk线条第章仿真器µCGUI的PC仿真器允许你在Windows下编译相同的“C”源程序。PC使用一个本地编译器(一般是微软所提供的)并建立一个用于你自己应用的可执行文件。这样做可能完成:•在你的PC上进行用户接口设计(不需要硬件支持)•调试你的用户接口程序•建立你的应用的演示可以用于描述用户接口最终的可执行文件能够很容易通过EMail传送。第页µCGUI中文手册第章仿真器理解仿真器µCGUI仿真器使用微软VisualC(或更高版本)及其所带的集成开发环境(IDE)。你能够在PC屏幕上看到你的LCD仿真效果一旦正确配置你的LCD后仿真效果能提供与你的LCD在X轴和Y轴上相同的分辨率及同样精确的颜色。仿真的整个图形库API和视窗管理API与你的目标系统是一样的所有函数运行与在目标硬件上运行高度一致因为仿真时使用了与目标系统同样的“C”源代码。唯一不同是在软件的底层:LCD驱动。PC仿真使用一个仿真的驱动写入一个位图以代替实际的LCD驱动。在你的屏幕上显示的位图使用第二个仿真线程。第二个线程在实际应用并不存在它只是在LCD程序被直接写屏时运行。在评估版µCGUI中使用仿真器版本µCGUI评估版包括一个完全的库允许你评估µCGUI的所有效特性。同时也包括µCGUI观察器(用于调试应用程序)及字体转换器和位图转换器的演示版。请记住这些做为一个评估版本你不能改变任何配置或者察看源代码但是你仍然能够熟悉µCGUI的使用。目录结构评估版仿真器的目录结构如下图所示。第页µCGUI中文手册jk线条jk线条jk线条jk线条第章仿真器目录“Application”包括演示程序的源代码。目录“Exe”包括一个“readytouse”演示程序。目录“GUI”包括库文件和库使用的包含文件。目录“Sample”包括仿真范例及其源代码。目录“Simulation”包括仿真所需的文件。目录“Tool”包括µCGUI观察器一个演示版的位图转换器和一个演示版的字体转换器。VisualC工作区上面所示的根目录包括微软VisualC工作区(SimulationTrialdsw)及项目文件(SimulationTrialdsp)。双击工作区文件可以打开微软IDE。VisualC工作区的目录结构如下图所示。编译演示程序位于应用目录下的演示程序源文件是一个“readytogo”仿真意思是你仅仅需要建立和启动它。请注意如果需要建立可执行文件你必须先安装微软VisualC(或以上的版本)。•第一步:双击SimulationTrialdsw文件打开VisualC工作区。•第二步:在菜单中选择“BuildRebuildAll”(或按“F”键)重建项目。第页µCGUI中文手册jk线条jk线条jk线条jk线条jk线条jk线条jk线条jk线条jk线条jk线条第章仿真器•第三步:在菜单中选择“BuildStartDebugGo”(或按“F”键)开始仿真。演示项目开始运行在任意时候可能通过单击右键并选择“Exit”退出。编译范例程序目录“Sample”包括“readytogo”范例程序可以示范µCGUI的不同特性及提供它们的典型应用的例子。为了建立这些可执行文件它们的C源代码必须加入项目中。通过下面的步骤很容易做到:•第一步:双击VisualC工作区的“Application”文件夹。演示文件会出现在它下面。•第二步:选择“Application”文件夹下的所有文件按下“Delete”键将它们删除。这些文件并不是真是被删除了只是从项目中移走。•第三步:现在你有了一个空的“Application”文件夹。在其上面单击右键选择需加入的文件加入到文件夹出现一个对话框。•第四步:双击“Sample”文件夹选择里面的一个范例文件。你的工作区目录应该如下图所示。当然文件名可以不一样在这里很重要的一件事是“Application”文件夹只能包含你所想编译的范例的C文件而不能是其它种类的文件。•第五步:在菜单下选择“BuildRebuildAll”(或按“F”键)重建范例文件。•第六步:在菜单中选择“BuildStartDebugGo”(或按“F”键)开始仿真。上面所选择范例的仿真结果如下图所示:第页µCGUI中文手册jk线条jk线条jk线条第章仿真器使用µCGUI源代码的仿真器目录结构仿真器的根目录可以在PC上的任意位置例如:C:workGSCSim。目录结构如下图所示该目录结构与我们推荐的用于目标应用的目录结构很相似(参阅第章:“入门指南”以获得更多信息)。子目录GUI包括µCGUI程序文件用于目标(交叉)编译器的同名目录中也要有同名的文件。你不应对GUI子目录做任何改变因为这样会使µCGUI升级到新的版本变得困难。配置目录包括需要修改的配置文件以反映你的目标硬件设置(主要是LCD尺寸和能够显示的颜色)。第页µCGUI中文手册第章仿真器VisualC工作区上面所显示的根目录包括微软VisualC工作区(Simulationdsw)和项目文件(Simulationdsp)。工作区允许你在编译应用程序将其用于目标系统之前进行修改及调试。VisualC工作区的目录结构与下图所示的相似。在这GUI文件夹是打开的显示µCGUI子目录。请注意你的GUI目录可能与下图并不完全一样这取决于你所拥有的µCGUI的附加特性。文件夹“Core”“Font”及“LCDDriver”是基本µCGUI软件包的一部分总在工作区目录中显示。编译你的应用程序仿真演示包括一个或多个可以修改的C文件(在“Application”目录下)你也可以在项目中增加或删除文件。最典型的是你至少应该把位图修改成为你公司的徽标或所选择的图片。你应该在VisualC工作区中重建程序以进行测试及调试。一旦你获得一个满意的结果并打算在你的应用中使用该程序你应该能够在目标系统中编译这些同样的文件得目标显示上得到同样的结果。使用仿真器的通常的处理步骤如下所述:第页µCGUI中文手册jk线条jk线条第章仿真器•第一步:双击Simulationdsw文件打开VisualC工作区。•第二步:在菜单下选择“BuildRebuildAll”(或按“F”键)编译项目。•第三步:在菜单中选择“BuildStartDebugGo”(或按“F”键)开始仿真。•第四步:使用你的徽标或图片代替原有的位图。•第五步:如果有需要对应用程序进行更大的修改这通过编辑源代码和增加删除文件来完成。•第六步:在VisualC中编译及运行应用程序测试结果根据你的需要进行继续修改和调试。•第七步:在你的目标系统上编译及运行应用程序。观察器如果你使用仿真器调试你的应用程序当你对源代码执行单步调试时无法看到LCD输出。观察器可能解决这个问题它能显示仿真的LCD窗口和色彩窗口。观察器的执行文件是“ToolµCGUIViewexe”。使用仿真器和观察器如果你在调试应用程序之前或正在调试时想启动观察器同时使用仿真器及观察器是你的选择。我们建议:•第一步:启动观察器。在仿真开始前没有LCD或色彩窗口出现。•第二步:打开VisualC工作区。•第三步:编译和运行应用程序。第页µCGUI中文手册jk线条jk线条jk矩形第章仿真器•第四步:如先前描述的一样调试应用程序。优点是当你使用单步操作时能在LCD窗口中显示所有相应绘图操作。观察器窗口默认的位置总是在顶部你可能通过在菜单中选择“ViewAlwaysontop”修改这个行为。设备仿真及其它高级特性警告:设备仿真和以其为基础的其它特性是高级特性可以对仿真器源代码提出要求以使其能工作于目标系统。通常这些源代码不随µCGUI一起提供。请和我们联系得到更多的信息。仿真器能够在你所选择的一张位图中显示仿真的LCD例如你的目标设备的图片。该位图能够在屏幕上任意拖动在某些应用中可以用于仿真整个目标设备的行为。为了仿真设备的外观需要一幅位图。该位图通常是设备的照片(顶视图)必须命名为Devicebmp。它可以是一个独立文件(在同一目录下作为一个可执行文件)或是做为一个资源包括进应用程序当中下面一行表示该位图文件包括在资源文件(extensionrc)中:BITMAPDISCARDABLE"Devicebmp"更多的信息请参考Win文档资料。位图的尺寸应该是这样的位图中LCD区域在屏幕上显示的尺寸应该等于仿真LCD的分辨率。在下面的例子中这是最好的显示效果:设备位图(Devicebmp)带有屏幕上可见的仿真LCD的设备红色区域自动成为透明区。透明区没有必要是矩形它们可以是任意的形状(甚至可以第页µCGUI中文手册jk线条第章仿真器是你的操作系统所限制的复杂形状但是一般的就足够了)。亮红色(xFF)是默认的透明区域的颜主要因为在大多数位图中很少用到这种颜色。如果位图中含有亮红色你可以在函数SIMSetTransColor中改变默认的透明色。Hardkey仿真Hardkey也可以作为设备的一部分进行仿真它可以由鼠标指针选择。意思是能区别在仿真设备中的一个键或一个按钮是否被按下或没有按下。当鼠标指针位于一个Hardkey上方并且鼠标按键保持按下状态则该Hardkey被认为是按下。当鼠标按键释放或指针移开Hardkey表示该Hardkey“没有按下”。在“按下”和“非按下”之间的切换行为也可以在程序SIMHARDKEYSETmode中说明。为了仿真Hardkey你需要第二幅设备位图除了按键自己(按下状态)以外都是透明的。该位图也作为目录里的一个独立文件或包括在可执行文件中做为一个资源。文件名需要定为“Devicebmp”典型的下面两行表示两们位图文件包括在资源文件(extensionrc)中:BITMAPDISCARDABLE"Devicebmp"BITMAPDISCARDABLE"Devicebmp"尽管Hardkey可以是任意的形状但有一点很重要就是两幅位图尺寸必须是一样的即在像素上一样这样在Devicebmp上的Hardkey就能够正确地覆盖在Devicebmp相应的位置上。下面的例子说明了这种情况:设备位图:Hardkey非按下的状态(Devicebmp)设备Hardkey位图:Hardkey按下的状态(Devicebmp)第页µCGUI中文手册jk线条jk线条第章仿真器当一个键被鼠标“按下”hardkey位图(Devicebmp)的相应部分将覆盖设备位图以显示该键处于其按下状态。键可以周期性的轮询以确定它们的状态(按下非按下)是否已经改变以及它们是否需要更新。二者选一当一个hardkey的状态改变时一个回调函数会被设置以触发一个自带的特殊动作。仿真器API所有仿真器的API函数在设置阶段必须被调用。调用应该从函数SIMXInit()内部被完美执行该程序位于文件SIMXc中。下面的例子表示在设置中调用SIMSetLCDPos():*#include<windowsh>#include<stdioh>#include"SIMh"voidSIMXInit(){SIMSetLCDPos(,)定义LCD在位图中的位置}下表列出了与仿真相关有用的函数在各自的类型中按字母进行排列。函数的详细描述在后面列出。函数说明设备仿真SIMSetLCDPos()在目标设备位图中设置仿真LCD的位置SIMSetTransColor()设置用于透明区域的颜色Hardkey仿真SIMHARDKEYGetNum()返回一个有效的Hardkey的号码SIMHARDKEYGetState()返回一个指定的Hardkey的状态(=非按下=按下)SIMHARDKEYGetCallback()设置当指定Hardkey状态改变时要执行的回调函数SIMHARDKEYSetMode()设置一个指定Hardkey的行为(默认=不切换)SIMHARDKEYSetState()设置一个指定Hardkey的状态SIMSetLCDPos()描述第页µCGUI中文手册jk线条jk线条jk线条jk线条第章仿真器在目标设备位图中设置仿真LCD的位置。函数原型voidSIMSetLCDPos(intx,inty)参数含意x仿真LCD左上角(单位:像素)的X轴坐标y仿真LCD左上角(单位:像素)的Y轴坐标附加信息X和Y坐标相对于目标设备位图因此坐标(,)表示位图左上角(原点)而非你的实际LCD。只有仿真屏幕的原点需要指定你的显示器的分辨率应该已经反映在配置目录下的配置文件中。SIMSetTransColor()描述设置用于设备或Hardkey位图的透明区域的颜色函数原型ISIMSetTransColor(IColor)参数含意Color颜色的RGB数值附加信息透明色的默认设置为亮红(xFF)。如果你的位图包括有同样色调的红色时你才需要这个典型的设置。SIMHARDKEYGetNum()描述返回一个有效的Hardkey的号码第页µCGUI中文手册第章仿真器函数原型intSIMHARDKEYGetNum(void)返回值在位图中找到的有效的Hardkey的号码。附加信息Hardkey的序号遵循阅读顺序(从左到右从上到下)。因此一个Hardkey最顶端的像素首先被发现而不管它的水平位置如果。例如在下面的位图中Hardkey被标号而在其它的函数中它们通过KeyIndex参数进行引用:推荐调用该函数对一幅位图是否被完全截入进行校验。SIMHARDKEYGetState()描述返回指定的Hardkey的状态函数原型intSIMHARDKEYGetState(unsignedintKeyIndex)参数含意KeyIndexHardkey的标签(=第一个键的标签)第页µCGUI中文手册第章仿真器返回值指定Hardkey的数值::非按下:按下SIMHARDKEYSetCallback()描述设置当指定Hardkey状态改变时要执行的回调函数函数原型SIMHARDKEYCB*SIMHARDKEYSetCallback(unsignedintKeyIndex,SIMHARDKEYCB*pfCallback)参数含意KeyIndexHardkey的标签(=第一个键的标签)pfCallback回调函数的指针返回值先前的回调函数的指针。附加信息回调函数原型必须如下所示:函数原型typedefvoidSIMHARDKEYCB(intKeyIndex,intState)参数含意KeyIndexHardkey的标签(=第一个键的标签)State指定Hardkey的状态(如下所示)参数State允许的数值::非按下第页µCGUI中文手册第章仿真器:按下SIMHARDKEYSetMode()描述设置指定Hardkey的行为函数原型intSIMHARDKEYSetMode(unsignedintKeyIndex,intMode)参数含意KeyIndexHardkey的标签(=第一个键的标签)Mode行为模式(如下表所示)参数Mode允许的数值:正常行为(默认):切换行为附加信息正常(默认)Hardkey行为意思指当鼠标指针位于一个键上方并且鼠标按键保持按下状态则该键被认为是按下。当鼠标按键释放或指针移开Hardkey该键被认为是非按下。而切换行为每一次单击鼠标对一个Hardkey进行一次“按下”或“非按下”状态的切换。这意思是如果你在一个Hardkey上方单击一下鼠标它变成“按下”这个状态一直保持到你再次单击鼠标。SIMHARDKEYSetState()描述设置指定Hardkey的状态。函数原型intSIMHARDKEYSetState(unsignedintKeyIndex,intState)参数含意第页µCGUI中文手册第章仿真器KeyIndexHardkey的标签(=第一个键的标签)State指定Hardkey的状态(如下所示)参数State允许的数值::非按下:按下附加信息该函数只有在SIMHARDKEYSetMode被设为(切换模式)时才有效。第页µCGUI中文手册第章文本显示使用µCGUI显示字体是很容易的。仅仅需要很少的的函数知识就能让我们在任何有效的字体当中进行文本书字然后显示在任何一个位置。我们首先对显示字体进行简短的介绍然后是分别对所用的函数进行更详细的说明。第页µCGUI中文手册jk线条jk线条第章文本显示基本函数为了在LCD上显示文本可以简单地调用函数GUIDispString()把你所希望显示的文本作为其参数例如:GUIDispString("Helloworld!")上面的代码将会在当前文本坐标显示文本“Helloworld!”。然而正如你所看到的有很多函数用于显示不同字体的文本或都在不同的坐标显示文本。另外它不仅能写字符串而且能写十进制数十六进制数和二进制数用于显示。即使图形

职业精品

分销渠道选择.ppt

辞职申请书(优质范文).doc

公司年检申请书doc.doc

厂家和经销商代理合同.doc

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 824
所需积分:0 立即下载

意见
反馈

返回
顶部