【沁恒-CH32V208-开发板免费试用】RTT 基于SSD1306显示的一些例子

描述

title: 【沁恒-CH32V208-开发板免费试用】RTT 基于SSD1306显示的一些例子
date: 2023-05-24 19:41:52
tags: [嵌入式,rt-thread移植]

概述

沁恒-CH32V208是一款基于risc-v内核的微控制器,支持RT-thread实时操作系统。本文将介绍如何使用SSD1306显示屏和U8G2库在RT-thread上进行开发,并提供一些示例代码。通过本文的介绍,读者可以了解如何在沁恒-CH32V208上使用SSD1306显示屏和U8G2库进行图形化界面开发,以及如何绘制矩形、圆形、位图等图形元素,以及如何滚动显示内容等。这些功能可以帮助开发者快速构建出具有良好用户体验的应用程序。大家若有兴趣可以继续深入研究哈。

环境/工具

需要借助一些软件和硬件相结合,做出项目.

软件

  • Windows10 (其他平台没测试)
  • VScode
  • make (针对makefile编译)
  • risc-v 8.2.0 工具箱 (github有提供riscv-none-embed-XXX压缩包)
  • WCHISPTOOLS (沁恒自带烧录工具)
  • SERIAL DEBUG (查看调试日志)

RTT

原理

让我们来了解一下沁恒-CH32V208上使用SSD1306显示屏和U8G2库进行开发的原理。

首先,SSD1306是一款128x32像素的OLED显示屏,具有高亮度、高对比度、低功耗等特点。在沁恒-CH32V208上使用SSD1306显示屏需要通过I2C总线进行通信,并使用U8G2库进行驱动。

U8G2库是一款轻量级的图形化界面库,支持多种显示屏类型和控制器,包括SSD1306、SH1106、ST7920等。在使用U8G2库时,需要根据显示屏类型和控制器类型选择相应的初始化函数,并设置相关参数,如I2C地址、SPI模式等。

在使用U8G2库绘制图形时,可以使用U8G2库提供的API函数,如u8g2_DrawFrame()函数绘制矩形、u8g2_DrawCircle()函数绘制圆形、u8g2_DrawXBM()函数显示位图等。同时,U8G2库还支持滚动显示、反转显示、旋转显示等功能,可以根据实际需求进行设置。

通过以上原理介绍,可以了解到在沁恒-CH32V208上使用SSD1306显示屏和U8G2库进行开发的基本原理和流程。

感谢 wuhanstudio 提供 rt-u8g2 开源库

测试

基于github->01LED上复制到03SSD1306文件夹下,并新增一些内容,如下:

在同一个文件夹下新建文件,命名为rt-u8g2/rt-u8g2.mk

PACKAGE_NAME := rt-u8g2
CPPPATHS +=	-I$(APP_ROOT)/$(PACKAGE_NAME)/port
CPPPATHS +=	-I$(APP_ROOT)/$(PACKAGE_NAME)/src
CPPPATHS +=	-I$(APP_ROOT)/$(PACKAGE_NAME)
C_FILES += $(wildcard $(APP_ROOT)/$(PACKAGE_NAME)/src/*.c)
C_FILES += $(wildcard $(APP_ROOT)/$(PACKAGE_NAME)/port/*.c)
# 对应你的ssd1306型号
# C_FILES += $(APP_ROOT)/$(PACKAGE_NAME)/examples/ssd1306_12832_sw_i2c_example.c
# C_FILES += $(APP_ROOT)/$(PACKAGE_NAME)/examples/ssd1306_12864_hw_i2c_example.c
# C_FILES += $(APP_ROOT)/$(PACKAGE_NAME)/examples/ssd1306_12864_sw_i2c_example.c

在同一个文件夹下打开src.mk,并追加几行,

include rt-u8g2/rt-u8g2.mk
# include rt_ili9341/rt_ili9341.mk
# include ssd1306/ssd1306.mk

然后我选择模拟i2c,所以选择ssd1306_12832_sw_i2c_example.c

#define OLED_I2C_PIN_SCL rt_pin_get("PC.0")
#define OLED_I2C_PIN_SDA rt_pin_get("PC.1")

int main(void)
{
    rt_pin_mode(LED0, PIN_MODE_OUTPUT);
    rt_kprintf("MCU-CH32V208WBU6\\\\r\\\\n");

    u8g2_t u8g2;

    // Initialization
    u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, u8x8_rt_gpio_and_delay);
    u8x8_SetPin(u8g2_GetU8x8(&u8g2), U8X8_PIN_I2C_CLOCK, OLED_I2C_PIN_SCL);
    u8x8_SetPin(u8g2_GetU8x8(&u8g2), U8X8_PIN_I2C_DATA, OLED_I2C_PIN_SDA);

    u8g2_InitDisplay(&u8g2);
    u8g2_SetPowerSave(&u8g2, 0);
    int i = 10;
    char *ch1 = rt_malloc(20);
    char *ch2 = rt_malloc(30);
    ch1 = "Hello, rx-ted,";

    while (i -= 1)
    {

        u8g2_ClearBuffer(&u8g2);
        u8g2_SetFont(&u8g2, u8g2_font_ncenB08_tr);
        rt_sprintf(ch2, "%s%d\\\\n", ch1, i);
        rt_kprintf(ch2);
        u8g2_DrawStr(&u8g2, 1, 10, ch2);
        u8g2_SendBuffer(&u8g2);
        rt_thread_mdelay(1000);
        // u8g2_ClearDisplay(&u8g2);
        u8g2_DrawCircle(&u8g2, 118, 20, 5, U8G2_DRAW_ALL);
        
        u8g2_SendBuffer(&u8g2);
        rt_free(ch2);

        rt_thread_mdelay(1000);
    }

RTT

代码

传送门: github->03SSD1306
  

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分