WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2017-09-07 16:29:19

admin
Administrator
注册时间: 2017-09-06
累计积分: 20

发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

离线

#2 2017-09-07 16:29:38

admin
Administrator
注册时间: 2017-09-06
累计积分: 20

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

Introduction

What is µGUI?

µGUI is a free and open source graphic library for embedded systems. It is platform-independent and can be easily ported to almost any microcontroller system. As long as the display is capable of showing graphics, µGUI is not restricted to a certain display technology. Therefore, display technologies such as LCD, TFT, E-Paper, LED or OLED are supported. The whole module consists of three files: ugui.c, ugui.h and ugui_config.h.

µGUI Features

  • µGUI supports any color, grayscale or monochrome display

  • µGUI supports any display resolution

  • µGUI supports multiple different displays

  • µGUI supports any touch screen technology (e.g. AR, PCAP)

  • µGUI supports windows and objects (e.g. button, textbox)

  • µGUI supports platform-specific hardware acceleration

  • 16 different fonts available

  • cyrillic fonts supported

  • TrueType font converter available (https://github.com/AriZuu)

  • integrated and free scalable system console

  • basic geometric functions (e.g. line, circle, frame etc.)

  • can be easily ported to almost any microcontroller system

  • no risky dynamic memory allocation required

µGUI Requirements

µGUI is platform-independent, so there is no need to use a certain embedded system. In order to use µGUI, only two requirements are necessary:

a C-function which is able to control pixels of the target display.
integer types for the target platform have to be adjusted in ugui_config.h.

离线

#3 2017-09-07 16:33:54

admin
Administrator
注册时间: 2017-09-06
累计积分: 20

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

那么小的µGUI, 居然还支持 TrueType Font (ttf字体)

离线

#4 2018-03-23 14:36:44

chaoking
会员
注册时间: 2018-03-23
累计积分: 6

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

厉害了,感谢作者的无私奉献,正在移植中

离线

#5 2018-03-23 14:42:16

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

chaoking 说:

厉害了,感谢作者的无私奉献,正在移植中

成功了发个图片上来给坑友们围观一下哈

离线

#6 2018-04-18 08:19:21

xinxiaoci
会员
注册时间: 2018-04-18
累计积分: 71

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

chaoking 说:

厉害了,感谢作者的无私奉献,正在移植中

移植好了没有?

最近编辑记录 xinxiaoci (2018-04-18 08:20:23)

离线

#7 2018-04-18 09:49:26

kgp0213
会员
注册时间: 2018-01-15
累计积分: 149

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

移植好了没有?

离线

#8 2018-04-18 09:54:05

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

kgp0213 说:

移植好了没有?

UI移植都不会太难, 给他一块画布,然后告诉UI怎么画点,大神你很快就可以搞定的。

离线

#9 2018-04-18 10:27:09

qwert1213131
会员
注册时间: 2018-01-08
累计积分: 48

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

kgp0213 说:

移植好了没有?

只需要把画点函数提供给uGUI调用就可以,然后使用内部的API进行使用,

/*               uGUI              */
void pset(UG_U16 x, UG_U16 y, UG_COLOR c)
{
   LCD_WriteBuffer(x,y,c);

}
/* GUI structure */
UG_GUI gui;

函数中直接调用下面:
UG_Init(&gui,(void(*)(UG_S16,UG_S16,UG_COLOR))pset,128,128);

最近编辑记录 qwert1213131 (2018-04-18 10:31:14)

离线

#10 2018-04-18 11:09:07

daydayup
会员
注册时间: 2017-10-09
累计积分: 308

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

qwert1213131 说:
kgp0213 说:

移植好了没有?

只需要把画点函数提供给uGUI调用就可以,然后使用内部的API进行使用,

/*               uGUI              */
void pset(UG_U16 x, UG_U16 y, UG_COLOR c)
{
   LCD_WriteBuffer(x,y,c);

}
/* GUI structure */
UG_GUI gui;

函数中直接调用下面:
UG_Init(&gui,(void(*)(UG_S16,UG_S16,UG_COLOR))pset,128,128);

厉害了老铁,学习!

离线

#11 2018-04-18 11:44:45

qwert1213131
会员
注册时间: 2018-01-08
累计积分: 48

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

daydayup 说:
qwert1213131 说:
kgp0213 说:

移植好了没有?

只需要把画点函数提供给uGUI调用就可以,然后使用内部的API进行使用,

/*               uGUI              */
void pset(UG_U16 x, UG_U16 y, UG_COLOR c)
{
   LCD_WriteBuffer(x,y,c);

}
/* GUI structure */
UG_GUI gui;

函数中直接调用下面:
UG_Init(&gui,(void(*)(UG_S16,UG_S16,UG_COLOR))pset,128,128);

厉害了老铁,学习!

有硬件加速的选项,但是这ui的控件太少了,我还是去玩LittleVGL了

离线

#12 2018-04-19 14:48:38

lcfmax
会员
注册时间: 2018-04-13
累计积分: 163

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

这个挺不错的,有没有移植运行的效果图看看

离线

#13 2018-04-19 17:15:44

qwert1213131
会员
注册时间: 2018-01-08
累计积分: 48

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

lcfmax 说:

这个挺不错的,有没有移植运行的效果图看看

去油管可以看到很多的,
建议试试这个https://littlevgl.com/

离线

#14 2018-04-19 17:33:01

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

看看nuklear,一个头文件搞定一个gui,只有两万多行而已:
https://whycan.cn/t_764.html

离线

#15 2018-04-20 09:01:23

qwert1213131
会员
注册时间: 2018-01-08
累计积分: 48

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

nuklear不知道能不能用到普通的单片机里去

离线

#16 2018-04-25 16:43:14

chaoking
会员
注册时间: 2018-03-23
累计积分: 6

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

交作业,移植不难
gd32f107_ugui.jpg

离线

#17 2018-05-04 11:19:12

LAQ
会员
注册时间: 2017-09-20
累计积分: 38

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

可以移植到ESP32里面不

离线

#18 2018-05-04 11:30:26

cityf
会员
注册时间: 2017-11-03
累计积分: 159

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

当然可以, ESP32 RAM那么多.

离线

#19 2018-05-04 11:55:21

LAQ
会员
注册时间: 2017-09-20
累计积分: 38

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

有例程可以提供下不

离线

#20 2018-05-04 12:33:42

xinxiaoci
会员
注册时间: 2018-04-18
累计积分: 71

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

chaoking 说:

我来检查作业,不错!100分!

离线

#21 2018-05-04 14:07:34

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

http://embeddedlightning.com/wp-content/uploads/2015/12/ssd1325.c

#include    "system.h"
#include    "ugui.h"

/* -------------------------------------------------- */
/* SOFTWARE SPI                                       */
/* -------------------------------------------------- */
#define OLED_PORT  GPIOB
#define OLED_SCK   GPIO_Pin_0
#define OLED_SDA   GPIO_Pin_1
#define OLED_DC    GPIO_Pin_2
#define OLED_RES   GPIO_Pin_3
#define OLED_CS    GPIO_Pin_4

void write_cmd(unsigned char b)
{
   unsigned char i;
   GPIO_WriteBit(OLED_PORT, OLED_CS, Bit_RESET);
   GPIO_WriteBit(OLED_PORT, OLED_DC, Bit_RESET);
   for (i=0x80; i; i>>=1)
   {
      GPIO_WriteBit(OLED_PORT, OLED_SCK, Bit_RESET);
      GPIO_WriteBit(OLED_PORT, OLED_SDA, (b&i)?Bit_SET:Bit_RESET);
      GPIO_WriteBit(OLED_PORT, OLED_SCK, Bit_SET);
   }
   GPIO_WriteBit(OLED_PORT, OLED_DC, Bit_SET);
   GPIO_WriteBit(OLED_PORT, OLED_CS, Bit_SET);
}

void write_data(unsigned char b)
{
   unsigned char i;
   GPIO_WriteBit(OLED_PORT, OLED_CS, Bit_RESET);
   GPIO_WriteBit(OLED_PORT, OLED_DC, Bit_SET);
   for (i=0x80; i; i>>=1)
   {
      GPIO_WriteBit(OLED_PORT, OLED_SCK, Bit_RESET);
      GPIO_WriteBit(OLED_PORT, OLED_SDA, (b&i)?Bit_SET:Bit_RESET);
      GPIO_WriteBit(OLED_PORT, OLED_SCK, Bit_SET);
   }
   GPIO_WriteBit(OLED_PORT, OLED_DC, Bit_SET);
   GPIO_WriteBit(OLED_PORT, OLED_CS, Bit_SET);
}

/* -------------------------------------------------- */
/* FRAMEBUFFER                                        */
/* -------------------------------------------------- */
unsigned char buff[128*32]; // 128x64 4BPP OLED

/* -------------------------------------------------- */
/* SSD1325 PSET-FUNCTION                              */
/* -------------------------------------------------- */
void ssd1325_pset ( UG_S16 x , UG_S16 y , UG_COLOR c )
{
   unsigned int n;
   unsigned char b;
   unsigned char col;

   col = c & 0x0F;

   n = (x >> 1) + 64 * y;
   b = buff[n];
   
   switch ( x%2 )
   {
      case 0: b &= 0xF0; b |= col; break;
      case 1: b &= 0x0F; b |= col<<4; break;
   }
   buff[n] = b;
}

/* -------------------------------------------------- */
/* SSD1325 INIT-FUNCTION                              */
/* -------------------------------------------------- */
void ssd1325_init( void )
{
   GPIO_WriteBit(OLED_PORT, OLED_RES, Bit_RESET);
   delay_ms(100);
   GPIO_WriteBit(OLED_PORT, OLED_RES, Bit_SET);
   delay_ms(100);

   write_cmd(0xAE|0x00);
   delay_ms(10);
   write_cmd(0xB3);         // Display Clock Divider/Osciallator Frequency
   write_cmd(0x91);         //   Default => 0x41
   delay_ms(10);
   write_cmd(0xA8);         // Set Multiplex Ratio
   write_cmd(0x3F);         //   Default => 0x5F
   delay_ms(10);
   write_cmd(0xA2);         // Set Display Offset
   write_cmd(0x4C);         //   Default => 0x00
   delay_ms(10);
   write_cmd(0xA1);         // Set Display Start Line
   write_cmd(0x00);         //   Default => 0x00
   delay_ms(10);
   write_cmd(0xAD);         // Set Master Configuration
   write_cmd(0x02|0x00);   //   Default => 0x03
   delay_ms(10);
   write_cmd(0xA0);         // Set Re-Map & Data Format
   write_cmd(0x50);         //   Default => 0x00
   delay_ms(10);
   write_cmd(0x84|0x02);   // Set Current Range
   delay_ms(10);
   write_cmd(0xB8);         // Set Gray Scale Table
   write_cmd(0x01);         //   Gray Scale Level 1
   write_cmd(0x11);         //   Gray Scale Level 3 & 2
   write_cmd(0x22);         //   Gray Scale Level 5 & 4
   write_cmd(0x32);         //   Gray Scale Level 7 & 6
   write_cmd(0x43);         //   Gray Scale Level 9 & 8
   write_cmd(0x54);         //   Gray Scale Level 11 & 10
   write_cmd(0x65);         //   Gray Scale Level 13 & 12
   write_cmd(0x76);         //   Gray Scale Level 15 & 14
   delay_ms(10);
   write_cmd(0x81);         // Set Contrast Value
   write_cmd(0x7F);         //   Default => 0x40
   delay_ms(10);
   write_cmd(0xB2);         // Set Frame Frequency (Row Period)
   write_cmd(0x46);         //   Default => 0x25 (37 Display Clocks)
   delay_ms(10);
   write_cmd(0xB1);         // Phase 1 & 2 Period Adjustment
   write_cmd(0x22);         //   Default => 0x53 (5 Display Clocks [Phase 2] / 3 Display Clocks [Phase 1])
   delay_ms(10);
   write_cmd(0xBC);         // Set Pre-Charge Voltage Level
   write_cmd(0x10);         //   Default => 0x10 (Connect to VCOMH)
   delay_ms(10);
   write_cmd(0xB4);         // Set Pre-Charge Compensation Level
   write_cmd(0x07);         //   Default => 0x00 (No Compensation)
   write_cmd(0xB0);       // Set Pre-Charge Compensation Enable
   write_cmd(0x08|0x20);   //   Default => 0x08
   delay_ms(10);
   write_cmd(0xBE);         // Set Output Level High Voltage for COM Signal
   write_cmd(0x02);         //   Default => 0x1D (0.81*VREF)
   delay_ms(10);
   write_cmd(0xBF);         // Set Segment Low Voltage Level
   write_cmd(0x02|0x0C);   //   Default => 0x0E
   delay_ms(10);
   write_cmd(0xA4|0x00);   // Set Display Mode
   delay_ms(10);
   write_cmd(0xAE|0x01);   // Set Display On/Off
   delay_ms(10);
}

/* -------------------------------------------------- */
/* SSD1325 UPDATE-FUNCTION                            */
/* -------------------------------------------------- */
void ssd1325_update( void )
{
   unsigned int i;
   unsigned char* p;
   p = &buff[0];

   write_cmd(0x15);      // Set Column Address
   write_cmd(0);         //   Default => 0x00
   write_cmd(0x3F);      //   Default => 0x3F (Total Columns Devided by 2)
   write_cmd(0x75);      // Set Row Address
   write_cmd(0);         //   Default => 0x00
   write_cmd(0x3F);      //   Default => 0x4F

   for(i=0;i<128*32;i++)
   {
      write_data(*p++);
   }
}


UG_GUI   gui;

int main(void)
{

   //...
   //...
   
   /* OLED init */
   ssd1325_init();

   /* 碌GUI init */   
   UG_Init(&gui,ssd1325_pset,128,64);

   UG_FillScreen( C_BLACK );
   UG_DrawFrame( 0, 0, 127, 63, C_WHITE );
   
   ssd1325_update();
   
   while(1)
   {

   }
}   

这里有一个移植demo, poring 到esp32 问题不大。
http://embeddedlightning.com/forums/topic/pset-function-examples/

离线

#22 2018-06-19 18:43:49

19697805
会员
注册时间: 2018-06-19
累计积分: 75

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

谢谢分享

离线

#23 2018-07-31 22:33:16

abc3240660
会员
注册时间: 2018-07-31
累计积分: 100

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

看起来还不错啊

离线

#24 2018-11-07 17:50:04

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

QQ20181107174924.png

用模拟器试了一下,挺不错。

离线

#25 2018-11-07 21:21:18

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

QQ20181107211922.png

终于搞定 窗口 ugui 显示了.

离线

#26 2018-11-07 21:28:22

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

150120xfmld3mf0dlipd95.jpg

一个开源小型GUI移植到STM32F103上: http://bbs.21ic.com/blog-1849938-170836.html

默认支持3种 2D 硬件加速:

/* Supported drivers */
#define NUMBER_OF_DRIVERS                             3
#define DRIVER_DRAW_LINE                              0
#define DRIVER_FILL_FRAME                             1
#define DRIVER_FILL_AREA                              2

离线

#27 2018-11-07 22:00:48

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

通过函数 void UG_TouchUpdate( UG_S16 xp, UG_S16 yp, UG_U8 state ); 支持触摸屏, 但是不支持物理按键.

如果想用物理按键,要改代码了。

离线

#28 2018-11-07 22:11:25

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

https://github.com/AndresNavas/PSoC5_uGUI_Sample
https://github.com/AndresNavas/PSoC5_uGUI_Sample/blob/master/TFT_SSD1963/TFT_test.cydsn/main.c

Sample and Test project of uGUI library v.0.31 for a PSoC5-LP Kit using a SSD1963 Solomon LCD controller and XPT2046 Touch Controller.
Developed for CY8CKIT-050 PSoC5-LP Kit with a CY8C5868AXI-LP035 device using PSoC Creator 4.2


Folder with LCD Datasheets.
Folder with Picture and Video sample.
Folder with PSoC Creator Project (Inside Folder with Drivers and uGUI Library)

离线

#29 2018-11-08 12:02:13

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

QQ20181108120021.png

试了一下汉字。

离线

#30 2018-11-09 12:00:27

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

https://embeddedlightning.com/ugui/

我的待办事项列表中包含以下功能:

演示不同平台的文件
鼠标支持
触摸屏支持
窗口支持
对象
多层支持
支持硬件加速
Alpha通道支持
抗锯齿
中心字符串功能

目前还不支持鼠标, 只支持触摸屏(绝对坐标)

离线

#31 2018-11-09 14:45:42

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

QQ20181109144429.png

SDL模拟器运行.





QQ20181109144217.jpg

V3s linux 4.13 运行.



汉字参考这个帖子: https://whycan.cn/t_982.html

离线

#32 2018-11-09 17:04:31

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

触摸屏驱动加进去了.

离线

#33 2019-11-15 08:25:34

我思故我在
会员
注册时间: 2019-09-03
累计积分: 138

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

ugui 这个好, 看了一下代码确实简洁,资源占用少, 用在单片机不错。

离线

#34 2019-11-16 21:48:35

KeyMove
会员
注册时间: 2019-11-15
累计积分: 2

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

挺好用的,呈现的效果也不错
IMG_3603.jpg

离线

#35 2019-11-23 23:59:00

LinjieGuo
会员
注册时间: 2019-07-24
累计积分: 59

Re: 发现一个轻量级UI, 移植到 STM32/STM8 不错 ----- µGUI/uGUI

好东西

离线

页脚