第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中文手册第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中文手册第1章µC/GUI的介绍•可以定义和简便地链接新的字体。•只有用于应用程序的字体才实际上与执行结果链接,这样保证了最低的ROM占用。•字体可以分别在X轴和Y轴方向上充分地缩放。•提供有效的字体转换器,任何在你的主系统(即MicrosoftWindows)上的有效字体都可以转换。字符串/数值输出程序•程序支持任何字体的十进制,二进制,十六进制的数值显示。•程序支持任何字体的十进制,二进制,十六进制的数值编辑。视窗管理器(WM)•完全的窗口管理器包括剪切在内。一个窗口的外部区域的改写是不可能的。•窗口能够移动和缩放。•支持回调函数(可选择用法)。•WM使用极小的RAM(大约每个窗口20字节)。可选择用于PC外观的控件•控件(窗口对象)有效。它们一般自动运行,并且易于使用。触摸屏和鼠标支持•对于比如按钮控件之类的窗口对象,µC/GUI提供触摸屏和鼠标支持。PC工具•模拟器及观察器。•位图转换器。•字体转换器。范例和演示关于µC/GUI能做什么,为了给你一个更好的概念,我们准备有不同的演示作为可运行的仿真程序,在目录sample\EXE下。范例程序的源代码位于Sample目录。文件夹Sample\GUIDemo包括一个展示大部分µC/GUI特点的应用程序。第4页µC/GUI中文手册第1章µC/GUI的介绍1.3估价板一个完全的评估板包括一个带有LCD的演示板,一个C语言编译器和一个有效的范例工程。它已经设计好,主要测试和验证µC/GUI,并且它可用于熟悉这个软件。评估板评估板包括MitsubishiM30803CPU和SED13705LCD控制器(包括原理图和技术资料)。LCD(320×240像素)或者单色的LCD,1/4VGA彩色显示LCD或者TFT。更详细的资料,请访问我们的网站:。1.4如何使用本手册该手册说明了如何安装,配置和使用µC/GUI。它描述了软件的内部结构和µC/GUI提供的所有的功能(应用程序接口,或者API)。在实际上使用µC/GUI之前,你应该阅读或者至少浏览本手册,对该软件做到耳濡目染。推荐下列步骤:•拷贝µC/GUI文件到你的电脑。•仔细研究第2章:“入门指南”。•使用模拟器多熟悉一理这个软件能作什么(参考第3章:“仿真器”)。•使用本手册其余部分的参考资料扩展你的程序。第5页µC/GUI中文手册第1章µC/GUI的介绍排版上的语法约定本手册使用下列印刷惯例:类型用于Body正文文字。Keyword那些你在命令-提示中输入的文字,或者那些能在显示屏上看得见的文字(即系统函数,文件或者路径名)。ParameterAPI函数中的参数。Sample在程序范例中的范例代码。NewSample那些已经被加到一个已存在有程序范例中的范例代码。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中文手册第1章µC/GUI的介绍的LCD控制器已经有一个经过验证的驱动程序提供。在你的应用程序中写这样的用于访问LCD的程序(或者宏)通常非常简单。如果你的目标硬件有需要的话,Micrium公司可以提供定制的服务。LCD如何与系统连接并不真的重要,只要它通过软件以某种方式达到,可能是按多种方式完成的。大多数这些接口通过一个提供源代码方式的驱动程序来支持。这些驱动程序通常不需要修改,但是用于你的硬件,要通过修改文件LCDConf.h进行配置。有关根据需要如何定制一个驱动程序到你的硬件在第22章:“LCD驱动程序”中说明。最通用的访问LCD的方式如下所描述。如果你只是想领会如何使用µC/GUI,你可以跳过本节。带有存储映像LCD控制器的LCDLCD控制器直接连接到系统的数据总线,意思是能够如同访问一个RAM一样访问控制器。这是一个很有效的访问LCD控制器方法,最值得推荐。LCD地址被定义为段LCDSEG,为了能访问该LCD,连接程序/定位器只需要告知这些段位于什么地方。该位置必须与物理地址空间中访问地址相吻合。驱动程序对于这类接口是有效的,并且能用于不同的LCD控制器。带有LCD控制器的LCD连接到端口/缓冲区对于在快速处理器上使用的较慢的LCD控制器,端口-连线的使用可能是唯一的方案。这个访问LCD的方法有稍微比直接总线接口慢一些的缺点,但是,特别是使用一个减少LCD访问次数的高速缓存的情况,LCD刷新并不会有大的延迟。所有那些需要处理的是定义程序或者宏,设置或者读取与LCD连接的硬件端口/缓冲区。这类接口也被用于不同的LCD控制器的不同的驱动程序所支持。特殊方案:没有LCD控制器的LCDLCD可以不需要LCD控制器而进行连接。在这种情况下,LCD数据通常通过控制器经由一个4或8位移位寄存器直接提供。这些特殊的硬件方案有价格便宜的优点,但是使用上的缺点是占用了大部分有效的计算时间。根据不同的CPU,这会占到CPU的开销的20%到几乎100%之间;对于较慢的CPU,它根本是极不合理的。这类接口不需要一个特殊的LCD驱动器,因为µC/GUI简单地将所有显示数据放入LCD高速缓存中。你自己必须写硬件相关部分软件,周期性地将数据从高速缓存的内存传递到你的LCD。对于M16C和M16C/80,传递图像到显示屏中的范例代码可以用“C”和优化的汇编程序实现。第7页µC/GUI中文手册第1章µC/GUI的介绍1.7数据类型因为C语言并不提供与所有平台相吻合的固定长度的数据类型,大多数情况下,µC/GUI使用它自己的数据类型,如下表所示:数据类型定义说明I8signedchar8位有符号值U8unsignedchar16位无符号值I16signedshort16位有符号值U16unsignedshort16位无符号值I32signedlong32位有符号值U32unsignedlong32位无符号值I16Psignedshort16位(或更多)有符号值U16Punsignedshort16位(或更多)无符号值对于大多数16/32位控制器来说,该设置将工作正常。然而,如果你在你的程序的其它部分中有相似的定义,你可能想对它们进行修改或者重新配置。一个推荐的位置是置于配置文件LCDConf.h中。第8页µC/GUI中文手册第2章入门指南这一章提供一个在你的目标系统上设置和配置µC/GUI的基本处理过程的概述。同时也包括了一个简单的范例程序。请注意,大多数主题在后面的章节会有更详细的描述。在你开始更复杂的编程之前,你很有必要参阅本手册的其它部分。第1页µC/GUI中文手册第2章入门指南2.1推荐的结构使µC/GUI和你的应用文件分离,这是我们推荐的。在工程文件的“root”目录的GUI子目录下保留所有的程序文件(包括头文件),这是一个好的习惯。目录结构应该和下图相似。这种习惯有一个好处,就是很容易升级更新版本的µC/GUI,只需要替换GUI目录就可以。