title: 【沁恒-CH32V208-開發(fā)板免費試用】RTT 基于SSD1306顯示的一些例子
date: 2023-05-24 19:41:52
tags: [嵌入式,rt-thread移植]
概述
沁恒-CH32V208是一款基于risc-v內(nèi)核的微控制器,支持RT-thread實時操作系統(tǒng)。本文將介紹如何使用SSD1306顯示屏和U8G2庫在RT-thread上進(jìn)行開發(fā),并提供一些示例代碼。通過本文的介紹,讀者可以了解如何在沁恒-CH32V208上使用SSD1306顯示屏和U8G2庫進(jìn)行圖形化界面開發(fā),以及如何繪制矩形、圓形、位圖等圖形元素,以及如何滾動顯示內(nèi)容等。這些功能可以幫助開發(fā)者快速構(gòu)建出具有良好用戶體驗的應(yīng)用程序。大家若有興趣可以繼續(xù)深入研究哈。
環(huán)境/工具
需要借助一些軟件和硬件相結(jié)合,做出項目.
軟件
- Windows10 (其他平臺沒測試)
- VScode
- make (針對makefile編譯)
- risc-v 8.2.0 工具箱 (github有提供riscv-none-embed-XXX壓縮包)
- WCHISPTOOLS (沁恒自帶燒錄工具)
- SERIAL DEBUG (查看調(diào)試日志)
原理
讓我們來了解一下沁恒-CH32V208上使用SSD1306顯示屏和U8G2庫進(jìn)行開發(fā)的原理。
首先,SSD1306是一款128x32像素的OLED顯示屏,具有高亮度、高對比度、低功耗等特點。在沁恒-CH32V208上使用SSD1306顯示屏需要通過I2C總線進(jìn)行通信,并使用U8G2庫進(jìn)行驅(qū)動。
U8G2庫是一款輕量級的圖形化界面庫,支持多種顯示屏類型和控制器,包括SSD1306、SH1106、ST7920等。在使用U8G2庫時,需要根據(jù)顯示屏類型和控制器類型選擇相應(yīng)的初始化函數(shù),并設(shè)置相關(guān)參數(shù),如I2C地址、SPI模式等。
在使用U8G2庫繪制圖形時,可以使用U8G2庫提供的API函數(shù),如u8g2_DrawFrame()函數(shù)繪制矩形、u8g2_DrawCircle()函數(shù)繪制圓形、u8g2_DrawXBM()函數(shù)顯示位圖等。同時,U8G2庫還支持滾動顯示、反轉(zhuǎn)顯示、旋轉(zhuǎn)顯示等功能,可以根據(jù)實際需求進(jìn)行設(shè)置。
通過以上原理介紹,可以了解到在沁恒-CH32V208上使用SSD1306顯示屏和U8G2庫進(jìn)行開發(fā)的基本原理和流程。
感謝 wuhanstudio 提供 rt-u8g2 開源庫
測試
基于github->01LED上復(fù)制到03SSD1306文件夾下,并新增一些內(nèi)容,如下:
在同一個文件夾下新建文件,命名為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)
# 對應(yīng)你的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
審核編輯:湯梓紅
-
微控制器
+關(guān)注
關(guān)注
48文章
7596瀏覽量
151748 -
嵌入式
+關(guān)注
關(guān)注
5088文章
19158瀏覽量
306483 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5096瀏覽量
97825 -
RTT
+關(guān)注
關(guān)注
0文章
65瀏覽量
17172 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1301瀏覽量
40267
發(fā)布評論請先 登錄
相關(guān)推薦
評論