Introduction to the AVR LCD package

AVR LCD软件模拟显示器简介

通过AVR LCD模拟显示器软件包,您可以设计您自己的LCD软件模拟显示器（注：本帮助中所提到的LCD模拟显示器软件是指AVR Studio中使用的一种可视化，图形化的软件工具，用来模拟真正的LCD显示器 。在后文中有时也简称为软件模拟显示器或模拟显示器），通过它您只需要将模拟显示器的段与LCD寄存器进行相应的连接，就可以在AVR Studio中对显示器的显示进行模拟/仿真。

AVR LCD软件包的内容

AVR LCD 编辑器

这是一个有用的工具用来建立新的或修改已存在的软件模拟显示器。使用这个工具您可以将多个软件模拟显示器组合成一个，之后您还要按照您的需要将段与相应的的LCD寄存器建立联系。生成的软件模拟显示器将被保存在一个模拟显示器文件中(.DIS),是一种可读的XML文件。

AVR Studio 4 LCD 插件

使用这些插件您可以在AVR Studio 4中加载您自己的模拟显示器文件，并可以使用它来模拟/仿真你的显示器，这些段将会按照您在LCD寄存器中赋的值（这里所说的寄存器是指AVR Studio模拟环境中的寄存器）开或关，也就是说您可以通过对LCD寄存器赋值来控制段的开或关。

示例模拟显示器文件，IAR C示例工程和带教程的在线帮助

附带有一个模拟显示器示例文件，用来仿真AVR Butterfly 开发评估板。其中还有一个介绍如何使用AVR LCD插件的IAR C演示程序。请查阅在线帮助中关于如何使用这个示例文件的教程 。

XML 文件描述

点这里可以查看插件和编辑器中使用的XML DIS文件格式描述。

截图, AVR Studio 4 使用LCD 插件模拟AVR Butterfly显示


AvrLcd

AVR LCD插件（AVR LCD plug-in）

AVR LCD是AVR Studio中用于仿真LCD显示器的一个插件。安装了这个插件后AVR Studio中就会增加一个用于控制模拟显示器的LCD工具条。 软件模拟显示器的布局是从一种扩展名为.dis 的XML格式的文件中读取的。这种格式的文件可以用AVR LCD编辑器建立。

使用AVR LCD插件

AVR LCD 工具条初始时如下图所示：

此时唯一可用的按钮是Toggle LCD Windows按钮。单击它以后，LCD 浮动窗口就会显示出来，您可以拖动它到想要的地方，并可以改变它的大小。当LCD浮动窗口显示出来以后，工具条上其他的按钮也会变的可用。

模拟显示器中的每一个段都和寄存器中的一位相连。运行调试的时候，当寄存器的值改变以后，相应的段就会亮/灭。人为的改变I/O的值也会使相应的段亮/灭。段与寄存器之间的对应关系可以在LCD 编辑器中或者XML格式的模拟显示器文件中改变。

AVR LCD工具栏

Toggle LCD window(显示/隐藏LCD窗口)

打开/关闭 LCD浮动窗口。

Open display file(打开模拟显示器文件)

打开一个新的软件模拟显示器。这个软件模拟显示器可以在LCD编辑器中创建或更改。

Toggle timer(触发定时器)

当激活的时候，AVR Studio会每隔一个时间间隔（默认值是200ms），读取控制模拟显示器的寄存器里的数值，并更新模拟显示器（在运行的时候）。

LCD properties(LCD属性)

打开属性对话框。在这里你可以设定定时器的时间间隔，调整模拟显示器的比例/大小，并显示/隐藏地址分配。注意：定时器的时间间隔并不能保证是十分准确的。

Reload display file(重新加载模拟显示器文件)

你可以用LCD编辑器更改模拟显示器文件，然后点击此按钮在AVR Studio中重新加载更改后的模拟显示器文件。

Toggle LCD segments(显示LCD段)

使所有的段显示出来，无论与之联系的寄存器位的值是1还是0。当有程序运行的时候应关掉这项功能。

Help(帮助)

打开AVR LCD 软件包的帮助文件。


LcdEditor

AVR LCD 编辑器

伴随着ATMega169和它的LCD控制器的产生，LCD插件在AVR Studio4.0中也可以使用了。在模拟/仿真的过程中，这些插件使用预先设计好的模拟显示器进行仿真，而不是枯燥的寄存器的值。这些软件模拟显示器可以由AVR LCD编辑器设计。

文件（File）菜单

编辑（Edit）菜单

视图（View）菜单

对象（Object）菜单

给段分配I/O寄存器（AVR Studio中）

对象操作

如何制作基本单元

文件（File）菜单

新建（New） [image] Ctrl+N

创建一个以.dis为扩展名的模拟显示器文件。点击这里了解更多关于模拟显示器文件的内容。

打开（Open） [image] Ctrl+O

打开一个已经存在的模拟显示器文件。点击这里了解更多关于模拟显示器文件的内容。

保存（Save） [image] Ctrl+S

以当前文件名保存所编辑的模拟显示器文件。点击这里了解更多关于模拟显示器文件的内容。

另存为（Save AS...）

用另一个名字保存当前编辑的模拟显示器文件。

选项（Options）

打开下面的对话框窗口..

在这里你可以调整网格的大小，或者选择显示/隐藏网格。对象文件夹（Object folder）包含所有的段。工程根目录（Project Root）包含了所有的工程/模拟显示器文件。

编辑（Edit）菜单

缩放（Zoom All）

在屏幕上缩放到合适的尺寸。 在1:1 和 全屏（zoo to fit） 之间切换。

撤销（Undo） [image] Ctrl+Z

撤销上次的操作。

重做（Redo） [image] Ctrl+Y

重新进行已经撤销的操作。

剪切（Cut） [image] Ctrl+X

删除选定的对象并将其复制到剪贴板。

复制（Copy） [image] Ctrl+C

将选定的对象复制到剪贴板。

粘贴（Paste） [image] Ctrl+P

从剪贴板上粘贴一个对象。

删除（Delete ）

删除选定的对象。

全部删除（Delete all）

清屏。

视图（View）菜单

显示/隐藏所有可用的工具栏。

标准工具栏（Standard toolbar ）

对象工具栏（Object toolbar）

对齐工具栏（Alignment toolbar）

寄存器工具栏（Register toolbar）

对象（Object）菜单

对齐方式（Align Position）

选择两个或多个段来对齐位置。可以是左对齐，右对齐，顶端对齐，底部对齐，水平或竖直的中心对齐。

对齐大小（Align Size）

选定两个或多个段来对齐大小，可以是宽度相等，高度相等，或两者都相等。

翻转（Flip）

竖直或水平翻转选定的对象。

组合（Group）

两个或多个对象组和成一个整体。

解除组合（Ungroup）

将组合成的对象还原成单个的段。

置后（Push to back）

将选定的层下移一层。

置前（Bring to Front）

将选定的层上移一层。

插入图元文件（Insert Metafile ）

打开一个对话框向模拟显示器文件中插入图元。

插入模拟显示器文件（Insert Display ）

打开一个对话框向现有的模拟显示器文件中插入模拟显示器文件。

属性（Properties）

打开下面的对话框...

选定一个段或者组来查看它的属性。组可以被重命名且可另存为一个基本单元。

给段分配I/O寄存器

所有的段都可以被分配给寄存器的一个位。执行这项操作的时候要用到下面的工具栏。

第一栏是当前芯片的名字。目前只有ATmega169芯片支持LCD 显示器，因此使用了它的LCD寄存器。随着新版本的发布会有更多支持LCD的芯片。

第二栏包含当前芯片所有可用的LCD寄存器。如果你选定了一个段，它就会变成绿色，寄存器栏和位栏就会显示它所对应的寄存器和这个寄存器的哪一位。如果你先点选了一个组，然后又选择了一个寄存器，这个寄存器的各个位就会自动的分配到组中的各个段，直到8个位都分完。

第三栏是位栏。

清除按钮 [image] 清除选定对象和寄存器的对应关系。

对象操作（Object handling）

插入对象

用"Add Metafile"或"Add Group" 组合框来添加对象。这些组合框包含最近使用的对象和位于“\Object”文件夹中的对象。如果你要添加的对象位于其他位置，就会打开一个新的文件打开对话框。使用鼠标选定要插入的对象，它就会显示在屏幕上。

修改对象

对象可能需要调整大小，可以用鼠标完成，也可以在大小编辑栏上完成。

一组段可能要被存储并用作临时的设计工具。可以使用组合按钮产生一个组。这些组稍后可能被还原，重构或重组等。

为节省设计时间，可以把最常用的组保存到"\Objects"文件夹下。也可以使用右键快捷菜单，进行相应的操作。

排列对象

当在显示器上定位的时候，所有的对象都被放在中间层。这一层是用来放置动态对象的（对象的状态可以按照AVR Studio的寄存器位的值不同而有所反映）。

使用"置前"和"置后"按钮可以将一个对象上移或下移一层。

对于大的显示器，可以用“Zoom to fit”按钮来放大缩小来适合所包含的对象。

当所有要使用的对象都插入并定位后，简单的保存一下，一个显示脚本就创建好了。

模拟显示器文件的扩展受其外围的多数对象的约束。所有用到的图元文件和显示脚本都保存在您选定的工程目录下。当在AVR Studio中使用的时候，这个目录下有所有必需的信息。

插入的对象有三种不同的方式对LCD编辑器的命令作出反应。这三种方式分别是活动的，被选定的或者是不被选中的。所有插入的对象都可以被选中(有一个淡蓝色的框作为边界)，但在任何时刻都只能有一个对象是活动的(有一个深蓝色的框作为边界)。您可以在对象区域内单击左键，选中该对象，可以同时选中好几个对象，但是只有最后一个选中的是动态的，您也可以在空白区域单击鼠标左键，取消前面选中的对象。

当执行一个对齐命令的时候，其他选定的对象就会以这个动态的对象作为参照。其他没有选定的对象只对"全部删除（delete all）"命令作出反应。也可以使用右键快捷菜单，进行相应的操作。

如何创建一个基本单元

创建一个新的模拟显示器文件。

通过添加图元文件的方式生成一个基本单元。

选中所有要组合的对象，单击右键菜单上的组合命令或工具栏上的组合按钮将他们进行组合。

右键单击组，选择属性命令。

检查/编辑名字并另存为基本单元。保存到"\Object"文件夹下。

重新打开编辑器的时候上面所建立的基本单元就会在基本单元列表中显示。


AVR LCD Tutorial

AVR LCD 入门指南

在AVR Studio LCD软件包中含有一个IAR C的示例工程和一个butterfly 模拟显示器文件。本指南将指导您通过一系列必要的步骤在AVR Studio4中运行他们。

第一步 - 打开示例工程

第二步 - 允许GUI 插件并装载模拟显示器文件

第三步 - 运行程序并使用模拟LCD 显示器

第四步 - 用AVR LCD 编辑器改变模拟显示器文件

1) 打开示例工程

运行AVR Studio 4。打开工程文件LCDdemo.d90。这个工程文件在下面的路径下：\Atmel\AVR Tools\AvrLcd\Sample\Debug\Exe\

选择AVR Simulator 平台ATmega169器件。点击Finish按钮，这个工程就会被加载。

完成加载之前你可能还需要定位main.c文件。这个文件被放在sample文件夹下。这是由于工程文件在一个不同的文件夹下生成后来又移动了地方。 如果你有IAR 编译器，你可以加载之前你自己生成它。

LCD 插件也可以和ICE50 仿真器平台使用，您可以用ICE50模拟ATmega169的运行，而用LCD插件来模拟LCD的显示。

2) 允许GUI插件并加载模拟显示器文件

检查LCD GUI plug-in是否被加载了。下面的工具栏将会显示在顶端并可用：

您可以通过打开菜单上的 tools->plugin manager来允许禁止GUI插件。重启AVR Studio 4后改动才能生效。

通过点击 [image] 按钮打开LCD窗口。一个LCD浮动窗口就会出项，这个工具栏上的其他按钮也会变的可用。

点击 [image] 按钮，加载模拟显示器文件butterfly.dis。这个文件在 \Atmel\AVR Tools\AvrLcd\Displays\Butterfly\ 文件夹下。

...然后下面的图片就会显示出来...

3) 运行程序并使用LCD软件模拟显示器

示例程序会在LCD软件模拟显示器上滚动显示一条消息。想要修改运行时的更新时间就要允许及时更新。点击 [image] 按钮，打开LCD Timer。它会使LCD软件模拟显示器在运行程序的时候每隔200ms（默认）更新一下。您可以在LCD选项(点 [image] 按钮)中更改时间间隔。

你可以点击 [image] 按钮来检验所有的LCD段。

打开LCD Timer后您就可以运行程序了。点击 run(F5)按钮。您就会在LCD软件模拟显示器中看到一条滚动的信息。

如果滚动不平稳，试着调整LCD timer。

您可以通过调整窗口大小的方式调整LCD软件模拟显示器的大小，在运行模式的时候也可以。

4) 用AVR LCD 编辑器更改模拟显示器文件

用AVR LCD编辑器你可以创建你自己的软件模拟显示器，也可以更改任何已存在的。您可以通过点击 开始－> 程序－>Atmel AVR Tools->LCD Editor来运行编辑器。

打开文件butterfly.dis。加载以后会自动应用画笔，单击右键可进入正常编辑模式。

使用 zoom to fit 按钮在比例中选择1：1模式。

单击任意的14个段，您会看到一个绿色的提示框告诉你这个段已经被分配给了寄存器。如果您再次单击一个子段，位组合框就会显示您所分配的位。您可以任意的取消，修改，建立新的分配。

工具条，选定的段对应了 ATmega169芯片的LCDDR0寄存器的0位

试着删除一些段并把其他的一些段更改一下位置。然后用 save as保存成另外一个模拟显示器文件。

要想在AVR Studio中加载更改后的模拟显示器文件您可以使用重新载入LCD软件模拟显示器按钮 [image] 。模拟显示器就会更新成您在LCD编辑器中修改后的样子。


An Example

例:使用编辑器和插件

这个例子展示了如何用编辑器按照XML文件描述的那样创建一个计算器的软件模拟显示器，并在AVR Studio中将其显示出来。

运行编辑器：开始－> 程序->Atmel AVR Tools->AVR LCD Editor

1)

点击 File->New 或点按工具栏上的 New 按钮。保存该工程名为 CALC。

2)

按照如下方式插入背景图片：

Object->Insert Metafile

或者点击工具栏上的Insert Metafile按钮。

选择 C:\Program Files\Atmel\AVR Tools\AvrLcd\Calc.emf (假定你是在英文版Windows中用默认的路径安装的AVR Studio，否则您要自己找这个文件的正确路径。)

3)

确保通过单击选定这张图片。

在Select Register下拉列表中选择Image，这样就可以将其定义成image。

I如果不这样做，在后来的AVR Studio窗口中就不会显示任何图像。

4)

点击菜单上的Add primitive下拉列表，选择7_segment.pri 插入一个数字基本单元。

5)

通过拖动它的一个角，将其缩放到合适的大小，并拖动它到合适的位置。 如果其他的图片也被拖动，那么首先点击空白处，然后再选中这个数字进行上面的操作。

6)

再增加两个数字（基本单元）。

7)

使所有的数字基本单元都具有相同的大小：

点击空白处，确保没有东西被选中。

依次左键单击这3个数字基本单元，最后选中上面您已经调整好的数字基本单元（所有数字基本单元都是按照最后一个选中的那个大小位置调整的）。

点击 Object－> Align Size Both

点击 Object－ > Align Position Top

8)

点击空白处

依次选中3个数字。

9)

9)

将每一个数字分配到一个寄存器。

从下拉列表中选择寄存器。选择要与次寄存器联系起来的数字。

对于更详细的分配，双击各个段，从菜单上选择与各个段相联系的寄存器的位。

10)

点击File->Save 或者单击工具栏上的Save 按钮将这个工程保存。

11)

运行AVR Studio，编辑器就会运行。

创建一个汇编工程，用mega169芯片。工程文件可以包含任何语句，也可以只包含几个nop，然后编译并开始调试这个工程。

12)

打开LCD软件模拟显示器，将其拖放到想要的地方和大小。

通过点击LCD toolbar上的File Open 按钮装载已经编辑好的模拟显示器文件，计算器的图片就会显示在LCD插件窗口中。 如果没有图片显示出来，检验这张计算器的图像是不是被定义成image了。在AVR LCD Editor中选中这张图片，再在工具栏的Select Register下拉列表中选择image，点击工具栏上的Save file按钮和Reload LCD Display File按钮。通过这样的编辑，保存，和重新载入操作，你会马上看到变化。

点击Toggle LCD Segments 按钮，看看是不是相应的段有所显示了。如果没有，就查看编辑器中的绑定，记住不是所有的mega169 LCD寄存器都有8位，寄存器3，8，13，18仅有一位可供段使用。

检查绑定的时候，关掉AVR Studio中的段，然后直接在I/O窗口中将相应的位置高/低看看段会不会亮/灭。

如果这些都正常工作，那么你可以写程序来操作模拟显示器了。


termss

术语和关键字

图元文件（metafile）

以.emf为扩展名的文件。是下面各种结构的基本组成部分，可以用来让AVR LCD编辑器设计软件模拟显示器。它可以是一个段或者一个图像。您不能直接用AVR LCD编辑器生成一个这样的图元文件。但是可以使用第三方软件。Companion Software的Metafile Companion和Microsoft Visio 就是两个让用户自己定义图元文件的软件。在市场上有好多更简单，更便宜的转换软件支持gif，jpeg，bmp等的文件转换成.emf文件。 (例如：www.harmware.com 网站上的Batch Thumb 、和www.irfanview.com网站上的IrfanView).

段（segment）

这是软件模拟显示器的一部分。用LCD编辑器您可以分配所有的段对应到实际的LCD寄存器的位上。段被存成.emf文件。

图像（image）

被用作背景图像和外围图像的图元文件。充当所有段的布景。这些对象是“静态”的，不对任何LCD寄存器值有反映。图像也被存成.emf文件。

模拟显示器（display）

多层的元文件和图像的组合。它包含LCD 寄存器的分配信息。用XML格式保存成.dis文件。

组（group）

为了简化设计，需要频繁的保存使用段。组就是同一层中一些段（图元文件）的集合。它的设计没有实际的限制，但是不能包括静态图像（背景/前景）。最典型的组就是7段码数字字型。组只是理论的设计工具，在最终的模拟显示器文件中是没有组存在的。组用扩展名为.pri 的文件保存。

对象（object）

对包括以上各个元件的各种事物的称谓的术语。

模拟显示器文件（display file）

以.dis为扩展名的XML类型的文件。包含了所有的关于显示器的信息。


XML file description

XML文件描述

简介

定义

如何设计段

如何创建基本单元文件

如何创建模拟显示器文件

示例

简介

这部分内容描述了如何手动创建XML-脚本，如何组织他们，以及如何在AVR LCD插件中调用他们等。

关于XML的详尽描述请参考http://msdn.microsoft.com/xml/tutorial

定义

段（segment）

一个段是LCD软件模拟显示器的最小单元，它的图解表示被存在Windows的图元文件中。 段可以被连接到寄存器的任意一位。段在Windows的图元文件中有详细的说明。

基本单元（privitive）

一个基本单元是一些段的集合形成的可以看作一个对象的单元，如图中的一个数字。基本单元在XML格式的基本单元文件中有详细定义。

基本单元只能被LCD编辑器使用，LCD插件会直接把寄存器连接到图元文件中。

软件模拟显示器（display）

一个软件模拟显示器是展现给用户的LCD。它是一系列基本单元和背景图像的集合。这些被称为模拟显示器的对象。 模拟显示器在XML格式的模拟显示器文件中有更详细的定义。

一个XML格式的 模拟显示器文件 描述了显示器的大小、对象和与寄存器的连接。这些文件可以输入到AVR LCD插件模块中并可以在 AVR Studio的浮动窗口中被使用。当AVR Studio运行在调试模式时，这些段将按您分配给他们的即他们所各自连接的寄存器（AVR 中的模拟寄存器）的值开或关。

基本单元在基本单元文件中有详细描述。基本文件是一个XML格式的文件，描述了段是如何构成基本单元的。这些文件可以直接在LCD Editor中打开使用，也可以用作模拟显示器文件中的对象。

用户可以用LCD 编辑器设计自己的软件模拟显示器，并且可以用它来模拟，甚至可以描述周围环境并给出最终产品的预览。一个软件模拟显示器是很多基本单元的集合，而基本单元又是由段组成的。以下有详细的说明。

如何设计段

一个段是LCD插件的一个基本元素. 它是一个简单的元素,但是必须保存成扩展名是EMF (Enhanced Metafile Format)的文件，这种文件是由一份绘图命令的列表。 不是所有的绘画编辑器都支持EMF格式，Microsoft Visio支持EMF格式。在市场上有好多更简单，更便宜的转换软件支持gif，jpeg，bmp等的转换。 (例如：www.harmware.com网站上的 Batch Thumb 和 www.irfanview.com网站上的 Irfanview)

-启动一个绘画编辑器如Visio

-画一个段并保存它。如果你的绘画编辑器不支持EMF，就把它保存成普通格式（如：gif，jpeg，bmp等）然后用转换软件将他们转换成EMF文件。

图 1 Visio 画出的段

如何创建基本单元

基本单元仅被绘图编辑器使用。LCD插件编写的时候不使用基本单元。绘图编辑器可以用来从图元文件中建立基本单元。

一个基本单元是由段组成的一种结构。一种典型的例子是由7段码构成的基本单元来形成数字。基本单元中段之间的关系在XML教本中描述的。基本单元是基本的创建区块。

XML像一颗树一样组织起来。一颗树是由根和节点组成。如果一个节点有子节点则称为子树。一个节点也可以只含有一个名称和一个值，称为一个元素。因此一个元素或者一个子树的初始原型都是一个节点。

·启动一个XML编辑器，例如Microsoft XML Notepad，下面的例子中使用的就是Microsoft XML Notepad。过去这个软件Microsoft有下载，不过Microsoft似乎把它从通常下载中移除了。

·插入，复制，或重命名各个元素。

·所有的元素名称和值都用大写字母表示。

·点击根元素，命名为PRIMITIVE，插入四个子元素(一个已存在)。

·给这四个子单元分别命名为NAME, VERSION, POSITION 和 SEGMENTS。

·填写NAME ，VERSION。

PRIMITIVE

标签 | 描述
NAME | 用户自定义的基本单元的名称。 (可选)
VERSION | 显示这个基本单元被修改了多少次。

·现在可以包含段了，给SEGMENT元素添加一个子元素SEGMENT00。

·给SEGMENT00插入三个子元素，命名为NAME, FILENAME 和 POSITION。文件名和上面所讲一样(.EMF)。

·左键单击SEGMENT00。使用复制函数给每个包含在Primitive中的 SEGMENT分配一个“段树”。重命名为SEGMENT01，SEGMENT02等。

SEGMENTXX

标签 | 描述
NAME | 自定义的段的名字。
FILENAME | EMF用来组织管理段。这里只写文件名就可以了，不用写路径。 (路径被存储在 AvrLcdPlugin-register中). 默认路径为： C:\Program Files\Atmel\Avr Tools\AvrLcd\Objects

· SEGMENT_POSITION树包含2个子树：OO和XY。每一个都包含x值和y值。参看图5。段由00和xy坐标共同建立形状。00包含[0，0] ，XY包含宽度和高度。这些值在重新配置和重新建立形状的时候改变。所有的坐标是用象素表示，参看图4。

图3 基本单元的矩形坐标

图4 基本单元的矩形坐标

· 现在PRIMITIVE_SEGMENTS树将会组织的象图5所示的那样。

图5 基本单元的段树

· 对所有的段重复上面的操作。插入一个子元素到POSITION命名为OO（起点），插入两个子元素命名为X和Y。象图3所示的那样，当创建一个对象的时候OO的值是[0，0]。

· 重新复制这个OO树，重命名为XY并填写长，宽坐标，象图3。

图6 基本单元的位置树

· 在Atmel/AVR Tools/AvrLcd/Objects folder路径下用扩展名为PRI保存它,然后就可以在显示教本（display-script）中调用它了。

· 注意位置：

当基本单元在AVR Studio中显示的时候，他们是自动缩放的。模拟显示器按照LCD插件窗口缩放，对象按照模拟显示器文件中位置缩放，段按照基本单元内部的比例缩放。这些缩放都是自动的。当创建模拟显示器和基本单元的时候，要记住相对位置。

例,构造语法

<PRIMITIVE>

   <NAME></NAME>

   <VERSION></VERSION>

   <POSITION>

      <OO>

         <X>0</X>

         <Y>0</Y>

      </OO>

      <XY>

         <X></X>

         <Y></Y>

      </XY>

   </POSITION>

   <SEGMENTS>

      <SEGMENT00>

         <NAME></NAME>

         <FILENAME></FILENAME>

         <POSITION>

            <OO>

               <X></X>

               <Y></Y>

            </OO>

            <XY>

               <X></X>

               <Y></Y>

            </XY>

         </POSITION>

      </SEGMENT00>

   </SEGMENTS>

</PRIMITIVE>

如何创建软件模拟显示器

一个软件模拟显示器是由基本单元和图像构成的。一个图像就是一个图形对象。它的目的是逼真的描述实际显示器的外观(如手机的外观图像，计算器的外观图像等)。基本单元和它所包含的对象之间的关系在XML文件中有详细的描述。

图7中的模拟显示器由两个基本单元组成。右边的那个就是图2中所描述的那种，左边的那个包含16个段，它可以显示所有字母表中的字母。

图7 两个基本单元构成的显示器

· DISPLAY-根包含有两棵子树（POSITION（位置），OBJECTS（对象）） 和三个元素（NAME（姓名），VERSION（版本），UNIT（单位））。

DISPLAY

标签 | 描述
NAME | 用户可以自定义显示器名字。
FILENAME | 显示这个基本单元被修改了多少次。

· 尽管有些部分是不相同的，但是显示脚本和基本单元脚本还是很相似。

· 在DISPLAY_OBJECTS-节点中对象按照OBJECT00，OBJECT01，OBJECT02，等排列。

· DISPLAY_OBJECTS_OBJECTXX-节点通常包含一个子树 (POSITION) 和五个元素 (TYPE，DIRECTION，FILENAME，COLOR，LAYER)。

OBJECTXX

标签 | 描述
TYPE | {PRIMITIVE,IMAGE}
FILENAME | 文件名 .pri/.emf (不包含路径! PRIMITIVE = .pri, IMAGE = .emf)
LAYER | {0,1,2} (0层的对象首先被显示，然后是1层，2层的对象最后被显示。封面图像一般做在第二层。)

· 当TYPE-元素包含PRIMITIVE时，OBJECTXX 就包含SEGMENTXX子树，基本单元中有多少个段，就有多少子树。基本单元脚本和显示脚本保持一致性很重要。

· 每一个SEGMENTXX 包含两个元素REGISTER [LCDDR0, ,LCDDR18] 和 BITNUMBER [0, ,7]。这些元素就是他们所关联的实际寄存器的映象，他们给出了他们所影响的寄存器的值。

· 用DIS扩展名保存这个显示树。

语法示例：

<DISPLAY>

   <NAME> </NAME>

   <VERSION> </VERSION>

   <POSITION>

      <OO>

         <X> </X>

         <Y> </Y>

      </OO>

      <XY>

         <X> </X>

         <Y> </Y>

      </XY>

   </POSITION>

   <OBJECTS>

      <OBJECT00>

         <TYPE>{PRIMITIVE, IMAGE}</TYPE>

         <FILENAME> </FILENAME>

               <LAYER>{0,1,2}</LAYER>

         <POSITION>

            <OO>

               <X> </X>

               <Y> </Y>

            </OO>

            <XY>

               <X> </X>

               <Y> </Y>

            </XY>

         </POSITION>

         <SEGMENT00>

            <REGISTER>[LCDDR0, ,LCDDR18]</REGISTER>

            <BITNUMBER>[0, ,7]</BITNUMBER>

         </SEGMENT00>

      </OBJECT00>

   </OBJECTS>

</DISPLAY>

在LCD插件（LCDPlugin）中调用脚本

当安装AVR LCD软件包的时候，一个LCD目录就会被创建：

/Atmel/AVR Tools/AvrLcd/Objects

段 (.emf)，基本单元(.pri) 和图像 (.emf)都保存在这个目录中。

一个模拟显示器文件(.dis)由浏览器打开，它可以被放在任何地方。

示例

下面示例构造一个简单的数字计算器。

参看 一个例子来创建运行这个例子。

这个软件模拟显示器由三个基本单元组成，和一个计算器的图像。基本单元由7段组成，显示区域的周围是一个计算器的图像。计算器的图像只是一个假相，按钮不能输入。

CALC.DIS（计算器的模拟显示器文件）

模拟显示器文件看起来大概象下面那样：

POSITION（位置）

显示器420象素宽，590象素高。给出显示器的外围尺寸，当LCD插件显示模拟显示器的时候，会尽量缩放到适合AVR Studio中用户定义的窗口大小。对象也会在AVR Studio的窗口坐标中，按照同样的比例显示。

Calculator Image（计算器图像）

Object00 是计算器的图像。它的类型是IMAGE。这意味着它将一直显示而不与目标板的寄存器核对。当需要图像依照顺序按层次显示的时候就要用LAYER值了。LAYER有0（首先显示）到2三个值。

Numbers on Display（模拟显示器上的数字）

显示器上的3个数字被当作3个对象存在模拟显示器文件中。他们也可以按照模拟显示器中21个段的定位仅存成1个对象，但是我们这里把他们分成3个组。对于AVR Studio的LCD插件，这样的分组是没有意义的。将各个段开或关是和这个段属于哪个组（数）是没有关系的。只是对我们（或者编者来说）分成3个组更好理解而已。

每一个对象有7个段。

每一个段是由一个相关的图元文件画出来。

每一个段都和寄存器的某一位相关联，通过寄存器控制它的开或关。

每一个段都画在一个矩形范围内。