【GUI】mini开源GUI-uGUI快速使用(可适用于OLED、LCD等显示器件)

1、uGUI要求

uGUI官网: 官方网站
github链接:源码
uGUI的使用准备:
1、下载好源码:ugui.c和ugui.h,将其添加至你的平台的工程中;
2、在自己的平台上准备好基本的显示驱动,其中各个平台与uGUI的接口函数为像素填充函数,以0.96OLED为例,需要用到画点函数(单色OLED),其他彩色屏,t对应的为颜色变量color

void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
    
    
	u8 i,m,n;
	i=y/8;
	m=y%8;
	n=1<<m;
	if(t){
    
    OLED_GRAM[x][i]|=n;}
	else
	{
    
    
		OLED_GRAM[x][i]=~OLED_GRAM[x][i];
		OLED_GRAM[x][i]|=n;
		OLED_GRAM[x][i]=~OLED_GRAM[x][i];
	}
}

2、开始使用

2.1 修改ugui.h

不同的平台需要我们在ugui.h中修改对应的整型,以STM32HAL库为例:
在ugui.h中我们将用户定义的整型名称修改为

typedef uint8_t      UG_U8;//无符号字符型
typedef int8_t       UG_S8;//有符号字符型
typedef uint16_t     UG_U16;//无符号短整型
typedef int16_t      UG_S16;//有符号短整型
typedef uint32_t     UG_U32;//无符号整型
typedef int32_t      UG_S32;//有符号整型

不同的平台上需要修改uint8_t、int8_t等,注意要一一对应。

2.2 初始化

首先进行初始化操作
1、首先定义一个用户全局GUI结构体

UG_GUI my_ugui1;

2、然后在主函数中调用初始化函数

UG_Init(&my_ugui1,OLED_SetPFun,128,64);

其中,OLED_SetPFun为你的像素填充函数(准备工作中提到的),128,64为像素大小

3、调用GUI选择函数

UG_SelectGUI(&my_ugui1);

至此,就完成了初始化操作

2.3 简单示例

下面给出一个简单示例:
使用平台:STM32F103ZET6
显示器件:OLED(驱动SH1106、12864,1.3寸)(SPI、SPI DMA、模拟SPI均可,但刷新速度不同)

OLED_Refresh()为显存更新函数

void uGUI_mytest(void)
{
    
    
	UG_GUI my_ugui1;
	//初始化函数
	UG_Init(&my_ugui1,OLED_SetPFun,128,64);
	//选择GUI
	UG_SelectGUI(&my_ugui1);
	//选择字体
	UG_FontSelect(&FONT_8X8);
	//字符显示
	UG_PutChar('B',20,20,C_WHITE,C_BLACK);
	OLED_Refresh();
	HAL_Delay(500);
	OLED_Clear();
	//全屏填充函数
	UG_FillScreen(C_WHITE);
	OLED_Refresh();
	HAL_Delay(1000);
	OLED_Clear();
	//矩形填充
	UG_FillFrame(0,0,50,50,C_WHITE);
	OLED_Refresh();
	HAL_Delay(1000);
	OLED_Clear();
	//圆角矩形填充
	UG_FillRoundFrame(0,0,50,50,10,C_WHITE);
	OLED_Refresh();
	HAL_Delay(1000);
	OLED_Clear();
	//字符串测试
	UG_FontSelect(&FONT_16X26);
	UG_SetBackcolor(C_BLACK);
	UG_SetForecolor(C_WHITE);
	UG_PutString(0,0,"Hello Wlord!");
	OLED_Refresh();
	HAL_Delay(1000);
	OLED_Clear();
}

演示效果图:

扫描二维码关注公众号,回复: 15437857 查看本文章

字符串显示
圆角矩形显示
字符显示

3、更多功能

uGUI 包括有字符、图片、按钮、窗体等显示与功能回调函数等,还有标准的触摸输入以及其它输入设备等接口,具体请参考官方给出的使用文档。
注意官方库中未给出数字显示函数:
这里给出一个笔者编写的数字显示函数,仅供参考:

UG_U32 UG_Pow(UG_U8 m,UG_U8 n)
{
    
    
	UG_U32 result=1;
	while(n--)
	{
    
    
	  result*=m;
	}
	return result;
}

void UG_PutNum(UG_S16 x,UG_S16 y,UG_S32 num, UG_U8 len,UG_COLOR fc, UG_COLOR bc)
{
    
    
  	UG_U8 t,temp;
	  UG_U8 enshow=0;	
		for(t=0;t<len;t++)
			{
    
    
				temp=(num/UG_Pow(10,len-t-1))%10;
				if(enshow==0&&t<(len-1))
				{
    
    
					if(temp==0)
					{
    
    
						UG_PutChar(' ',x+t*(gui->font.char_width+gui->font.char_h_space-1),y,fc,bc);
						continue;
					}
					else enshow=1; 
				}		
						UG_PutChar(temp+'0',x+t*(gui->font.char_width+gui->font.char_h_space-1),y,fc,bc);
				
		
		}

}

注意别忘记在头文件ugui.h中声明哦!
显示效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39587650/article/details/119491697
GUI