第2章 入门指南
这一章提供一个在你的目标系统上设置和配置µC/GUI的基本处理过程的概述。同时也包
括了一个简单的范例程序。
请注意,大多数主题在后面的章节会有更详细的描述。在你开始更复杂的编程之前,你
很有必要参阅本手册的其它部分。
µC/GUI 中文手册
第 1 页
第 2 章 入门指南
2.1推荐的结构
使µC/GUI 和你的应用文件分离,这是我们推荐的。在工程文件的“root”目录的 GUI 子
目录下保留所有的程序文件(包括头文件),这是一个好的习惯。目录结构应该和下图相似。
这种习惯有一个好处,就是很容易升级更新版本的µC/GUI,只需要替换 GUI 目录就可以。
子目录
下表显示了 GUI 所有子目录的内容
目 录
内 容
Config
配置文件
GUI/AntiAlias
抗锯齿支持 *
GUI/ConvertMono 用于 B/W(黑白两色)及灰度显示的色彩转换程序
GUI/ConvertColor 用于彩色显示的色彩转换的程序
GUI/Core
GUI/Font
µC/GUI 内核文件
字体文件
GUI/LCDDriver
LCD 驱动
GUI/Mendev
GUI/Touch
GUI/Widget
GUI/WM
存储器件支持 *
触摸屏支持 *
视窗控件库 *
视窗管理器 *
(带“*”标志的为可选项)
第 2 页
µC/GUI 中文手册
“Include”目录
第 2 章 入门指南
确认你的 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
µC/GUI 中文手册
第 3 页
第 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 中文手册
第 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”
该宏基本被视为一个正常的函数,尽管有某些应用上的限制,宏依旧被放入代码当中,
就象文本代换的例子一样。函数替换主要用于给一个高度依赖硬件的模块增加一些特殊的函
µC/GUI 中文手册
第 5 页
数(例如 LCD 的访问),这类宏通常使用括弧(与可选择参数一起)来声明。
第 2 章 入门指南
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 中文手册
第 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);
µC/GUI 中文手册
第 7 页
第 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 中文手册