手动移植UGUI
看需求
首先对硬件的要求,主要是MCU的RAM,和ROM,基本有两三K的RAM就够了,源码就两个文件
源码下载网站
μGUI - free Open Source GUI module for embedded systems | Embedded Lightning
就这哥两没了,当然ugui.c有个小六千多行,其他版本不知道,我下载的是V0.3版本,过个想来大差不差的。
里面控件就只有
Window
Button
TextBox
Image
没了
所以要做出多好看的界面,还得看自己扩展。
大概看了一下,感觉像是LVGL的简化板,要绚丽里的画面就得去详细了解他的控件框架,然后自己添加控件。
看看别人移植后做的简单画面
感觉工业控制上面使用问题不太大
移植也很简单,下载源码,再工程里添加ugui.c和ugui.h两个文件OK
然后就是怎么用了
用法
首先初始化
ugui的底层接口就是打点,画线,和画块三个函数,确切的说只要给个打点函数就行,但加上另外两个刷屏速度回快一点。
UG_Init(&gui,(void (*)(UG_S16,UG_S16,UG_COLOR))LCD_DrawPixel,320,240);UG_DriverRegister(DRIVER_DRAW_LINE,(void*) LCD_DrawLine );UG_DriverRegister(DRIVER_FILL_FRAME,(void*) LCD_FillRectangle );UG_DriverEnable(DRIVER_DRAW_LINE);UG_DriverEnable(DRIVER_FILL_FRAME);
然后就OK了
创建一个Window
UG_WindowCreate(&wind1 , obi_buff_wnd_1,1,window_1_callbak );UG_WindowSetBackColor(&wind1,LCD_WHITE);UG_WindowSetTitleText(&wind1,"ttt");UG_WindowSetTitleTextFont(&wind1,&FONT_8X8);UG_BUTTON btn1;UG_U8 BTIN_ID_0 = 0;UG_ButtonCreate(&wind1,&btn1,BTIN_ID_0,10,10,110,60);UG_ButtonSetFont(&wind1,BTIN_ID_0,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_0,"BTN1");UG_WindowShow(&wind1);
这样创建完成了,然后在你的主循环里
while(1){UG_Update();}
然后就可以显示了
我这边是带触摸了,然后添加触摸也很简单
只有实时扫描触摸状态然后给到UG_TouchUpdate这个函数,然后UG_Update这个函数就会根据触摸信息,按下的相关控件会调用回调函数处理,例如代码的回调函数window_1_callback,
里面有判断是哪个控件按下,然后处理对应的函数。
UG_WINDOW wind1;
UG_BUTTON btn1;
UG_BUTTON btn2;void window_1_callbak(UG_MESSAGE*arg)
{printf("btn state : %d \r\n",arg->sub_id);}int main(void)
{HAL_Init();systemClockConfig();uartInit(115200); //调试串口TP_Init();LCD_Init(); //TFT unsigned int x = 0,y =100;LCD_FillScreen(LCD_WHITE); // 清屏UG_Init(&gui,(void (*)(UG_S16,UG_S16,UG_COLOR))LCD_DrawPixel,320,240);UG_DriverRegister(DRIVER_DRAW_LINE,(void*) LCD_DrawLine );UG_DriverRegister(DRIVER_FILL_FRAME,(void*) LCD_FillRectangle );UG_DriverEnable(DRIVER_DRAW_LINE);UG_DriverEnable(DRIVER_FILL_FRAME);UG_OBJECT obi_buff_wnd_1[2];UG_WindowCreate(&wind1 , obi_buff_wnd_1,2,window_1_callbak );UG_WindowSetBackColor(&wind1,LCD_WHITE);UG_WindowSetTitleText(&wind1,"ttt");UG_WindowSetTitleTextFont(&wind1,&FONT_8X8);UG_U8 BTIN_ID_0 = 3;UG_U8 BTIN_ID_2 = 2;UG_ButtonCreate(&wind1,&btn1,BTIN_ID_0,10,10,110,60);UG_ButtonSetFont(&wind1,BTIN_ID_0,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_0,"BTN1");UG_ButtonCreate(&wind1,&btn2,BTIN_ID_2,10,80,110,130);UG_ButtonSetFont(&wind1,BTIN_ID_2,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_2,"BTN2");UG_WindowShow(&wind1);while(1){if(!TPINTin()){Get_TP_Point(&x,&y);UG_TouchUpdate(x,y,TOUCH_STATE_PRESSED);}else{UG_TouchUpdate(-1,-1,TOUCH_STATE_RELEASED);}UG_Update();}
}
按下按键时回调函数是根据控件ID确定按的是哪个控件