第10章 存储设备
存储设备可以用在多种情况下,主要防止显示屏在有对象重叠的绘图操作时的闪烁现象。
基本的思路很简单。没有使用存储设备时,绘图操作直接写屏。屏幕在绘图操作在执行时更
新,当不同的更新在执行时会产生闪烁。例如,如果你想绘一幅位图作为背景,以一些透明
的文字作为前景,你首先必须绘位图,然后是文字,最终结果文字会是闪烁的。
然而,如果这样的操作使用一个存储设备的话,所有的操作在存储设备内执行。只有在
所有的操作执行完毕后最终结果才显示在屏幕上,具有无闪烁的优点。二者的不同会在下面
的范例中列出,该范例图解一系列绘图操作在没有使用存储设备和使用存储设备的效果。
二者的区别总结如下:如果不使用存储设备,绘图的操作的效果看起来是一步一步的,
带来闪烁的缺点。而使用存储设备,所有程序执行的效果看起来象单步操作,没有中间步骤
可见。优势在于,如上说明,显示屏的闪烁完全消除,而这常常是希望看到的。
存储设备是一个附加(可选)的软件项目,不随µC/GUI 的基本软件包一起发布。存储设
备的软件包位于子目录 GUI\Memdev 下。
µC/GUI 中文手册
第 1 页
第 10 章 存储设备
10.1 图解存储设备的使用
下表是屏幕截图显示使用存储设备和不使用存储设备完成同样操作。两个例子的目的是
一样的:旋转一个工件,标注各自的旋转角度(在此处是 10 度)。在第一个例子(不使用存
储设备),必须清屏,然后在新的位置重绘矩形和以新的标号写字符串。在第二个例子(使用
一个存储设备),同样的操作在存储器执行,但是屏幕在这个时候并没有更新。唯一的更新出
现在调用 GUI_MEMDEV_CopyToLCD 函数时,这样的更新立即反映了所有操作。注意两种处理方
法的状态初始化和最后的输出是不同的。
API 函数
不使用存储设备
使用存储设备
步骤 1:状态初始化
步骤 2:GUI_Clear
步骤 3:GUI_DrawPolygon
步骤 4:GUI_DispString
第 2 页
µC/GUI 中文手册
第 10 章 存储设备
步骤 5:
GUI_MEMDEV_CopyToLCD
(只有在使用存储设备时有
效)
10.2 基本函数
下面的函数是那些在使用存储设备时通常被调用的。基本用法相当简单:
1. 建立存储设备(使用 GUI_MEMDEV_Create);
2. 激活它(使用 GUI_MEMDEV_Select);
3. 执行绘图操作;
4. 将结果拷贝到显示屏(使用 GUI_MEMDEV_CopyToLCD);
5. 如果你不再需要存储设备,删除它(使用 GUI_MEMDEV_Delete)。
10.3 为了能使用存储设备……
默认情形下,存储设备是被激活的。为了优化软件的性能,对存储设备的支持可以在配
置文件 GUIConf.h 中加入下面一行而关闭:
#define GUI_SUPPORT_MEMDEV
0
如果这一行出现在配置文件里,而你又需要使用存储设备,可以删除这一行或将其定义
改为 1。
10.4 存储设备 API 函数
下表列出了µC/GUI 的存储器 API 函数,所有函数在各自的类型中按字母顺序进行排列。
函数的详细描述后面列出。
函 数
说 明
基本函数
GUI_MEMDEV_Create ()
建立存储设备(第一步)
GUI_MEMDEV_CopyToLCD ()
将存储设备的内容拷贝到 LCD
GUI_MEMDEV_Delete ()
存储设备释放使用的存储空间
µC/GUI 中文手册
第 3 页
第 10 章 存储设备
GUI_MEMDEV_Select ()
选择一个存储设备作为目标用于绘图操作
高级特性
GUI_MEMDEV_Clear ()
将存储设备的内容标志为未改变 M
GUI_MEMDEV_CopyFromLCD ()
将 LCD 的内容拷贝到存储设备
GUI_MEMDEV_CopyToLCDAA()
以反锯齿方式拷贝存储设备的内容
GUI_MEMDEV_GetYSize ()
返回存储设备的 Y 轴尺寸
GUI_MEMDEV_ReduceYSize ()
减少存储设备的 Y 轴尺寸
GUI_MEMDEV_SetOrg ()
在 LCD 上改变存储设备的原点
分片存储设备
GUI_MEMDEV_Draw ()
使用一个存储设备进行绘图
自动设备对象函数
GUI_MEMDEV_CreateAuto ()
建立一个自动设备对象。
GUI_MEMDEV_DeleteAuto ()
删除一个自动设备对象。
GUI_MEMDEV_DrawAuto ()
使用一个 GUI_AUTODEV 对象进行绘图
GUI_MEMDEV_Create()
描述
建立一个存储设备
函数原型
GUI_MEMDEV_Handle GUI_MEMDEV_Create(int x0, int y0, int XSize, int YSize)
参 数
x0
y0
XSize
YSize
含 意
存储设备的 X 轴坐标
存储设备的 Y 轴坐标
存储设备的 X 轴尺寸
存储设备的 Y 轴尺寸
返回数值
建立的存储设备的句柄,如果函数执行失败,返回值为 0。
GUI_MEMDEV_CopyToLCD()
描述
将一个存储设备的内容从内存拷贝到 LCD。
第 4 页
µC/GUI 中文手册
第 10 章 存储设备
函数原型
void GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem)
参 数
hMem
含 意
存储设备的句柄
GUI_MEMDEV_Delete()
描述
删除一个存储设备。
函数原型
void GUI_MEMDEV_Delete(GUI_MEMDEV_Handle hMem);
参 数
hMem
含 意
存储设备的句柄
返回值
删除的存储设备的句柄
GUI_MEMDEV_Select()
描述
激活一个存储设备(或如果句柄为 0 则激活 LCD)
函数原型
void GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem)
参 数
hMem
含 意
存储设备的句柄
µC/GUI 中文手册
第 5 页
第 10 章 存储设备
10.5 高级特性
GUI_MEMDEV_Clear()
描述
将存储设备的所有内容标志为“未改变的”。
函数原型
void GUI_MEMDEV_Clear(GUI_MEMDEV_Handle hMem);
参 数
hMem
含 意
存储设备的句柄
附加信息
使 用 GUI_MEMDEV_CopyToLCD 的 下 一 步 绘 图 操 作 是 , 只 有 在 GUI_MEMDEV_Clear 和
GUI_MEMDEV_CopyToLCD 之间有字节改变的情况才进行写操作。
GUI_MEMDEV_CopyFromLCD()
描述
从 LCD 数据(视频存储器)拷贝一个存储设备的内容到存储设备。换句话说是,回读 LCD
的内容到存储设备。
函数原型
void GUI_MEMDEV_CopyFromLCD(GUI_MEMDEV_Handle hMem);
参 数
hMem
含 意
存储设备的句柄
GUI_MEMDEV_CopyToLCDAA()
描述
从存储区域拷贝存储设备的内容(反锯齿)到 LCD。
第 6 页
µC/GUI 中文手册
第 10 章 存储设备
函数原型
void GUI_MEMDEV_CopyToLCDAA(GUI_MEMDEV_Handle hMem);
参 数
hMem
含 意
存储设备的句柄
附加信息
器件的数据处理为反锯齿数据。一个 2×2 像素矩阵转换 1 个像素。最终结果的像素强度
取决于在多少像素在矩阵中调整。
范例
建立一个存储设备并选择它作为输出。设置一个大的字体,然后向存储设备写入一个文
本:
GUI_MEMDEV_Handle hMem = GUI_MEMDEV_Create(0,0,60,32);
GUI_MEMDEV_Select(hMem);
GUI_SetFont(&GUI_Font32B_ASCII);
GUI_DispString(“Text”);
GUI_MEMDEV_CopyToLCDAA(hMem);
范例执行的屏幕截图
GUI_MEMDEV_GetYSize()
描述
返回一个存储设备的 Y 轴尺寸。
函数原型
int GUI MEMDEV GetYSize(GUI MEMDEV Handle hMem);
参 数
hMem
含 意
存储设备的句柄
µC/GUI 中文手册
第 7 页
第 10 章 存储设备
GUI_MEMDEV_ReduceYSize()
描述
减小一个存储设备的 Y 轴尺寸。
函数原型
void GUI MEMDEV ReduceYSize(GUI MEMDEV Handle hMem, int YSize);
参 数
hMem
YSize
含 意
存储设备的句柄
存储设备新的 Y 轴尺寸
附加信息
改变存储设备的尺寸比删除然后重建它更有效。
GUI_MEMDEV_SetOrg
描述
改变存储设备在 LCD 上的原点。
函数原型
void GUI_MEMDEV_SetOrg(GUI_MEMDEV_Handle hMem, int x0, int y0);
参 数
hMem
x0
y0
含 意
存储设备的句柄
水平坐标(左上角像素)
垂直坐标(左上角像素)
附加信息
这个函数在同一个器件用于不同的屏幕区域或存储设备的内容被拷贝到不同区域时非常
有用。
修改存储设备的原点比删除然后重建它更有效。
第 8 页
µC/GUI 中文手册