魔侠传交易平台:uC/GUI(emWin)的应用与移植

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 07:36:06
uC/GUI(emWin)的应用与移植 2006-11-19 01:38
当你开始使用emWin进行编程时,通常遵循以下的步骤:

第1步:配置emWin
第一步通常是通过修改头文件LCDConf.h来配置emWin。LCDConf.h中的宏定义描述了LCD显示部分硬件特性;根据你的具体情况修改这些宏定义(例如显示屏的长、宽,每像素点用几位表示,LCD控制器的类型等参数)。
第2步:定义LCD的底层驱动函数
底层函数包括对LCD(控制器)的初始化函数,LCD显示缓冲区的读写函数等,完成对LCD显示硬件的直接操作。
对于映射在系统存储器上的LCD,对显示缓冲区的操作仅需要在LCDConf.h中进行定义就可以了。但对于采用I/O端口/缓冲区操作的LCD,就必须定义相应的接口函数了。
第3步:编译,链接和测试例子代码
emWin对于单任务和多任务环境下的应用都提供了例子代码。在编程之前,对这些例子代码进行编译、链接和测试,使你能够初步了解这些代码的使用。
第4步:修改例子程序
对例子代码作少量的修改。逐步添加一些额外的指令,例如显示不同大小的文字,显示多行等等,从而进一步理解代码的应用。
第5步:emWin的多任务应用,加入到你的操作系统中
如果你的系统有可能多个任务同时对显示进行操作,这时就要用到GUITask.C文件中的GUI_MAXTASK和GUI_OS宏。
第6步:采用emWin编写你自己的应用
到这一步你应该对怎样使用emWin有一个清楚的了解了。考虑如何采用emWin提供的函数来构建你的应用,并通过阅读手册来获得各函数更详细的功能和使用上的信息。

emWin的移植
移植是指对emWin进行配置和修改,使它能够在你的目标系统上运行。参考第3.4节中的第一步和第二步,移植工作主要是针对配置头文件中的宏定义进行修改。
这些宏包括:
1. LCD宏,定义了显示的尺寸和一些可选择的特性(例如镜像,等等)
2.LCD控制器宏,定义了怎样对控制器进行操作。
下表显示了emWin中哪些宏定义与移植有关: 



表20-1 与GUI移植相关的宏定义

表20-2 与GUI移植相关的宏定义(续)

实现方法与步骤
4.1实例准备
关于S3C44B0X与LCD接口相关内容,以及如何连接电路,可以参考实例十一。
对于实例内容和目标(1),写出符合要求的函数定义;
对于实例内容和目标(2),将编写好的主程序和光盘中提供的emWin的库文件加入工程中进行编译仿真。emWin的库文件放在光盘的source/guihelloworld/gui目录下。编写主程序main.C后,将主程序文件与ucgui.alf库文件加入同一个工程进行编译。编译成功后用并口线连接ARMSys,利用ADW下载程序,并仿真调试。观察LCD屏上的显示情况。
4.2定义宏
LCD_INIT_CONTROLLER()函数用于对LCD显示进行初始化,同时开启显示。关于它的定义,可以参考实例十一4.2节的相关内容。
LCD_WRITE_MEM()和LCD_READ_MEM()在LCDConf.h文件中定义,LCD_WRITE_MEM(Index, Data)函数用于对显示缓冲区的指定地址写入数据。它的定义很简单,代码如下:
#define LCD_WRITE_MEM(Index,data) *((U8*)(Index))=data
LCD_READ_MEM(Index)函数则用于读出显示缓冲区指定地址的内容。定义如下:
#define LCD_READ_MEM(Index) *((U8*)(Index))
4.3编写Hello world程序
参考以下示例程序,注意该程序只给出与GUI有关的部分,硬件部分的初始化部分程序,读者自行添加。
#include “GUI.H”//引用emWin提供的库函数
/*********************************************
* main
*********************************************/
void main(void){
int i=0;
……/*在这里对ARMSys的硬件进行初始化*/
GUI_Init();//对GUI进行初始化(包括对LCD显示的初始化)
GUI_DispString(“Hello world!”);//在(0,0)位置显示字符串
While(1){
GUI_DispDecAt(i++,20,20,4);//在(20,20)位置显示整数
if (i>9999) i=0;
}
}

运行结果
以上程序的运行结果,是在液晶显示屏上显示出如下内容:

范例程序的运行与操作结果
其中第二行的数值不断加1跳变。