GUI移植
来源:互联网 发布:wav无损播放软件 编辑:程序博客网 时间:2024/06/12 01:45
下表显示了GUI 所有子目录的内容:
目 录
内容
Config
配置文件(根据应用配置)
GUI/AntiAlias
抗锯齿支持 *
GUI/ConvertMono
用于B/W(黑白两色)及灰度显示的色彩转换程序
GUI/ConvertColor
用于彩色显示的色彩转换的程序
GUI/Core
μC/GUI 内核
GUI/Font
字体文件
GUI/LCDDriver
LCD驱动(移植部分:根据需要修改或添加)
GUI/JPEG
JPEG图像支持 *
GUI/Mendev
存储器件支持 *
GUI/Touch
触摸屏支持 *
GUI/Widget
视窗控件库 *
GUI/WM
视窗管理器 *
(带“*”标志的为可选项,不同版本带的有所不同)
说明:移植是要特别注意配置文件Config和GUI/LCDDriver。
①.GUI/LCDDriver文件夹中存放的是一些LCD驱动代码,如果你使用的LCD在这里可以找到代码,可以直接通过Config中的LCDConfig.h里边的:
#define LCD_CONTROLLER -1 // -1:表示没有选择的LCD驱动,而是使用里边的样本程序进行修改。
uCGUI中具体支持哪些LCD?可以查询《uCGUI用户手册》的第22章 LCD驱动程序。里边详细的说明了,支持些什么控制器的LCD。
移植步骤:
①.LCD_Init (): LCD初始化函数。
②.LCD_SetPixel(): LCD画点函数。
③.LCD_GetPixel(): LCD读点颜色函数。2.编写好这三个函数后,可以直接在LCDDummy.C或LCDTemplate.C文件中添加相应的代码
不要忘了改型号
#if (LCD_CONTROLLER == 9481) \
&& (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
①.添加画点函数:
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) {
/* Write into hardware ... Adapt to your system */
{
/* ... */ 添加画点函数
}
}
②.添加获取像素点颜色函数:
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
/* Read from hardware ... Adapt to your system */
{
PixelIndex = 0;
/* ... */ 添加获取像素点颜色函数
}
return PixelIndex;
}
③.添加初始化函数:
int LCD_L0_Init(void) {
LCD_INIT_CONTROLLER(); // 把这句改成LCD_Init ();
return 0;
}
当然也可以直接在LCDConf.c文件中,把宏改成如下:
#define LCD_INIT_CONTROLLER() TFTInit();
3. 以上方法是利用样本函数,当然也可以自己编写连接代码。如果是直接编写,则需要编写如下函数:
函数
说明
初始化及显示控制组
LCD_L0_Init ()
初始化显示屏。
LCD_L0_ReInit ()
不擦除内容而重新初始化LCD。
LCD_L0_Off ()
关闭 LCD。
LCD_L0_On ()
开启 LCD。
绘制组
LCD_L0_DrawBitmap ()
通用绘制位图函数。
LCD_L0_DrawHLine ()
绘制一条水平线。
LCD_L0_DrawPixel ()
以当前前景色绘制一个像素。
LCD_L0_DrawVLine ()
绘制一条垂直线。
LCD_L0_FillRect ()
直译一个矩形区域。
LCD_L0_SetPixelIndex()
以指定颜色绘制一个像素。
LCD_L0_XorPixel ()
反转一个像素。
“Get”组
LCD_L0_GetPixelIndex()
返回指定像素的颜色的索引。
“Set”组
LCD_L0_SetOrg ()
不再使用,保留给将来使用(必须在驱动器中存在)。
查询表组
LCD_L0_SetLUTEntry ()
修改LUT 的单个条目。
Misc.组(可选)
LCD_L0_ControlCache ()
锁/解锁/清除 LCD 高速缓存。
注意:红色为必须要实现的函数,其他函数可以为空,但必须保留函数体。
第二步:加入UCGUI程序包。
从GUI源码里复制代码,进行工程搭建
(1):复制 源码/Start 文件下的GUI和Config这两个文件夹到自己的工程模板;
图片指示:
(2):复制 源码/Sample/GUI_X 文件夹下的 GUI_X.c 文件,粘贴到工程模板下的Config里;
图片指示:
(3):打开KEIL工程(事先准备好的),KEIL界面左边有个Project视窗,在Target1单击右键,出现一个选项卡,在Groups里创建各文件,然后依次Add Files,即添加.c .h 文件,这里要着重说明:添加文件的时候,尤其是GUI源码,文件类型选择ALL Files(系统默认.c文件),就是为了添加.h文件,这一点很重要。举个例子吧,在Config文件夹下要添加GUI_X.c
GUIConf.h GUITouch.h LCDConf.h。
还有一个问题,网上有人说触摸用不到,可以不用添加,然后字体也只添加几个用得到的,我的意见是:全部添加,避免难以修改的KEIL警告,这点很重要,我是新手,我很清楚怎么过来的,呵呵呵。
补充说明:新建 TFTDrive.h ILI93xx.c 两个文件,这个TFTDrive.h是 ILI93xx.c 的头文件,通过TFTDrive.h找到ILI93xx.c里的程序。 这两个文件里面的内容,是事先准备好的,也就是我所说的没加GUI源码之前的 完整的 KEIL工程的一部分。当然,这两个文件放到LCDDriver文件夹里面,添加的时候也一并添加进去就行。
①.GUI_X.C :无系统
②.GUI_X_embOS.C :embOS系统
③.GUI_X_uCOS.C :uCOS系统
根据不同条件添加不同文件,如果是无系统下添加文件①,否则根据系统添加文件,或编写文件。特别说明如下函数:
a.int GUI_X_GetTime(void);
此函数调用系统时间如果你的系统有实时时钟之类的可以将实时时钟驱动程序放在这里面。没有也没关系只是调用系统时间相关的函数不能用而已,可能这个功能很多人也不会用。
b.void GUI_X_Delay(int Period);
此函数用于GUI的延时,如果没有跑系统,就自己手动的写个延时程序,如果跑了操作系统,就调用系统的延时函数。
在uCGUI中有很多地方都调用了以上函数,在其它的GUIDEMO_XXXX.C中也有这样一些循环,你要是调试是发现液晶屏上的显示一直停在一个画面上很久的话,应该就是以上函数的问题,需要根据需要修改。
(4):文件添加完了,还有一步呢,还要在添加路径。点击魔术棒,出现一个选项卡,点击C/C++,在Include Paths里包含文件路径,所有文件的都要包进来哦。能玩移植的朋友们,我相信(3)(4)两步对你们来说不难。
第三步:配置LCDConf.h GUIConf.h GUITouchConf.h(我的液晶不带触摸功能,此配置在此不讲。)
配置LCDConf.h文件如下:
#ifndef LCDCONF_H
#define LCDCONF_H
#define LCD_XSIZE (160) //配置TFT的水平分辨率
#define LCD_YSIZE (128) //配置TFT的垂直分辨率
#define LCD_CONTROLLER (54124) //TFT控制器的名称
#define LCD_BITSPERPIXEL (16) //每个像素的位数
#define LCD_FIXEDPALETTE (565) //调色板格式
#define LCD_SWAP_RB (0) //红蓝反色交换
#define LCD_INIT_CONTROLLER() TFT_Init() ; //此处需要定义的是你的TFT初始化函数 #endif /* LCDCONF_H */
这是我修改之后的源码,大家看看是不是声明下面少了许多函数啊,没错,我删掉了,原因很简单,我的底层驱动IC程序是厂家提供的,而且GUI源码也没有我的这部分驱动程序。所以大家弄得时候也要一并删除,只留下红色代码部分。
配置GUIConf.h文件如下:
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (1) //多任务
#define GUI_SUPPORT_TOUCH (0) //触摸
#define GUI_SUPPORT_UNICODE (1) //Unicode支持
#define GUI_DEFAULT_FONT &GUI_Font6x8 //GUI默认字体
#define GUI_ALLOC_SIZE 5000 //动态内存的大小
#define GUI_WINSUPPORT 1 //窗口控件支持
#define GUI_SUPPORT_MEMDEV 1 //支持内存设备
#define GUI_SUPPORT_AA 1 /* Anti aliasing available */
#endif /* Avoid multiple inclusion */
第四步:最关键的一步。那就是让GUI能够找到你的LCD驱动。修改LCDDriver。
在编写你的TFT底层驱动程序的时候,一定不能忘记编写这两个函数:设置一个像素和获取一个像素的颜色,因为后面很多UCGUI和你的TFT驱动关联起来需要这两个函数为前提。以我的TFT为例:
void LCD_SetPixel(unsigned short x, unsigned short y, unsigned short color)
{
….
…
}
unsigned short LCD_GetPixel(unsigned short x, unsigned short y)
{
…
…
}
这两个函数写好,并测试可以正常显示后,接下来需要修改TFT与UCGUI关联的函数(在一个C文件下(我的是ili9320_ucgui.c),建议大家在移植GCGUI之前最好下载个别人移植好的例程,对着修改这样难度降低很多):
int LCD_L0_Init(void)
{
TFT_Init();
return 0;
}
这个函数,是GCGUI初始化TFT需要调用的,里面的函数就是你TFT底层驱动的初始化函数。
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
LCD_SetPixel(x,y,PixelIndex);
}
unsigned int LCD_L0_GetPixelIndex(int x, int y)
{
return LCD_GetPixel(x,y);
}
上面两个函数是其他函数的最基本元素,其他函数比如画线、点、圆都需要调用改函数。里面的LCD_SetPixel(x,y,PixelIndex)、LCD_GetPixel(x,y);就是你TFT底层驱动设置像素和获取像素的两个函数。
紧接着把该ili9320_ucgui.c文件下其他函数修改一下(凡是遇到设置像素和获取像素的地方用以上两个函数代替。)
接着,修改另一个C文件(ili9320_api.c)这里修改很简单,仅仅也是将设置像素和获取像素的函数替换掉自己定义的即可。
最后,网上说需要修改那个GUI_X.c文件,由于我下载的是STM32模板(ILI9320的控制器),那个文件没有修改。
PS:我的开发环境MDK3.4以上版本,CPU:STM32F103RB TFT与MCU接口:模拟总线8位 1.8英寸 160×128分辨率的TFT
UCGUI版本3.90 UCOS版本2.86 在原基础上仅仅修改了以下几个文件:ili9320.c
、ili9320_ucgui.c 、ili9320_api.c 、GUIConf.h、LCDConf.h
由于网络的原因,稍后将整个工程上传上去,以及显示效果。呵呵 欢迎拍砖!
先修改主函数,添加 #include”GUI.h”//头文件包含嘛,呵呵呵
在main()里,添加 :
GUI_Init();
GUI_SetBkColor(GUI_BLUE);
GUI_SetColor(GUI_RED);
GUI_Clear();
GUI_DrawCircle(100,100,50);//画圆
#defineLCD_SWAP_XY1#defineLCD_MIRROR_X1#defineLCD_MIRROR_Y1具体是“1”还是“0”,需要经过自己调试配置。
- GUI移植
- GUI移植
- GUI移植总结
- arm移植gui
- 嵌入式GUI移植小结
- UC/GUI 移植 STM32F103VE
- 【书籍推荐】GUI应用程序移植
- GUI--移植3--添加并配置触摸屏到uc/gui
- 把uc/gui移植到了mini2440
- Qt/Embedded GUI移植及应用程序开发
- GUI--移植2--图片显示方法示例
- uC/GUI移植笔记 (详细)
- SSD1306上移植uc/gui(efm32)
- 基于AT91SAM7 MCU的UC/GUI的移植
- μC/GUI在MSGl9264液晶上的移植
- S3C2410 LCD 驱动程序移植及GUI程序编写(3)
- S3C2410 LCD 驱动程序移植及GUI程序编写
- S3C2410 LCD 驱动程序移植及GUI程序编写
- Vitamio 4.0 API中的方法改变========changed API for Android
- 第二部分:ORCL12C中PDB数据库的创建和删除
- 求最大子列和问题两种算法比较
- 相对论并非遥不可及
- VC内嵌汇编基础知识
- GUI移植
- Git:远程分支、远程版本库
- MySQL之IN的用法
- 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
- win7开wifi
- WrodPress安装及配置
- OC基础——OC总结
- 【BZOJ 1621】 [Usaco2008 Open]Roads Around The Farm分岔路口
- STM32F407ZG单片机晶振由例程默认推荐的8M换为自定义的4-26M时的注意事项