【STM32 HAL库】OLED显示模块

news2024/9/20 0:48:10

【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 将格式化后的内容写入 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); 用于结束可变参数处理,释放资源。为保证代码的可移植性和规范性,处理完可变参数后应调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于224G的超高速以太网端口1.6Tbps 1600G真的来了~

基于224G PAM4 SerDes的1.6T(更激进些的是3.2T) 受AI智能算中心的驱动,基于4x112G的400G光模块,和基于8x112G的800G的光模块已经很成熟了,标志就是大家都在降本增效,考虑干掉功耗的DSP,...另外一个标志就是…

关于支持向量机的一份介绍

在这篇文章中,我将介绍与支持向量机有关的东西,我们知道支持向量机主要分两类,就是线性支持向量机和核支持向量机这两种(当然还有其他的,如多类支持向量机、 Nu-Support Vector Regression等),因…

AIGC生图基础知识

一、引言 AIGC,即AI-Generated Content,是一种利用大型预训练模型如生成对抗网络(GAN)、扩散网络(Diffusion)和语言大模型(Transformer)等人工智能技术,通过对大量数据进…

Gradio 自定义组件

如何使用 Gradio 自定义组件,Gradio 前端使用 Svelte,后端使用的 Python。如何自定义一个组件呢?Gadio 提供了类似于脚手架的命令,可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令,gradio 会自动生成…

OBC充电机测试的步骤和规范

一、测试前准备 1. 确认测试环境:确保测试环境的温度、湿度等条件符合设备的工作要求。 2. 检查设备:检查OBC充电机是否完好无损,电源线、插头等是否连接良好,显示屏是否正常显示。 3. 准备工具:准备好电压表、电流…

ubuntu20.04安装cudnn

先登入账号 网址:https://developer.nvidia.com/cudnn 选择ubuntu20.04 x86_64(Deb) 在下载好文件的文件夹下打开终端 sudo apt-get install zlib1gsudo dpkg -i cudnn-local-repo-${distro}-8.x.x.x_1.0-1_amd64.debsudo cp /var/cudnn-lo…

大数据时代:历史、发展与未来

文章目录 引言1980年:大数据的先声2006年:云计算与大数据的诞生2008年:大数据的科学探索2009年:大数据成为行业热词2011年:大数据的商业价值2013年:世界大数据元年结语 引言 在信息技术飞速发展的今天&…

钢铁焦化水泥超低排的原因

钢铁、焦化和水泥行业实施超低排放的原因,朗观视觉小编建议大家可以从环境保护、产业升级、政策推动以及企业可持续发展等多个方面进行分析。 一、环境保护需求 空气质量改善:钢铁、焦化和水泥行业是传统的高污染行业,其排放的颗粒物、二氧化…

表格HTML

//test.html <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>表格与CSS分开示例</tit…

【STL】string 基础,应用与操作

string 1.string相关介绍 STL&#xff08;标准模板库&#xff09;中的string容器是C标准库提供的用于处理和操作字符串的类&#xff0c;位于头文件中。std::string提供了比传统的C风格字符串&#xff08;字符数组&#xff09;更方便和安全的功能&#xff0c;具有动态内存管理…

python脚本编译为.so速度对比

有两个好处&#xff1a; 产品代码保护&#xff0c;so文件不可读 计算能力加速&#xff0c;本质上编译过程为python -> c -> so文件&#xff0c;相当于动态语言转换为静态语言&#xff0c;程序执行能力和计算能力有所提升 编译为so文件后比原始python代码执行时间快2ms左…

VISIA 皮肤检测

费用:自费158元 不能医保报销 先清洁肌肤,然后做一个皮肤检测. 1200万像素高清摄像头,一个白光,一个偏正光,还有一个紫外光,三种模式,分析面部情况. 8张图 反应皮肤情况应用: 在医美前和医美一次修复完成后,皮肤情况对比. 数值越高 越好 斑点图: 皱纹图: 分数比较低的话,皮肤…

【计算机基础题目】二叉树的前序中序后续遍历之间相互转换 详细例子

创作日志&#xff1a; 笔试题目&#xff0c;掌握了技巧之后这道题就是 so easy~ 一、 1、已知二叉树的 前序和中序&#xff0c;可以求出后序 2、已知二叉树的 中序和后序&#xff0c;可以求出前序 3、已知二叉树的 前序和后序&#xff0c;无法求出唯一的中序 二、求法 求法是…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Dockge介绍2.1 Dockge简介2.2 Dockge功能…

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …

添可2024新品发布会,让智能家电成为“美好家”的具象表达

9月19日&#xff0c;添可以“万物新生&#xff0c;智领美好家”为主题&#xff0c;于上海浦东美术馆举办2024年度新品发布会。 会上&#xff0c;添可凭借对智能家电与家居设计领域的深刻洞察&#xff0c;全新发布了芙万Art Station智能洗地机、芙万Artist洗地机、饮万水纪元净…

《拿下奇怪的前端报错》:npm install卡住了一个钟- 从原理搞定安装的全链路问题

相信前端的小伙伴稍微入行一段时间的&#xff0c;接触过不同的项目&#xff0c;就可能遇到过npm install卡住的情况&#xff0c;下面我就来分析下几种场景、定位的方法和解决办法。不再只是删除node_modules然后重来了&#xff0c;虽然它能解决80%的问题 1 npm install 的原理…

Vue 常用高级指令解析

Vue 高级指令的重要性 Vue 高级指令是一种扩展 Vue.js 框架的功能的方式&#xff0c;可以让你在处理 DOM 元素时具有更多的控制权。它们可以通过自定义指令的方式进行编写和应用。 高级指令的重要性在于&#xff0c;它们使开发者能够通过 Vue 框架来创建更加复杂和灵活的交互…

数据库函数

1.字符串函数 例子&#xff1a; 2.数值函数 例子&#xff1a; 3.日期函数 例子&#xff1a; 4.流程函数 例子&#xff1a; 参考视频&#xff1a;27. 基础-函数-字符串函数_哔哩哔哩_bilibili

FinGPT金融大模型

FinGPT仓库https://github.com/AI4Finance-Foundation/FinGPT 功能&#xff1a; Adviser。根据新闻判断市场情绪&#xff08;积极、消极、中性&#xff09;&#xff0c;给出投资建议。Quantitative Trading。定制属于自己的金融助手。叫它关注某几个股票、监测消息等。可以直…