[IDE] 【RISC-V MCU CH32V103测评】+u8glib

[复制链接]
 楼主| qjp1988113 发表于 2020-11-30 15:56 | 显示全部楼层 |阅读模式
本帖最后由 qjp1988113 于 2020-11-30 16:02 编辑

说起咱单片机用的gui,目前还是比较多的了。有面向小型的ZLGgui,u8glib,ugui等,面向中大型的UCGUI,emwin,TOUCHGFX,littlevGL,ThreadX GUI等。
今天我们移植的叫u8glib,现在已经有升级版本u8g2了。u8glib是一个优秀的比较实用于绘制单色屏的gui的库。它是一个用来处理用户显示接口的中间层。
例如,绘制线条/文本/其他元素——这个库都能做。玩ardunio的应该会更熟悉一点,因为它大量运用在ardunio上。我们今天就来把它移植到我们的GD32V103上面,
来驱动IIC接口的OLED。这样就离移植ardunio的游戏就更近一步了。
我们下载好u8glib u8glib.rar (213.95 KB, 下载次数: 19) ,将其复制到我们的工程目录下。这里我们要新建适用于我们当前平台的头文件及C文件:

u8_risc.h
  1. #ifndef _U8G_RISC_H
  2. #define _U8G_RISC_H


  3. #include "u8g.h"
  4. //定义缓存大小
  5. #define DATA_BUFFER_SIZE 1000
  6. //定义真正的OLED回调函数
  7. uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);

  8. #endif
u8_risc.c
  1. #include "u8g_risc.h"
  2. #include "debug.h"
  3. #include "oled.h"//要用到之前OLED的底层,所以包含

  4. uint8_t buffer[DATA_BUFFER_SIZE];
  5. static uint8_t control = 0;

  6. void u8g_Delay(uint16_t val)
  7. {

  8.     Delay_Us(val);
  9. }

  10. void u8g_MicroDelay(void)
  11. {
  12.   int i;
  13.   for (i = 0; i < 1000; i++);
  14. }

  15. void u8g_10MicroDelay(void)
  16. {
  17.         int i;
  18.         for (i = 0; i < 10000; i++);
  19. }


  20. uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
  21. {

  22.   //uint8_t *ptr ;

  23.   switch(msg)
  24.   {
  25.     case U8G_COM_MSG_STOP:
  26.       break;

  27.     case U8G_COM_MSG_INIT:
  28.       OLED_Init();
  29.       u8g_MicroDelay();
  30.       break;

  31.     case U8G_COM_MSG_ADDRESS:                     /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
  32.       u8g_10MicroDelay();
  33.       if (arg_val == 0)
  34.       {
  35.               control = 0;
  36.       }
  37.       else
  38.       {
  39.               control = 0x40;
  40.       }
  41.       u8g_10MicroDelay();
  42.      break;
  43.     case U8G_COM_MSG_RESET:
  44.       //没有RESET
  45.       //pin 9 is my reset pin
  46.       //GPIO_WriteBit(GPIOB, GPIO_Pin_9, arg_val);
  47.       u8g_10MicroDelay();
  48.       break;
  49.     case U8G_COM_MSG_WRITE_BYTE:
  50. {
  51.             OLED_WR_Byte(arg_val,control);//OLED单写
  52.     }
  53.             break;

  54.     case U8G_COM_MSG_WRITE_SEQ:
  55.     case U8G_COM_MSG_WRITE_SEQ_P:
  56. {
  57.                 OLED_WR_BUFF(arg_ptr,arg_val,control);//OLED多写
  58.     }

  59.       break;
  60.   }
  61.   return 1;
  62. }


添加进工程,在main函数里面调用:
  1. #include "u8g_risc.h"
   static u8g_t u8g;



void draw(void)
{
     u8g_SetFont(&u8g,u8g_font_profont10);//set current font
     u8g_DrawStr(&u8g, 2, 12, "Hello world!");//write string - you set coordinates and string
     u8g_SetFont(&u8g,u8g_font_profont10r);//set current font
     u8g_DrawStr(&u8g, 2, 24, "I LOVE 21IC!");//write string - you set coordinates and string
     u8g_DrawBox(&u8g, 10, 30, 25, 25);//draw some box
     u8g_DrawCircle(&u8g, 45+30, 45, 15, U8G_DRAW_ALL);
     u8g_DrawRFrame(&u8g,0,0,127,63,4);
}

int main(void)
{
    ...
    OLED_Init();
    OLED_ColorTurn(0);//0正常显示,1 反色显示
    OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示

     ...
    //U8GLIB
    u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_i2c, u8g_com_hw_i2c_fn);//红色标志的为之前写的回调函数
    ...
    while(1)
        u8g_FirstPage(&u8g);
        do
        {
            draw();
        } while ( u8g_NextPage(&u8g) );
        u8g_Delay(100);
    }
}



编译下载,查看屏幕输出:
ee.jpg
移植好U8glib,离移植游戏又进了一步。











hearstnorman323 发表于 2022-12-15 10:56 | 显示全部楼层
arduino可以实现对CH32V103开发吗?
albertaabbot 发表于 2022-12-15 11:05 | 显示全部楼层
u8glib的占用多大的空间?              
adolphcocker 发表于 2022-12-15 13:33 | 显示全部楼层
u8glib是否有汉字字库?              
lzbf 发表于 2022-12-15 15:43 | 显示全部楼层
u8glib不是arduino的库吗?
linfelix 发表于 2023-2-4 22:02 | 显示全部楼层
u8glib支持的吗?              
mickit 发表于 2023-2-4 22:11 | 显示全部楼层
这个u8glib不是c++的库吗?
adolphcocker 发表于 2023-2-4 22:49 | 显示全部楼层
u8glib是arduino的库吧。
nomomy 发表于 2023-2-7 20:00 | 显示全部楼层
如何实现iic和u8glib的接口?
uptown 发表于 2023-2-7 20:09 | 显示全部楼层
CH32V103开始支持arduino了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

111

主题

627

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部