ucgui 移植(裸奔)

下载完整的UCGUI的源代码,start文件夹下需要用到GUI和Config文件夹,Sample文件夹下需要用到GUI_X文件夹的内容。

在GUI_X这个文件夹下有3个GUI_X*文件。分别为:GUI_X.c、GUI_X_embOS.c、GUI_X_ucOS.c这3个文件分别对应无操作系统embOS和ucOS。

目 录  内   容 

Config   配置文件 

GUI/AntiAlias   抗锯齿支持 * 

GUI/ConvertMono   用于 B/W(黑白两色)及灰度显示的色彩转换程序 

GUI/ConvertColor   用于彩色显示的色彩转换的程序 

GUI/Core  µC/GUI 内核文件 

GUI/Font   字体文件 

GUI/LCDDriver  LCD 驱动 

GUI/Mendev   存储器件支持 * 

GUI/Touch   触摸屏支持 * 

GUI/Widget  视窗控件库 * 

GUI/WM   视窗管理器 * 

移植uC/GUI主要集中在修改三个头文件和两个C文件。三个头文件都在\Config下,分别是GUICon.h ,GUITouchConf.h,LCDConf.h ;两个C文件一个是GUI_X.C(Sample\GUI_X.C) ,.另外一个在GUI\LCDDriver目录下(我是选择LCDWin.c来修改的)。

1.修改头文件LCDConf.h

主要修改的地方:

#define LCD_XSIZE  (240)

#define LCD_YSIZE  (320)

//#define LCD_BITSPERPIXEL (8)

#define LCD_BITSPERPIXEL (16)  //16Bpp

#define LCD_CONTROLLER 1375 //有控制器写控制器  没控制器写-1

LCD_XSIZE  ,LCD_YSIZE 是对应你的LCD的尺寸大小

LCD_BISPERPIXEL  指定每象素的位的数量

2 修改头文件GUI_Conf.h

#ifndef GUICONF_H

#define GUICONF_H

#define GUI_OS  (0)

#define GUI_SUPPORT_TOUCH  (0)

#define GUI_SUPPORT_UNICODE  (1)

#define GUI_DEFAULT_FONT  &GUI_Font6x8

//#define GUI_ALLOC_SIZE  12500

#define GUI_ALLOC_SIZE  1024*1024

#define GUI_WINSUPPORT  0

#define GUI_SUPPORT_MEMDEV  0

#define GUI_SUPPORT_AA  0

#endif

GUI_0S 位1时支持OS,否则就是裸跑吧

GUI_SUPPORT_TOUCH 是否支持触摸屏

GUI_SUPPORT_UNICODE 是否支持ASCII/UNICODE

GUI_DEFAULT_FONT 选择一个默认的字体

GUI_ALLOC_SIZE  动态内存的大小  //这里很重要,源码中写的动态内存是1024×1024,导致代码太大编译通不过,可以改为5000

GUI_WINSUPPORT  是否支持 WM(视窗管理器)

GUI_SUPPORT_MEMDEV  是否支持存储设备

GUI_SUPPORT_AA  是否支持反锯齿

3 修改 GUITouchConf.h

如果需要支持触摸屏的话,这个头文件也要作相应的修改。

下面是说明如何修改uC/GUI的两个接口文件。

在LCD的最基本操作就是在某一个坐标上画点,其他的操作都是画点操作延伸出来的。必须要把画点这个函数连接到uC/GUI的代码里面。连接的函数就在LCDDriver下,我选用LCDWin.c.。。。还有两个文件是LCDNULL.c和LCDDUMMY.c 这三个文件选一个作为驱动程序..都是些模板...

修改这个文件的时候要注意,首先要屏蔽掉第一行的条件编译语句 #if defined(WIN32) && !defined(LCD_SIMCONTROLLER) 和文件的最后一行的#endif  顺便把#endif头上的#else 也干掉。这个文件是针对PC仿真的,不注释掉这几个地方,整个文件都不会被编译的。或者选用其他的驱动模板..

在lcd驱动中写画点函数:

void LCD_SetPixel(U32 x,U32 y,U32 c)

{。。。。。

}

然后把LCDWin.c的LCDSIM_SetPixelIndex(x, y, c, LCD_DISPLAY_INDEX)全部替换成LCD2410_SetPixel(x,y,c)

你会发现里面还有一个LCDSIM_GetPixelIndex(x,y, LCD_DISPLAY_INDEX); 那就在驱动中造一个函数出来吧。

void GetPixel(U32 x,U32 y,U32 c)

{

if ( (x < SCR_XSIZE_TFT_240320) && (y < SCR_YSIZE_TFT_240320) )

c=LCD_BUFER[(y)][(x)];  //对调过来,呵呵,简单吧!

}

void LCD_Off (void)

void LCD_ON(void)

这两个函数连接到驱动中的Lcd_EnvidOnOff(int onoff)

int  LCD_L0_Init(void) 连接到 驱动中的Lcd_Init();再加上一个清屏的函数

void LCD_L0_ReInit() 连接到驱动中的Lcd_Init();不加清屏函数。

其实上面就是GUI和驱动的链接..相应的函数对联就好了..

最后修改GUI_X.C文件

由于没有OS,所以有关OS的语句都得修改,幸好不是很多,就两个地方而已。

GUI_X_GetTime(void) 返回当前的OS_TimeMS ,那就修改一下,把变量赋值一个数比如是10 然后让函数返回这个值就行了 。

GUI_X_Delay(int ms)

自己写个延时程序吧,也可以参照2410lib.c下的Delay()。

GUI_X_Init();完成硬件的初始化,包括时钟频率设置,端口设置,中断设置,LCD初始化等等一系列动作。在驱动中中可以找到这些函数的原型。

做完以上的工作基本上算是完成了移植的工作了。

最后在主函数上编写测试程序

int Main()

{GUI_Init();

GUI_DispString("Hello world!");

for(;;);

return 0;

}


其他-----------------------

#define LCD_CONTROLLER 8888 //任意定义
然后在LCDDRIVER目录下的LCD_1.c文件添加修改,这样UCGUI就能调用这个LCD硬件驱动程序TFT6758.c。
#if (LCD_CONTROLLER == 8888)

UCGUI中虽然提供了很多的驱动,但是也提供了一些驱动模板,诸如LCDDummy.c

LCDNull.c等这些文件,基本上最简单你只须将画点函数完成,将控制器初始化完成,然后将LCD读写的几个宏完成,UCGUI的驱动就完成了.在使用uC/GUI的时候需要注意的是,uC/GUI默认是使用在uCOS操作系统中,GUI_Delay()函数用来进行延时和界面的刷新。在GUI_Delay()函数中调用了GUI_GetTime( )用来返回操作系统的当前时间,并结合延时时间确定延时是否完成。在单任务的前后台系统中如果调用GUI_Delay(),因为得不到GUI_GetTime( )调用的系统时间,程序就会进入死循环。

来自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299693.html
version :4.0 1、将生成的代码和事件用两个文件实现。 2、修改了部分Bug; 3、颜色设置做了部分改进; 4、内部集成了VC的编译器,和模拟器,生成C文件后可以直接在uCGUIBuilder中编译,运行模拟器了 5、添加代码自动完成功能; 6、添加画线功能。 version : 3.1.0.0 1、修改了选择不同窗体属性窗口不更新的BUG; 2、修改了只能打开一个ucGUIBuilder的功能,现在可以同时启动多个; 3、修复了拖放非ucfrm引起软件错误的Bug; 4、添加了控件ID自动增加功能; 5、添加了控件ID检查功能,控件ID有重复时会有警告; 6、添加了用户自定义字体功能; 7、支持中英文切换(但功能不够完善); 8、支持自动检查更新; 9、修改了不能保存用户自定义ID的BUG; version : 3.0.0.0 重写了部分内核,运行更稳定; 支持窗体设计器的复制、粘贴、剪切、删除、撤销、等基本操作; 支持多控件,对齐、公共属性修改等基本操作; 支持将.ucfrm文件与ucGUIBuilder关联功能; 支持控件自定义ID; 添加了窗体预览功能; 添加了对控件事件的支持; 添加了在线检查更新功能; 等…… version : 2.1.0.5 优化了控件库; 修复了一些Bug; 代码生成窗口中添加了C语言语法高亮显示功能; C文件模板做了部分修改(C文件模板大家可以随意修改为自己喜欢的格式(..\Template\Template.c文件) 但是要保证$$$GUI_WIDGET_CREATE_INFO$$$ $$$Defination$$$ $$$InitDialog$$$ 三个字符串位置不变) 支持设计的窗体保存为文件,并可以打开; 对所有控件属性添加了Description(在属性窗口最下面显示); 窗体布局可以保存,可以自定义为自己喜欢的窗体布局; 修改了部分功能; version : 2.0.0.5 优化了控件库; 修复了一些Bug; 可以生成完整的C文件(包括 资源表,初始化代码等); 修改了部分功能; version : 1.0.0.0 功能很不完善; 还有好多BUG; 目前只能生成资源表; 暂时不能生成其他代码; 大家有什么好的建议可以发送Email 到: ucguibuilder@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值