打印
[IDE]

【RISC-V MCU CH32V103测评】+u8glib

[复制链接]
1575|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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) ,将其复制到我们的工程目录下。这里我们要新建适用于我们当前平台的头文件及C文件:

u8_risc.h
 #ifndef _U8G_RISC_H
#define _U8G_RISC_H


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

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

uint8_t buffer[DATA_BUFFER_SIZE];
static uint8_t control = 0;

void u8g_Delay(uint16_t val)
{

    Delay_Us(val);
}

void u8g_MicroDelay(void)
{
  int i;
  for (i = 0; i < 1000; i++);
}

void u8g_10MicroDelay(void)
{
        int i;
        for (i = 0; i < 10000; i++);
}


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

  //uint8_t *ptr ;

  switch(msg)
  {
    case U8G_COM_MSG_STOP:
      break;

    case U8G_COM_MSG_INIT:
      OLED_Init();
      u8g_MicroDelay();
      break;

    case U8G_COM_MSG_ADDRESS:                     /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
      u8g_10MicroDelay();
      if (arg_val == 0)
      {
              control = 0;
      }
      else
      {
              control = 0x40;
      }
      u8g_10MicroDelay();
     break;
    case U8G_COM_MSG_RESET:
      //没有RESET
      //pin 9 is my reset pin
      //GPIO_WriteBit(GPIOB, GPIO_Pin_9, arg_val);
      u8g_10MicroDelay();
      break;
    case U8G_COM_MSG_WRITE_BYTE:
{
            OLED_WR_Byte(arg_val,control);//OLED单写
    }
            break;

    case U8G_COM_MSG_WRITE_SEQ:
    case U8G_COM_MSG_WRITE_SEQ_P:
{
                OLED_WR_BUFF(arg_ptr,arg_val,control);//OLED多写
    }

      break;
  }
  return 1;
}


添加进工程,在main函数里面调用:
#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);
    }
}



编译下载,查看屏幕输出:

移植好U8glib,离移植游戏又进了一步。











使用特权

评论回复

相关帖子

沙发
hearstnorman323| | 2022-12-15 10:56 | 只看该作者
arduino可以实现对CH32V103开发吗?

使用特权

评论回复
板凳
albertaabbot| | 2022-12-15 11:05 | 只看该作者
u8glib的占用多大的空间?              

使用特权

评论回复
地板
adolphcocker| | 2022-12-15 13:33 | 只看该作者
u8glib是否有汉字字库?              

使用特权

评论回复
5
lzbf| | 2022-12-15 15:43 | 只看该作者
u8glib不是arduino的库吗?

使用特权

评论回复
6
linfelix| | 2023-2-4 22:02 | 只看该作者
u8glib支持的吗?              

使用特权

评论回复
7
mickit| | 2023-2-4 22:11 | 只看该作者
这个u8glib不是c++的库吗?

使用特权

评论回复
8
adolphcocker| | 2023-2-4 22:49 | 只看该作者
u8glib是arduino的库吧。

使用特权

评论回复
9
nomomy| | 2023-2-7 20:00 | 只看该作者
如何实现iic和u8glib的接口?

使用特权

评论回复
10
uptown| | 2023-2-7 20:09 | 只看该作者
CH32V103开始支持arduino了吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝