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库进行图形化界面开发,以及如何绘制矩形、圆形、位图等图形元素,以及如何滚动显示内容等。这些功能可以帮助开发者快速构建出具有良好用户体验的应用程序。大家若有兴趣可以继续深入研究哈。
需要借助一些软件和硬件相结合,做出项目.
让我们来了解一下沁恒-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
更多回帖