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