没志青年
发布于 2026-01-05 / 18 阅读
0

u8g2 单色屏库

STM32使用u8g2

STM32移植u8g2

1、下载:https://github.com/olikraus/u8g2

2、只保留 csrc 目录,将 u8x8_d_ 开头的文件删除,只保留 ssd1306_128x64_noname.c,然后添加到Keil项目中

3、修改 u8x8_setup.c

如果是 i2c,只保留

如果是 spi,只保留

函数最后的数字或字母,代表显示时的buf大小:

  • 1:128字节

  • 2:256字节

  • f1024字节

裸机代码示例

RT-Thread + u8g2 示例

在 RT-Thread 上使用单色屏 UI 库 - U8G2_rthread u8g2-CSDN博客

注意配置好时钟

#define BSP_USING_I2C1
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN    GET_PIN(B, 6)
#define BSP_I2C1_SDA_PIN    GET_PIN(B, 7)
#endif
void I2C1_GPIO_INIT(void)
{
    __HAL_RCC_GPIOB_CLK_ENABLE();
​
    GPIO_InitTypeDef gpio_initstruct;
​
    // 初始化SCL
    gpio_initstruct.Pin = GPIO_PIN_6;
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_OD;
    gpio_initstruct.Pull = GPIO_PULLUP;
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);
​
    // 初始化SDA
    gpio_initstruct.Pin = GPIO_PIN_7;
    HAL_GPIO_Init(GPIOB, &gpio_initstruct);
}
​

在shell工具中输入u8g2_ssd1306_12864_sw_i2c_example 然后回车就可以看见了

FreeRTOS + u8g2 示例

GD32使用u8g2

gd32移植u8g2

基于STM32移植U8g2图形库——OLED显示(HAL库)_stm32 u8g2-CSDN博客

STM32的使用:u8g2_u8g2库-CSDN博客

指令

初始化

u8g2_t u8g2;        //显示器初始化结构体
u8g2Init(&u8g2);    //初始化函数

开/关显示

u8g2_SetPowerSave(&u8g2,0);

清屏

u8g2_ClearDisplay(); 

清除缓冲区(帧数据)

u8g2.clearBuffer();

写入缓冲区

u8g2_SendBuffer(); 

发送指令

u8g2_SendF("c", 0x0a7);

设置

配置设置

u8g2.enableUTF8Print(); //设置启用UTF-8支持 u8g2.disableUTF8Print(); //设置停用UTF-8支持 u8g2_SetContrast(); //设置显示屏亮度/对比度(0-255) u8g2_SetBusClock(); //设置连接速度(IIC:200000-400000/SPI:1000000-8000000),在begin()之前调用

设置字体

u8g2_SetFontMode(0);    //定义字体背景模式,仅u8g2_xxx_tX字体支持,默认0,禁用透明
u8g2_SetFontDirection(0); //旋转当前显示 参数:0/1/2/3
u8g2_SetFont(u8g2_font_unifont_t_chinese2);    //设置字体
u8g2_SetFontPosCenter();    //设置字体基线Center/Baseline/Bottom/Top

设置颜色

u8g2_SetDrawColor(1); //设置颜色,0透显,1实显,2XOR (drawCircle,drawDisc,drawEllipse和drawFilledEllipse不支持XOR模式)

绘制

绘制文本

u8g2_DrawStr(x, y, "文本"); // 绘制文本字符,不能绘制编码大于或等于256,绘制文本前需定义字体.y轴向上绘制
u8g2_DrawUTF8(x, y,"字符");    // 绘制一个编码为UTF-8的字符串.注意1.编译器支持2.代码编辑器支持
u8g2_DrawGlyph(x, y, HEX);    // 绘制特殊文本图标(需联合特殊字体)
u8g2.print();    // 打印文本字符(需要联合光标位置setCursor,setFont)支持变量和F()
​

绘制点

u8g2_DrawPixel(x, y); // 在xy位置绘制一个像素. 

绘制线条

u8g2_DrawHLine(x, y, w); // 绘制水平线 w长度
u8g2_DrawVLine(x, y, h);    // 绘制垂直线 h高度
u8g2_DrawLine(x1, y1, x2, y2);    // 画自由线 x1y1点1 x2y2点2

绘制矩形

u8g2_DrawBox(x, y, w, h); // 画填充矩形w,h,宽度,高度 2 u8g2_DrawFrame(x, y, w, h); // 画空心矩形w,h,宽度,高度

绘制圆/椭圆

 u8g2_DrawCircle(圆心x, 圆心y, 半径rad, 部分位置U8G2_DRAW_ALL);    // 画空心圆 rad半径 直径为 2rad+1
u8g2_DrawEllipse(圆心x, 圆心y, 椭圆长度x, 椭圆宽度y, 部分位置U8G2_DRAW_ALL)    //画空心椭圆 长度和宽度均为整个圆的1/2
U8G2_DRAW_ALL    /*替换参数: 
 U8G2_DRAW_ALL 全部
U8G2_DRAW_UPPER_RIGHT 上右
U8G2_DRAW_UPPER_LEFT 上左
U8G2_DRAW_LOWER_RIGHT 下右
U8G2_DRAW_LOWER_LEFT 下左*/

绘制多边形

 u8g2_DrawTriangle(x1,y1,x2,y2,x3,y3); //三个点的坐标,实心

绘制位图

u8g2_DrawXBM( x, y, w, h, bits);    //bits是位图资源表,setBitmapMode(1)切换为旧模式

组件

按键

u8g2.userInterfaceInputValue("标题","提示文本",值,最低值,最高值,值的位数,"文本")    //按键消息菜单
u8g2.userInterfaceMessage("Title1", "Title2", "Title3", " Ok \n Cancel ");    //按键确认菜单
u8g2.userInterfaceSelectionList("Title", 默认选择项, "Select1\Select2\Select3");    //按键选择菜单
​

其它API

u8g2.getBufferSize ();   //返回页面缓冲区的大小,等于8*u8g2.getBufferTileHeight*u8g2.getBufferTileWidth
u8g2_SetBufferPtr(buf);    //指向内部页面缓冲区开始位的指针