自学内容网 自学内容网

【STM32 HAL库】OLED显示模块

前言

本文为笔者学习 OLED 的总结,基于keysking的视频内容,如有错误,欢迎指正

理论

OLED基本参数

分辨率
在这里插入图片描述
常见的oled显示模块的分辨率为128*64,即横向128个像素点,纵向64个像素点

OLED基本驱动原理

在这里插入图片描述

OLED坐标轴

在这里插入图片描述

应用

CubeMx配置

在这里插入图片描述

底层函数代码

OLED驱动的底层函数代码通常由厂商提供,只需理解并调用相应函数即可
在这里我贴一下我使用的OLED_SSD1306驱动
,由keysking提供

高层封装函数

printf显示函数

/**
 * @brief 类似printf函数,在 OLED 指定行和列处打印格式化的字符串
 *
 * @param line OLED 显示的行数(从 0行 开始),每行高度为 16 像素
 * @param column OLED 显示的列号(从 0列 开始),每列宽度为 8 像素
 * @param format 格式化字符串,必须加双引号,类似 `printf` 的入参格式。
 * @param ... 可变参数,用于替换 `format` 字符串中的占位符。
 *
 * @note 该函数使用 `vsprintf` 进行字符串格式化,`buffer` 大小为 128 字节。`OLED_PrintString` 函数将最终的字符串显示在 OLED 上,使用 16x16 的字体和常规显示模式。
 */
void OLED_printf(uint8_t line, uint8_t column, const char *format, ...)
{
    uint8_t x = column * 8; // 将列号转换为像素坐标
    uint8_t y = line * 16;  // 将行号转换为像素坐标
    char buffer[128];       // 用于存储格式化后的字符串
    va_list args;           // 定义可变参数列表

    // 初始化可变参数列表
    va_start(args, format);
    
    // 使用 vsprintf 将格式化后的内容写入 buffer
    vsprintf(buffer, format, args);

    // 结束可变参数处理
    va_end(args);

    // 将格式化后的字符串显示在 OLED 上
    OLED_PrintString(x, y, buffer, &font16x16, OLED_COLOR_NORMAL);
}

接下来补充说明一下可变参数

... 为可变参数,... 本身并不是一种特定的类型,而是表示参数列表的可变性。允许在运行时接收任意数量和类型的参数,具体类型由传入的参数决定。
... 可接收任意数量和类型的参数,但参数与参数直接需用 , 分隔。
定义 argsva_list 类型(可变参数列表),用于存储任意数量和类型的可变参数。
va_start(args,format); 将可变参数列表 args 的开始索引指向 format 参数的下一位(下一位就是 ... 可变参数的原因与函数调用约定和栈布局有关,不用深究。
va_start(args, format); 初始化 args,将列表开始索引指向 format 参数的下一位,(表示这后续的参数都是 args
vsprintf(buffer, format, args); 先扫描 format 字符串并读取其占位符—>再读取 args 中的可变参数并填入占位符—>最后将格式化后的结果写入 buffer 字符串。
va_end(args); 用于结束可变参数处理,释放资源。为保证代码的可移植性和规范性,处理完可变参数后应调用。


原文地址:https://blog.csdn.net/AbaAbaxxx_/article/details/142313676

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!