地方网站商城怎么做,大丰城乡建设局网站,小程序开发注意事项,常德农科院网站【STM32 HAL库】OLED显示模块 前言理论OLED基本参数OLED基本驱动原理OLED坐标轴 应用CubeMx配置底层函数代码高层封装函数printf显示函数 前言
本文为笔者学习 OLED 的总结#xff0c;基于keysking的视频内容#xff0c;如有错误#xff0c;欢迎指正
理论
OLED基本参数
… 【STM32 HAL库】OLED显示模块 前言理论OLED基本参数OLED基本驱动原理OLED坐标轴 应用CubeMx配置底层函数代码高层封装函数printf显示函数 前言
本文为笔者学习 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 将格式化后的内容写入 buffervsprintf(buffer, format, args);// 结束可变参数处理va_end(args);// 将格式化后的字符串显示在 OLED 上OLED_PrintString(x, y, buffer, font16x16, OLED_COLOR_NORMAL);
}接下来补充说明一下可变参数 ... 为可变参数... 本身并不是一种特定的类型而是表示参数列表的可变性。允许在运行时接收任意数量和类型的参数具体类型由传入的参数决定。 ... 可接收任意数量和类型的参数但参数与参数直接需用 , 分隔。 定义 args 为 va_list 类型(可变参数列表)用于存储任意数量和类型的可变参数。 va_start(args,format); 将可变参数列表 args 的开始索引指向 format 参数的下一位(下一位就是 ... 可变参数的原因与函数调用约定和栈布局有关不用深究。 va_start(args, format); 初始化 args将列表开始索引指向 format 参数的下一位表示这后续的参数都是 args。 vsprintf(buffer, format, args); 先扫描 format 字符串并读取其占位符—再读取 args 中的可变参数并填入占位符—最后将格式化后的结果写入 buffer 字符串。 va_end(args); 用于结束可变参数处理释放资源。为保证代码的可移植性和规范性处理完可变参数后应调用。