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文章
7490瀏覽量
151062 -
嵌入式
+關注
關注
5069文章
19021瀏覽量
303406 -
開發板
+關注
關注
25文章
4949瀏覽量
97207 -
RTT
+關注
關注
0文章
65瀏覽量
17088 -
RT-Thread
+關注
關注
31文章
1273瀏覽量
39928
發布評論請先 登錄
相關推薦
評論