第八篇 uCGUI的移植

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mcgrady_tracy/article/details/78054079
uCGUI版本:v3.98
屏:OLED

前面显示字符串我们自己定义了一个字库,uCGUI中肯定也是有字库支持的,这里的移植目标也是调用GUI_DispString()函数后能正确显示出字符,这里不会将uCGUI的所有功能添加进工程中,所以还是以显示字符为前提。

首先将uCGUI中的Start/GUI和Start/Config两个目录拷贝到项目中。

然后将Sample/GUI_X/GUI_X.c也拷贝到项目中。

移植是根据调用GUI_DispString()函数来的,所以这里应该是显示字符的最小移植了吧。

把下面的文件添加进Keil工程中。
Core:
	Start/GUI/Core/GUI_DispString.c
	Start/GUI/Core/GUI_Goto.c
	Start/GUI/Core/GUI_RectsIntersect.c
	Start/GUI/Core/GUI_UC.c
	Start/GUI/Core/GUI_UC_EncodeNone.c
	Start/GUI/Core/GUIChar.c
	Start/GUI/Core/GUICharLine.c
	Start/GUI/Core/GUICharM.c
	Start/GUI/Core/GUICore.c
	Start/GUI/Core/LCD.c
	Start/GUI/Core/LCD_L0_Generic.c
	Start/GUI/Core/LCDColor.c
	Start/GUI/Core/LCDP1.c
Font:
	Start/GUI/Font/F8x8.c
LCDDriver:
	Start/GUI/LCDDriver/LCDMem.c
Config:
	Sample/GUI_X/GUI_X.c

添加后如图所示:


然后是uCGUI的配置,uCGUI的配置在Config目录里面。

GUIConf.h修改如下:

没有操作系统,不支持触控、鼠标,不支持Unicode编码,使用8x8等宽字体。窗口管理也暂时不支持,抗锯齿也不支持。

然后是LCD的配置,修改如下:

修改屏分辨率,修改像素位宽。最后,最重要的一点LCD_CONTROLLER,定义LCD控制器的型号,该定义会决定到底使用哪款LCD驱动,由于我们这里使用的是LCDMem.c这个驱动,所以这里定义为0。

注意:LCDMem.c这个驱动实际上是将显示数据写入到一个buffer中的,并没有实际显示到屏幕上,用户还需要将这个buffer取出来然后再到屏上做显示。本人也尝试过使用LCDTemplate.c这个驱动(这里需要将LCD_CONTROLLER定义为-1),网上很多例子讲的只需要修改LCD_L0_SetPixelIndex()函数就可以了,但是这个函数是以像素为单位进行数据传送的,而我们的OLED屏又不支持(只能一次写入8bit数据,一次修改8个像素点),所以最后放弃使用这个驱动。

最后,还需要将uCGUI的头文件路径添加进工程中:


编译一下,看能否编译通过。

前面说了,LCDMem.c这个驱动只是将显示数据写入到一个buffer中,要将数据显示到屏幕上,还需要一个函数:

void refresh(void)
{
	unsigned char val;
	int i, j, k;
	for (i = 0; i < PAGE_SIZE; i++) {
		lcd_set_xy(0, i*8);
		for (j = 0; j < LCD_WIDTH; j++) {
			val = 0;
			for (k = 0; k < 8; k++) {
				if (LCD_L0_GetPixelIndex(j, i*8+k))
					val |= (1 << k);
			}
			spi_write_data(val);
		}
	}
}
该函数就是将buffer中的数据取出来,然后显示到屏幕上。

好了,最后在main()函数里面调用GUI_Init(),然后调用GUI_DispString()和这里的refresh()函数就可以将字符显示到屏幕上了。

展开阅读全文

没有更多推荐了,返回首页