首页 > > > STM32学uCGUI入门手册.pdf

STM32学uCGUI入门手册.pdf

STM32学uCGUI入门手册.pdf

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

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

第1章 µC/GUI的介绍 µC/GUI µC/GUI 是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形 LCD 的应用提供一个有效的不依赖于处理器和 LCD 控制器的图形用户接口。它能工作于单任务或 多任务的系统环境下。µC/GUI 适用于使用任何 LCD 控制和 CPU 的任何尺寸的物理和虚拟显示。 它的设计是模块化的,由在不同的模块中的不同的层组成。一个层,称作 LCD 驱动程序,包 含了对 LCD 的全部访问。µC/GUI 适用于所有的 CPU,因为它 100%由的 ANSI 的 C 语言编写的。 µC/GUI 很适合大多数的使用黑色/白色和彩色 LCD 的应用程序。它有一个很好的颜色管理 器,允许它处理灰阶。µC/GUI 也提供一个可扩展的 2D 图形库和一个视窗管理器,在使用一个 最小的 RAM 时能支持显示窗口。 本文档的目的 本指南描述如何安装,配置和在嵌入式应用中使用µC/GUI 图形用户界面。它也说明了软 件的内部结构。 假设 本指南假定你对 C 编程语言已经具有一个扎实的认识。 如果你觉得你对 C 语言的认识不是很充分的话,我们推荐该由 Kernighan 和 Richie 编写 的“C 语言编程语言”给你,它描述了程序设计标准,而在新版中,也包含了 ANSI 的 C 语言 标准。汇编语言编程的知识不需要。 第 1 页 µC/GUI 中文手册 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 1.1 需求 在你使用µC/GUI 进行软件开发时,并不需要一个目标系统;只需要使用模拟器,大多数 软件就能够进行开发。然而,最后的目的通常是能够在一个目标系统上运行该软件。 目标系统(硬件) 你的目标系统必须: • 有一个 CPU(8/16/32/64 位) • 有最少的 RAM 和 ROM • 有一个完全的图形 LCD(任何类型和任何分辩率) 内存需求的变化取决于软件的哪些部分被使用以及你的目标编译程序的效率有多高。所 以指定精确值是不可能的,但是下面的数值适合典型系统。 小的系统(没有视窗管理器) • RAM:100 字节 • 堆栈:500 字节 • ROM:10~25KB(取决于使用的功能) 大的系统(包括视窗管理器和控件) • RAM:2~6KB(取决于所需窗口的数量) • 堆栈:1200 字节 • ROM:30~60KB(取决于使用的功能) 注意,如果你的应用程序使用许多字体的话,ROM 的需求将增加。以上所有的数值都是粗 略的估计,不能得到保证。 开发环境(编译程序) 使用什么样的 CPU 并不重要;仅仅需要一个与 ANSI 兼容的 C编译器。如果你的编辑器有 一些限制,请告知我们,我们将通知你在编译软件时是否会带来问题。我们所知道的任何用 于 16/32/64 位 CPU 或者 DSP 的编译器都可以使用;大多数的 8 位编译器也可以使用。 一个 C++编译器并不需要,不过可以使用。因此,如果想要的话,应用程序也可以用 C++ 第 2页 µC/GUI 中文手册 第 1 章 µC/GUI 的介绍 语言来编制。 1.2 µC/GUI 的特点 µC/GUI 被设计用于给使用一个图形 LCD 的任何应用程序提供一个高效率的,与处理器和 LCD 控制器无关的图形用户界面。它适合于单一任务和多任务环境,专用的操作系统或者任何 商业的实时操作系统(RTOS)。µC/GUI 以 C 源代码形式提供。它可以适用于任何尺寸的物理和 虚拟显示,任何 LCD 控制器和 CPU。其特点包括下列这些: 一般特点 • 任何 8/16/32 位 CPU;只需要一个与 ANSI 兼容的 C 编译器。 • 任何控制器支持(如果有合适的驱动程序)的任何(单色的,灰度级或者彩色)LCD。 • 在较小显示屏上,可以不要 LCD 控制器工作。 • 使用配置宏可以支持任何接口。 • 显示屏大小可配置。 • 字符和位图可能是写在 LCD 上的任一点,而不仅仅局限于偶数的字节的地址。 • 程序对大小和速度都进行了最优化。 • 允许编译时的切换以获得不同的优化。 • 对于较慢的 LCD 控制器,LCD 能够被存储到内存当中,减少访问的次数使其最小,从 而得到非常高的速度。 • 清晰的结构。 • 支持虚拟显示;虚拟显示能够比实际的显示表现更大尺寸的内容。 图库 • 支持不同颜色深度的位图。 • 有效的位图转换器。 • 绝对没有使用浮点运算。 • 快速线/点绘制(没有使用浮点运算)。 • 非常快的圆/多边形的绘制。 • 不同的绘画模式。 字体 • 为基本软件提供了不同种类的字体:4*6,6*8,6*9,8*8,8*9,8*16,8*17,8*18, 24*32,以及 8,10,13,16 等几种高度(以象素为单位)的均衡字体。更多的信息, 参见第 25 章:“标准字体”。 第 3 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 • 可以定义和简便地链接新的字体。 • 只有用于应用程序的字体才实际上与执行结果链接,这样保证了最低的 ROM 占用。 • 字体可以分别在 X 轴和 Y 轴方向上充分地缩放。 • 提供有效的字体转换器,任何在你的主系统(即 Microsoft Windows)上的有效字体 都可以转换。 字符串/数值输出程序 • 程序支持任何字体的十进制,二进制,十六进制的数值显示。 • 程序支持任何字体的十进制,二进制,十六进制的数值编辑。 视窗管理器(WM) • 完全的窗口管理器包括剪切在内。一个窗口的外部区域的改写是不可能的。 • 窗口能够移动和缩放。 • 支持回调函数(可选择用法)。 • WM 使用极小的 RAM(大约每个窗口 20 字节)。 可选择用于PC外观的控件 • 控件(窗口对象)有效。它们一般自动运行,并且易于使用。 触摸屏和鼠标支持 • 对于比如按钮控件之类的窗口对象,µC/GUI 提供触摸屏和鼠标支持。 PC工具 • 模拟器及观察器。 • 位图转换器。 • 字体转换器。 范例和演示 关于µC/GUI 能做什么,为了给你一个更好的概念,我们准备有不同的演示作为可运行的 仿真程序,在目录sample\EXE下。范例程序的源代码位于Sample目录。文件夹Sample\GUIDemo 包括一个展示大部分µC/GUI 特点的应用程序。 第 4页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 1.3 估价板 一个完全的评估板包括一个带有 LCD 的演示板,一个 C 语言编译器和一个有效的范例工 程。它已经设计好,主要测试和验证µC/GUI,并且它可用于熟悉这个软件。 评估板 评估板包括 Mitsubishi M30803 CPU 和 SED13705 LCD 控制器(包括原理图和技术资料)。 LCD(320240 像素)或者单色的 LCD,1/4VGA 彩色显示 LCD 或者 TFT。 更详细的资料,请访问我们的网站:www.micrium.com。 1.4 如何使用本手册 该手册说明了如何安装,配置和使用µC/GUI。它描述了软件的内部结构和µC/GUI 提供的 所有的功能(应用程序接口,或者 API)。 在实际上使用µC/GUI 之前,你应该阅读或者至少浏览本手册,对该软件做到耳濡目染。 推荐下列步骤: • 拷贝µC/GUI 文件到你的电脑。 • 仔细研究第 2 章:“入门指南”。 • 使用模拟器多熟悉一理这个软件能作什么(参考第 3 章:“仿真器”)。 • 使用本手册其余部分的参考资料扩展你的程序。 第 5 页 µC/GUI 中文手册 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 排版上的语法约定 本手册使用下列印刷惯例: 类型 用于 Body 正文文字。 Keyword 那些你在命令-提示中输入的文字,或者那些能在显示屏上看得见的文字(即系统函数,文件或者路径名)。 Parameter API 函数中的参数。 Sample 在程序范例中的范例代码。 New Sample 那些已经被加到一个已存在有程序范例中的范例代码。 1.5 屏幕和坐标 屏幕由能够被单独控制的许多点组成。这些被称作像素。大部分µC/GUI 在它的 API 中向 用户程序提供的文本和绘图函数能够在任何指定像素上写或绘制。 水平刻度被称作 X 轴,而垂直刻度被称作 Y 轴。一个二维坐标用 X 轴和 Y 轴坐标表示, 即值(X,Y)。在程序中需要用到 X 和 Y 坐标时,X 坐标总在前面。显示屏(或者一个窗口)的 左上角为一默认的坐标(0,0)。正的 X 值方向被总是向右;正的 Y 值方向总是向下。上图说 明该坐标系和 X 轴和 Y轴的方向。所有传递到一个 API 函数的坐标总是以像素为单位所指定。 1.6 如何连接LCD到微控制器 µC/GUI 处理所有的 LCD 访问。事实上任何 LCD 控制器都能够被支持,不取决于它是如何 访问的。至于细节,请参阅第 20 章:“低层配置”。此外,如果你的 LCD 控制器不被支持的 话,请与我们保持联系。我们目前为全部有销售 LCD 控制器编写驱动程序,对于你打算使用 第 6页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 的 LCD 控制器已经有一个经过验证的驱动程序提供。在你的应用程序中写这样的用于访问 LCD 的程序(或者宏)通常非常简单。如果你的目标硬件有需要的话,Micrium 公司可以提供定制 的服务。 LCD 如何与系统连接并不真的重要,只要它通过软件以某种方式达到,可能是按多种方式 完成的。大多数这些接口通过一个提供源代码方式的驱动程序来支持。这些驱动程序通常不 需要修改,但是用于你的硬件,要通过修改文件 LCDConf.h 进行配置。有关根据需要如何定 制一个驱动程序到你的硬件在第 22 章:“LCD 驱动程序”中说明。最通用的访问 LCD 的方式 如下所描述。如果你只是想领会如何使用µC/GUI,你可以跳过本节。 带有存储映像LCD控制器的LCD LCD 控制器直接连接到系统的数据总线,意思是能够如同访问一个 RAM 一样访问控制器。 这是一个很有效的访问 LCD 控制器方法,最值得推荐。LCD 地址被定义为段 LCDSEG,为了能 访问该 LCD,连接程序/定位器只需要告知这些段位于什么地方。该位置必须与物理地址空间 中访问地址相吻合。驱动程序对于这类接口是有效的,并且能用于不同的 LCD 控制器。 带有LCD控制器的LCD连接到端口/缓冲区 对于在快速处理器上使用的较慢的 LCD 控制器,端口-连线的使用可能是唯一的方案。这 个访问 LCD 的方法有稍微比直接总线接口慢一些的缺点,但是,特别是使用一个减少 LCD 访 问次数的高速缓存的情况,LCD 刷新并不会有大的延迟。所有那些需要处理的是定义程序或者 宏,设置或者读取与 LCD 连接的硬件端口/缓冲区。这类接口也被用于不同的 LCD 控制器的不 同的驱动程序所支持。 特殊方案:没有LCD控制器的LCD LCD 可以不需要 LCD 控制器而进行连接。在这种情况下,LCD 数据通常通过控制器经由一 个 4 或 8 位移位寄存器直接提供。这些特殊的硬件方案有价格便宜的优点,但是使用上的缺 点是占用了大部分有效的计算时间。根据不同的 CPU,这会占到 CPU 的开销的 20%到几乎 100% 之间;对于较慢的 CPU,它根本是极不合理的。这类接口不需要一个特殊的 LCD 驱动器,因为 µC/GUI 简单地将所有显示数据放入 LCD 高速缓存中。你自己必须写硬件相关部分软件,周期 性地将数据从高速缓存的内存传递到你的 LCD。 对于 M16C 和 M16C/80,传递图像到显示屏中的范例代码可以用“C”和优化的汇编程序实 现。 第 7 页 µC/GUI 中文手册 jk 线条 jk 高亮 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 第 1 章 µC/GUI 的介绍 1.7 数据类型 因为 C 语言并不提供与所有平台相吻合的固定长度的数据类型,大多数情况下,µC/GUI 使用它自己的数据类型,如下表所示: 数据类型 定义 说明 I8 signed char 8 位有符号值 U8 unsigned char 16 位无符号值 I16 signed short 16 位有符号值 U16 unsigned short 16 位无符号值 I32 signed long 32 位有符号值 U32 unsigned long 32 位无符号值 I16P signed short 16 位(或更多)有符号值 U16P unsigned short 16 位(或更多)无符号值 对于大多数 16/32 位控制器来说,该设置将工作正常。然而,如果你在你的程序的其它 部分中有相似的定义,你可能想对它们进行修改或者重新配置。一个推荐的位置是置于配置 文件 LCDConf.h 中。 第 8页 µC/GUI 中文手册 jk 线条 jk 矩形 jk 矩形 第2章 入门指南 这一章提供一个在你的目标系统上设置和配置µC/GUI的基本处理过程的概述。同时也包 括了一个简单的范例程序。 请注意,大多数主题在后面的章节会有更详细的描述。在你开始更复杂的编程之前,你 很有必要参阅本手册的其它部分。 第 1 页 µC/GUI 中文手册 jk 线条 jk 线条 第 2 章 入门指南 2.1推荐的结构 使µC/GUI 和你的应用文件分离,这是我们推荐的。在工程文件的“root”目录的 GUI 子 目录下保留所有的程序文件(包括头文件),这是一个好的习惯。目录结构应该和下图相似。 这种习惯有一个好处,就是很容易升级更新版本的µC/GUI,只需要替换 GUI 目录就可以。 子目录 下表显示了 GUI 所有子目录的内容 目 录 内 容 Config 配置文件 GUI/AntiAlias 抗锯齿支持 * GUI/ConvertMono 用于 B/W(黑白两色)及灰度显示的色彩转换程序 GUI/ConvertColor 用于彩色显示的色彩转换的程序 GUI/Core µC/GUI 内核文件 GUI/Font 字体文件 GUI/LCDDriver LCD 驱动 GUI/Mendev 存储器件支持 * GUI/Touch 触摸屏支持 * GUI/Widget 视窗控件库 * GUI/WM 视窗管理器 * (带“*”标志的为可选项) 第 2页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 矩形 jk 线条 jk 线条 第 2 章 入门指南 “Include”目录 确认你的 Include 路径包括有以下目录(包括的先后顺序并不重要): • Config • GUI/Core • GUI/Widget(如果使用视窗控件库) • GUI/WM(如果使用视窗管理器) 警告:你必须确认你在每个文件中只使用了一个版本的µC/GUI 2.2 向目标程序加入µC/GUI 你主要是在这两者之间做一个选择,一是将你要在你的工程中使用的源文件包括进来, 然后进行编译和连接;或者建立一个库并连接这个库文件。如果你的链接工具支持“智能化” 连接(仅仅连接那些使用到的模块而不是那些没有使用到的模块),那么就完全没有必要建立 建立一个库,因为只是要求将函数和数据结构进行连接。如果你的工具链接不支持“智能化” 连接,建立一个库就很有意义了,否则如果将每样东西都要进行连接的话,程序会变得非常 大。对于一些 CPU 来说,我们能提供有效的范例工程帮助你开始使用。 2.3 建立一个库 从源程序建立一个库是一个简单的流程。第一步是拷贝批处理文件(位于 “Sample\Makelib”目录下面)到根目录下。然后,做一些必要的修改。总共有四个批处理 文件需要拷贝,如下表描述的那样。主文件“Makelib.bat”在所有的系统中都是一样的,所 以无需修改。在你的目标系统上建立一个库,正常情况下你需要对其它三个比较小的文件做 一些微小的改动。最后执行“Makelib.bat”文件建立库。批处理文件假定你的 GUI 和配置子 目录已经如前面所推荐的那样建立起来了。 文 件 说 明 Makelib.bat 主批处理文件,不需要修改 Prep.bat 由 Makelib.bat 调用,建立用于链接工具的工作环境 CC.bat 由 Makelib.bat 调用,对库所用到的文件进行处理,为这些目标文件建立一个列表,该列表在下一步中由 lib.bat 中的 lib.bat 由 Makelib.bat 调用,将列表中的目标文件置入一个库当中 建立库的流程如下图所示。Makelib.bat 文件首先调用 Prep.bat 准备用于链接工具的环 境。然后调用 CC.bat 处理库当中所包括的每一个文件,做完这些工作需要一些时间。CC.bat 第 3 页 µC/GUI 中文手册 第 2 章 入门指南 将这些目录文件加入一个列表,这个列表是 lib.bat 要使用的。当所有加入到库当中的文件 已经写入列表后,Makelib.bat6 调用 lib.bat,使用一个库管理工具将列表中的目标文件置 入一个活动的库当中。 Makelib.bat Prep.bat CC.bat 所有文件已加入库中? Lib.bat 否 是 我们假设一个微软编译器已经安装到它的默认位置。如果所有的批处理文件都拷贝到根 目录(GUI 的上一级目录),并且不作任何修改,将会产生一个用于µC/GUI 仿真的仿真库。无 论如何,要建立一个目标库的话,必须要对 Prep.bat、CC.bat 和 lib.bat 三个文件进行修改。 2.4 将µC/GUI的“C”文件加入工程中 通常说法,你需要加入µC/GUI 的核心“C”文件,LCD 驱动,你显示屏所使用的字体文件 及其它你定制可选择的模块: • 目录 GUI\Core、GUI\ConvertColor 及 GUI\ConvertMono 下的所有“C”文件 • 你的显示屏用到的字体(位于目录 GUI\Font 下) 附加的软件包 如果你的显示屏使用附加的可选的模块,你必须也要包括相关的“C”文件 第 4页 µC/GUI 中文手册 jk 线条 jk 线条 第 2 章 入门指南 2.5 配置µC/GUI 配置目录应该包含与你的要求相匹配的配置文件。文件 LCDConf.h 通常包含所有的需要 的定义,使你能够为你的 LCD 使用µC/GUI,这是开始配置µC/GUI 的主要任务。了解更多的细 节,请参阅第 20 章“底层配置”。 如果因为你没有选择正确的显示方案或选择了错误的 LCD 控制器而导致µC/GUI 没有正确 配置,LCD 可能不会显示任何东西,或者显示些不是你所期望的内容。因此,要注意修改你所 需要的 LCDConf.h。 配置宏的类型 下面是一些配置宏的类型: 二进制开关“B” 这个开关的数值是“0”或“1”,“0”表示不激活,而“1”表示激活(除了“0”以外的 数值都可以激活,但是使用“1” 使配置文件更易于阅读)。这些开关能够启用或禁止某一个 功能或行为。开关是配置宏中最简单的格式。 数值“N” 数值有代码中某些地方使用,以替代数值常量。在 LCD 配置方案中有一个典型的例子。 选择开关“S” 选择开关用于从多个选项中选择一项(只能选中一项)。典型的例子是用于所使用的 LCD 控制器的选择,选择的数值指示调用相应源代码(相应的 LCD 驱动)产生目标代码。 别名“A” 一个类似于简单的文本替代这样操作的宏。一个典型例子是定义 U8,预处理程序会用 “unsigned char”代替“U8”。 函数替换“F” 该宏基本被视为一个正常的函数,尽管有某些应用上的限制,宏依旧被放入代码当中, 就象文本代换的例子一样。函数替换主要用于给一个高度依赖硬件的模块增加一些特殊的函 第 5 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 第 2 章 入门指南 数(例如 LCD 的访问),这类宏通常使用括弧(与可选择参数一起)来声明。 2.6 初始化µC/GUI 程序 GUI_Init()初始化 LCD 和µC/GUI 的内部数据结构,在其它µC/GUI 函数运行之前必须 被调用。这通过将下面一行放入你的程序序列的开始来做到: GUI_Init(); 如果忽略了这个调用,整个图形系统将不会得到初始化,从而无法准备下一步的动作。 2.7 在目标硬件上使用µC/GUI 下面所陈述是只是我们使用µC/GUI 进行编程的一些基本的步骤要点。这些步骤更详细的 解释在以后的章节介绍。 第一步:定制µC/GUI 通常第一步是通过修改头文件 LcdConf.h 来定制µC/GUI。你必须定义一些基本数据类型 (U8,U16 等),及有关显示方案和所使用的 LCD 控制器的开关配置。 第二步:定义访问地址和访问规则 对于使用存储器映象的 LCD,仅仅需要在 LcdConf.h 中定义访问地址。 对于端口/缓冲的 LCD,必须定义接口程序,在 Samples\Lcd_x 目录下,或是在我们 Web 站点的下载区的中,有一些所需的接口程序的范例代码可供参考。 第三步:编译、连接和测试范例程序 µC/GUI 带有一些单任务和多任务环境下的范例程序,编译、连接和测试这些范例程序, 直到你感觉已经熟悉它们了。 第四步:修改范例程序 对范例程序进行简单的修改,增加些额外的命令,诸如在显示时显示不同尺寸的文字, 显示一条线等等。 第 6页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 第 2 章 入门指南 第五步:多任务应用:适应你的操作系统(如果需要的话) 如果多任务允许同时访问显示器,则宏 GUI_MAXTASK 和 GUI_OS 与文件 GUITask.cg 一道 开始运行。更详细的内容及范例程序的修改请参考第 21 章:高层次配置。 第六步:使用µC/GUI 编写你的应用程序 到现在,你应该对如何使用µC/GUI 应该有一个清楚的了解。考虑如何去构建你的应用要 求的程序,通过调用适当的程序来使用µC/GUI。参考本手册后面相关的章节,这些章节讨论 特殊的µC/GUI 函数和配置有效的宏。 2.8 “Hello World”范例程序 在早些时候,一个“Hello World”程序被做为 C 语言编程的入门程序,因为它本质上是 一个能写出的最简单的程序。µC/GUI 的“Hello World”程序的名称是 Hello.c,如下所示。 在µC/GUI 所带的范例中的它的名称为 Basic_HelloWorld.c。 该程序的目的是在显示器的左上角写“Hello World”,为了能实现这个功能,应用硬件, LCD 和 GUI 必须首先要初始化。µC/GUI 的初始化通过在程序开始调用 GUI_Init()来实现,就 象先前所描述的那样。在本程序中,我们假设应用硬件的初始化已经完成。 /*-------------------------------------------------------------------------- 文件: BASIC_HelloWorld.c 目的: 绘制“Hello world”的简单范例 --------------------------------------------------------------------------*/ #include "GUI.H" /*************************************************************************** * 主函数 * ***************************************************************************/ void main(void) { /* 要做的事:确认硬件首先初始化了! */ GUI_Init(); GUI_DispString("Hello world!"); while(1); 第 7 页 µC/GUI 中文手册 第 2 章 入门指南 } 给“Hello Word”程序增加功能 我们的小程序能做的工作实在太少,现在我们对它扩展一点功能:在显示“Hello World” 后,我们希望程序开始计数以估计能够获得多快的输出速度(至LCD)。我们在主程序末尾的 仅仅增加一点点代码进行循环,本质上是调用一个显示十进制形态数值的函数。 /*-------------------------------------------------------------------------- 文件: BASIC_HelloWorld1.c 目的: 绘制“Hello world”的简单范例 --------------------------------------------------------------------------*/ #include "GUI.H" /*************************************************************************** * 主函数 * ***************************************************************************/ void main(void) { int i=0; /* 要做的事:确认硬件首先初始化了! */ GUI_Init(); GUI_DispString("Hello world!"); while(1) { GUI_DispDecAt( i++, 20,20,4); if(i>9999) i=0; } } 第 8页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 第3章 仿真器 µC/GUI的PC仿真器允许你在Windows下编译相同的“C”源程序。PC使用一个本地编译器 (一般是微软所提供的)并建立一个用于你自己应用的可执行文件。这样做可能完成: • 在你的PC上进行用户接口设计(不需要硬件支持) • 调试你的用户接口程序 • 建立你的应用的演示,可以用于描述用户接口 最终的可执行文件能够很容易通过E-Mail传送。 第 1 页 µC/GUI 中文手册 第 3 章 仿真器 3.1 理解仿真器 µC/GUI仿真器使用微软Visual C++(6.0或更高版本)及其所带的集成开发环境(IDE)。 你能够在PC屏幕上看到你的LCD仿真效果,一旦正确配置你的LCD后仿真效果能提供与你的LCD 在X轴和Y轴上相同的分辨率及同样精确的颜色。 仿真的整个图形库API和视窗管理API与你的目标系统是一样的;所有函数运行与在目标 硬件上运行高度一致,因为仿真时使用了与目标系统同样的“C”源代码。唯一不同是在软件 的底层:LCD驱动。PC仿真使用一个仿真的驱动写入一个位图,以代替实际的LCD驱动。在你 的屏幕上显示的位图使用第二个仿真线程。第二个线程在实际应用并不存在,它只是在LCD程 序被直接写屏时运行。 3.2 在评估版µC/GUI中使用仿真器 版本 µC/GUI 评估版包括一个完全的库,允许你评估µC/GUI的所有效特性。同时也包括µC/GUI 观察器(用于调试应用程序)及字体转换器和位图转换器的演示版。 请记住这些,做为一个评估版本,你不能改变任何配置或者察看源代码,但是你仍然能 够熟悉µC/GUI的使用。 目录结构 评估版仿真器的目录结构如下图所示。 第 2 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 第 3 章 仿真器 目录“Application”包括演示程序的源代码。 目录“Exe”包括一个“ready-to-use”演示程序。 目录“GUI”包括库文件和库使用的包含文件。 目录“Sample”包括仿真范例及其源代码。 目录“Simulation”包括仿真所需的文件。 目录“Tool”包括µC/GUI观察器,一个演示版的位图转换器和一个演示版的字体转换器。 Visual C++工作区 上面所示的根目录包括微软Visual C++工作区(Simulation-Trial.dsw)及项目文件 (Simulation-Trial.dsp)。双击工作区文件可以打开微软IDE。 Visual C++工作区的目录结构如下图所示。 编译演示程序 位于应用目录下的演示程序源文件是一个“ready-to-go”仿真,意思是你仅仅需要建立 和启动它。请注意,如果需要建立可执行文件,你必须先安装微软Visual C++(6.0或以上的 版本)。 • 第一步:双击Simulation-Trial.dsw 文件打开Visual C++工作区。 • 第二步:在菜单中选择“Build/Rebuild All” (或按“F7”键)重建项目。 第 3 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 jk 线条 第 3 章 仿真器 • 第三步:在菜单中选择“Build/Start Debug/Go” (或按“F5”键)开始仿真。 演示项目开始运行,在任意时候可能通过单击右键并选择“Exit”退出。 编译范例程序 目录“Sample”包括“ready-to-go”范例程序,可以示范µC/GUI的不同特性及提供它们 的典型应用的例子。为了建立这些可执行文件,它们的C源代码必须加入项目中。通过下面的 步骤很容易做到: • 第一步:双击Visual C++工作区的“Application”文件夹。演示文件会出现在它下 面。 • 第二步:选择“Application”文件夹下的所有文件,按下“Delete”键将它们删除。 这些文件并不是真是被删除了,只是从项目中移走。 • 第三步:现在你有了一个空的“Application”文件夹。在其上面单击右键,选择需 加入的文件加入到文件夹,出现一个对话框。 • 第四步:双击“Sample”文件夹,选择里面的一个范例文件。你的工作区目录应该 如下图所示。当然,文件名可以不一样;在这里,很重要的一件事是“Application” 文件夹只能包含你所想编译的范例的C文件,而不能是其它种类的文件。 • 第五步:在菜单下选择“Build/Rebuild All”(或按“F7”键)重建范例文件。 • 第六步:在菜单中选择“Build/Start Debug/Go” (或按“F5”键)开始仿真。上 面所选择范例的仿真结果如下图所示: 第 4 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 第 3 章 仿真器 3.3 使用µC/GUI 源代码的仿真器 目录结构 仿真器的根目录可以在PC上的任意位置,例如:C:\work\GSCSim。目录结构如下图所示, 该目录结构与我们推荐的用于目标应用的目录结构很相似(参阅第2章:“入门指南”以获得 更多信息)。子目录GUI包括µC/GUI程序文件,用于目标(交叉)编译器的同名目录中也要有 同名的文件。你不应对GUI子目录做任何改变,因为这样会使µC/GUI升级到新的版本变得困难。 配置目录包括需要修改的配置文件,以反映你的目标硬件设置(主要是LCD尺寸和能够显示的 颜色)。 第 5 页 µC/GUI 中文手册 第 3 章 仿真器 Visual C++工作区 上面所显示的根目录包括微软Visual C++工作区(Simulation.dsw)和项目文件 (Simulation.dsp)。 工作区允许你在编译应用程序将其用于目标系统之前进行修改及调试。 Visual C++ 工作区的目录结构与下图所示的相似。在这,GUI文件夹是打开的,显示µC/GUI 子目录。请注意,你的GUI目录可能与下图并不完全一样,这取决于你所拥有的µC/GUI的附加 特性。文件夹“Core”,“Font”及“LCDDriver”是基本µC/GUI软件包的一部分,总在工作 区目录中显示。 编译你的应用程序 仿真演示包括一个或多个可以修改的C文件(在“Application”目录下),你也可以在 项目中增加或删除文件。最典型的是你至少应该把位图修改成为你公司的徽标或所选择的图 片。你应该在Visual C++ 工作区中重建程序以进行测试及调试。一旦你获得一个满意的结果 并打算在你的应用中使用该程序,你应该能够在目标系统中编译这些同样的文件,得目标显 示上得到同样的结果。使用仿真器的通常的处理步骤如下所述: 第 6 页 µC/GUI 中文手册 jk 线条 jk 线条 第 3 章 仿真器 • 第一步:双击Simulation.dsw 文件打开Visual C++工作区。 • 第二步:在菜单下选择“Build/Rebuild All”(或按“F7”键)编译项目。 • 第三步:在菜单中选择“Build/Start Debug/Go”(或按“F5”键)开始仿真。 • 第四步:使用你的徽标或图片代替原有的位图。 • 第五步:如果有需要,对应用程序进行更大的修改,这通过编辑源代码和增加/删除 文件来完成。 • 第六步:在Visual C++中编译及运行应用程序测试结果,根据你的需要进行继续修 改和调试。 • 第七步:在你的目标系统上编译及运行应用程序。 3.4 观察器 如果你使用仿真器调试你的应用程序,当你对源代码执行单步调试时无法看到LCD输出。 观察器可能解决这个问题,它能显示仿真的LCD窗口和色彩窗口。观察器的执行文件是 “Tool\µC-GUI-View.exe”。 使用仿真器和观察器 如果你在调试应用程序之前或正在调试时,想启动观察器,同时使用仿真器及观察器是 你的选择。我们建议: • 第一步:启动观察器。在仿真开始前,没有LCD或色彩窗口出现。 • 第二步:打开Visual C++ 工作区。 • 第三步:编译和运行应用程序。 第 7 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 矩形 第 3 章 仿真器 • 第四步:如先前描述的一样调试应用程序。 优点是,当你使用单步操作时,能在LCD窗口中显示所有相应绘图操作。观察器窗口默认 的位置总是在顶部,你可能通过在菜单中选择“View\Always on top”修改这个行为。 3.5 设备仿真及其它高级特性 警告:设备仿真和以其为基础的其它特性,是高级特性,可以对仿真器源代码提出要求 以使其能工作于目标系统。通常这些源代码不随µC/GUI一起提供。请和我们联系得到更多的 信息。 仿真器能够在你所选择的一张位图中显示仿真的LCD,例如你的目标设备的图片。该位图 能够在屏幕上任意拖动,在某些应用中,可以用于仿真整个目标设备的行为。 为了仿真设备的外观,需要一幅位图。该位图通常是设备的照片(顶视图),必须命名 为Device.bmp。它可以是一个独立文件(在同一目录下作为一个可执行文件),或是做为一 个资源包括进应用程序当中,下面一行表示该位图文件包括在资源文件(extension.rc)中: 145 BITMAP DISCARDABLE "Device.bmp" 更多的信息,请参考Win32文档资料。 位图的尺寸应该是这样的,位图中LCD区域在屏幕上显示的尺寸应该等于仿真LCD的分辨 率。在下面的例子中这是最好的显示效果: 设备位图(Device.bmp) 带有屏幕上可见的仿真LCD的设备 红色区域自动成为透明区。透明区没有必要是矩形;它们可以是任意的形状(甚至可以 第 8 页 µC/GUI 中文手册 jk 线条 第 3 章 仿真器 是你的操作系统所限制的复杂形状,但是一般的就足够了)。亮红色(0xFF0000)是默认的 透明区域的颜,主要因为在大多数位图中很少用到这种颜色。如果位图中含有亮红色,你可 以在函数SIM_SetTransColor中改变默认的透明色。 Hardkey 仿真 Hardkey也可以作为设备的一部分进行仿真,它可以由鼠标指针选择。意思是能区别在仿 真设备中的一个键或一个按钮是否被按下或没有按下。当鼠标指针位于一个Hardkey上方,并 且鼠标按键保持按下状态,则该Hardkey被认为是按下。当鼠标按键释放或指针移开Hardkey, 表示该Hardkey“没有按下”。在“按下”和“非按下”之间的切换行为也可以在程序 SIM_HARDKEY_SETmode中说明。 为了仿真Hardkey,你需要第二幅设备位图,除了按键自己(按下状态)以外,都是透明 的。该位图也作为目录里的一个独立文件或包括在可执行文件中做为一个资源。 文件名需要定为“Device1.bmp”,典型的,下面两行表示两们位图文件包括在资源文件 (extension.rc)中: 145 BITMAP DISCARDABLE "Device.bmp" 146 BITMAP DISCARDABLE "Device1.bmp" 尽管Hardkey可以是任意的形状,但有一点很重要,就是两幅位图尺寸必须是一样的,即 在像素上一样,这样在Device1.bmp上的Hardkey就能够正确地覆盖在Device.bmp相应的位置 上。下面的例子说明了这种情况: 设备位图:Hardkey非按下的状态 (Device.bmp) 设备Hardkey位图:Hardkey按下的状态 (Device1.bmp) 第 9 页 µC/GUI 中文手册 jk 线条 jk 线条 第 3 章 仿真器 当一个键被鼠标“按下”,hardkey 位图(Device1.bmp)的相应部分将覆盖设备位图以 显示该键处于其按下状态。 键可以周期性的轮询以确定它们的状态(按下/非按下)是否已经改变以及它们是否需要 更新。二者选一,当一个hardkey的状态改变时,一个回调函数会被设置以触发一个自带的特 殊动作。 3.6 仿真器API 所有仿真器的API函数在设置阶段必须被调用。调用应该从函数SIM_X_Init()内部被完美 执行,该程序位于文件SIM_X.c中。下面的例子表示在设置中调用SIM_SetLCDPos(): */ #include <windows.h> #include <stdio.h> #include "SIM.h" void SIM_X_Init() { SIM_SetLCDPos(0,0); // 定义LCD在位图中的位置 } 下表列出了与仿真相关有用的函数,在各自的类型中按字母进行排列。函数的详细描述 在后面列出。 函 数 说 明 设备仿真 SIM_SetLCDPos() 在目标设备位图中设置仿真LCD的位置 SIM_SetTransColor() 设置用于透明区域的颜色 Hardkey仿真 SIM_HARDKEY_GetNum() 返回一个有效的Hardkey的号码 SIM_HARDKEY_GetState() 返回一个指定的Hardkey的状态(0=非按下,1=按下) SIM_HARDKEY_GetCallback() 设置当指定Hardkey状态改变时要执行的回调函数 SIM_HARDKEY_SetMode() 设置一个指定Hardkey的行为(默认=0,不切换) SIM_HARDKEY_SetState() 设置一个指定Hardkey的状态 SIM_SetLCDPos() 描述 第 10 页 µC/GUI 中文手册 jk 线条 jk 线条 jk 线条 jk 线条 第 3 章 仿真器 在目标设备位图中设置仿真LCD的位置。 函数原型 void SIM_SetLCDPos(int x, int y); 参 数 含 意 x 仿真LCD左上角(单位:像素)的 X 轴坐标 y 仿真LCD左上角(单位:像素)的 Y 轴坐标 附加信息 X和Y坐标相对于目标设备位图,因此坐标(0,0)表示位图左上角(原点)而非你的实际 LCD。只有仿真屏幕的原点需要指定;你的显示器的分辨率应该已经反映在配置目录下的配置 文件中。 SIM_SetTransColor() 描述 设置用于设备或Hardkey位图的透明区域的颜色 函数原型 I32 SIM_SetTransColor(I32 Color); 参 数 含 意 Color 颜色的RGB数值 附加信息 透明色的默认设置为亮红(0xFF0000)。如果你的位图包括有同样色调的红色时,你才 需要这个典型的设置。 SIM_HARDKEY_GetNum() 描述 返回一个有效的Hardkey的号码 第 11 页 µC/GUI 中文手册 第 3 章 仿真器 函数原型 int SIM_HARDKEY_GetNum(void); 返回值 在位图中找到的有效的Hardkey的号码。 附加信息 Hardkey的序号遵循阅读顺序(从左到右,从上到下)。因此一个Hardkey最顶端的像素 首先被发现,而不管它的水平位置如果。例如,在下面的位图中, Hardkey被标号,而在其 它的函数中它们通过KeyIndex参数进行引用: 推荐调用该函数对一幅位图是否被完全截入进行校验。 SIM_HARDKEY_GetState() 描述 返回指定的Hardkey的状态 函数原型 int SIM_HARDKEY_GetState(unsigned int KeyIndex); 参 数 含 意 KeyIndex Hardkey的标签(0=第一个键的标签) 第 12 页 µC/GUI 中文手册 第 3 章 仿真器 返回值 指定Hardkey的数值: 0: 非按下 1: 按下 SIM_HARDKEY_SetCallback() 描述 设置当指定Hardkey状态改变时要执行的回调函数 函数原型 SIM_HARDKEY_CB* SIM_HARDKEY_SetCallback ( unsigned int KeyIndex, SIM_HARDKEY_CB* pfCallback); 参 数 含 意 KeyIndex Hardkey的标签(0=第一个键的标签) pfCallback 回调函数的指针 返回值 先前的回调函数的指针。 附加信息 回调函数原型必须如下所示: 函数原型 typedef void SIM_HARDKEY_CB(int KeyIndex, int State); 参 数 含 意 KeyIndex Hardkey的标签(0=第一个键的标签) State 指定Hardkey的状态(如下所示) 参数State允许的数值: 0: 非按下 第 13 页 µC/GUI 中文手册 第 3 章 仿真器 1: 按下 SIM_HARDKEY_SetMode() 描述 设置指定Hardkey的行为 函数原型 int SIM_HARDKEY_SetMode(unsigned int KeyIndex, int Mode); 参 数 含 意 KeyIndex Hardkey的标签(0=第一个键的标签) Mode 行为模式(如下表所示) 参数Mode允许的数值 0: 正常行为(默认) 1: 切换行为 附加信息 正常(默认)Hardkey行为意思指当鼠标指针位于一个键上方,并且鼠标按键保持按下状 态,则该键被认为是按下。当鼠标按键释放或指针移开Hardkey,该键被认为是非按下。 而切换行为,每一次单击鼠标对一个Hardkey进行一次“按下”或“非按下”状态的切换。 这意思是如果你在一个Hardkey上方单击一下鼠标,它变成“按下”,这个状态一直保持到你 再次单击鼠标。 SIM_HARDKEY_SetState() 描述 设置指定Hardkey的状态。 函数原型 int SIM_HARDKEY_SetState(unsigned int KeyIndex, int State); 参 数 含 意 第 14 页 µC/GUI 中文手册 第 3 章 仿真器 KeyIndex Hardkey的标签(0=第一个键的标签) State 指定Hardkey的状态(如下所示) 参数State允许的数值: 0: 非按下 1: 按下 附加信息 该函数只有在 SIM_HARDKEY_SetMode 被设为 1(切换模式)时才有效。 第 15 页 µC/GUI 中文手册 第4章 文本显示 使用µC/GUI 显示字体是很容易的。仅仅需要很少的的函数知识就能让我们在任何有效的 字体当中进行文本书字,然后显示在任何一个位置。我们首先对显示字体进行简短的介绍, 然后是分别对所用的函数进行更详细的说明。 第 1 页 µC/GUI 中文手册 jk 线条 jk 线条 第 4 章 文本显示 4.1 基本函数 为了在LCD上显示文本,可以简单地调用函数GUI_DispString(),把你所希望显示的文本 作为其参数,例如: GUI_DispString("Hello world!"); 上面的代码将会在当前文本坐标显示文本“Hello world!”。 然而,正如你所看到的,有很多函数用于显示不同字体的文本或都在不同的坐标显示文 本。另外,它不仅能写字符串,而且能写十进制数,十六进制数和二进制数用于显示。即使 图形

编辑推荐

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

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

相关资料

资料评价:

/ 824
所需积分:0 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!