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 (查看调试日志)
原理
让我们来了解一下沁恒-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);
}
代码
传送门: github->03SSD1306
审核编辑:汤梓红
-
微控制器
+关注
关注
48文章
7470浏览量
150956 -
嵌入式
+关注
关注
5064文章
18994浏览量
302601 -
开发板
+关注
关注
25文章
4921浏览量
97134 -
RTT
+关注
关注
0文章
65浏览量
17075 -
RT-Thread
+关注
关注
31文章
1266浏览量
39882
发布评论请先 登录
相关推荐
评论