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中声明哦!
显示效果: