OLED 驱动模块程序代码
1、前言
作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数。
本文介绍的是 OLED, 常见代表有 0.96 寸的OLED,网上也有很多相关的驱动代码,但是大部分代码都是能用即可,不是特别关注驱动代码的整体架构,以下是个人整理的 OLED 驱动代码,支持配置 SPI 和 IIC 两种接口方式(目前只是测试了 SPI,IIC 有待验证)。
2、介绍
基于 stm32 的 0.96寸 OLED 驱动架构模块代码,代码主要特点是:
- 底层接口配置方便(SPI 和 IIC 可选)
- 字体大小等配置采用表驱动模式,添加/修改/删除方便快捷,支持中英文混合输入显示 (中文编码 GB2312)
- 支持浮点型数据显示
- OLED 采用双缓冲机制,实现 OLED 的画面操作和显示功能分离,降低画面操作相关函数的耗时
- 仿照函数 printf,实现格式化输出,支持窗口 printf 功能(支持回车换行操作),实现滚动式输出(窗口大小、字体可配置)
- 代码注释丰富,风格统一,便于阅读和使用
- ...
3、代码功能
源文件部分代码如下:
/** 字体大小配置表 */
static LCD_FontCfgType sg_tFontCfgTable[FONT_MAX_NUM] =
{
{12, 12, ASCII_6X12_DATA, FONT_12X12_IDX, FONT_12X12_DATA},
{16, 16, ASCII_8X16_DATA, FONT_16X16_IDX, FONT_16X16_DATA},
{24, 24, ASCII_12X24_DATA, FONT_24X24_IDX, FONT_24X24_DATA},
{32, 32, ASCII_16X32_DATA, FONT_32X32_IDX, FONT_32X32_DATA},
};
头文件部分代码如下:
/* OLED 初始化函数 ****************************************************************************************************/
extern void OLED_Init(void);
/* OLED 控制函数 ******************************************************************************************************/
extern void OLED_DisplayOn(void);
extern void OLED_DisplayOff(void);
/* 画点/读点函数 ******************************************************************************************************/
extern void OLED_DrawPoint(oledsize_t x, oledsize_t y, eOledcolor color);
extern void OLED_DrawRoughPoint(oledsize_t x, oledsize_t y, eOledcolor color, uint8_t size);
extern eOledcolor OLED_ReadPoint(oledsize_t x, oledsize_t y);
/* OLED 清屏函数 ******************************************************************************************************/
extern void OLED_Clear(uint8_t color);
extern void OLED_SetFill(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, eOledcolor color);
/* 画面操作函数 *******************************************************************************************************/
extern void OLED_SyncScreen(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high);
extern void OLED_ShowTask(void);
extern void OLED_SetScreenOffset(oledsize_t x, oledsize_t y, oledsize_t width, oledsize_t high, uint8_t dir, uint8_t pixels);
/* 画图形函数 *********************************************************************************************************/
extern void OLED_DrawLine(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, uint8_t size);
extern void OLED_DrawRectangle(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, uint8_t size);
extern void OLED_DrawCircle(oledsize_t x, oledsize_t y, oledsize_t radius, uint8_t size);
/* 设置文本/数字函数 **************************************************************************************************/
extern void OLED_SetColor(eOledcolor backColor, eOledcolor pointColor);
extern void OLED_SetText(oledsize_t x, oledsize_t y, const char *pszStr, uint8_t isMultiLine, efontSize size);
extern void OLED_SetIntegerNum(oledsize_t x, oledsize_t y, int32_t num, uint8_t len, uint8_t zero, efontSize size);
extern void OLED_SetFloatNum(oledsize_t x, oledsize_t y, float num, uint8_t intLen, uint8_t decLen, uint8_t zero, efontSize size);
/* 格式化输出函数 *****************************************************************************************************/
extern void OLED_XYPrintf(oledsize_t x, oledsize_t y, uint8_t isMultiLine, efontSize size, const char *format, ...);
extern void OLED_Printf(const char *format, ...);
4、示例代码显示效果
其中 printf 输出采用了右侧半个屏幕进行刷新,滚动式打印内容

5、示例代码获取链接
下载链接点击: OLED 示例驱动代码
OLED 驱动模块程序代码的更多相关文章
- 程序代码中退出函数exit()与返回函数return ()的区别
程序代码中退出函数exit()与返回函数return ()的区别 exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数 ...
- Android入门(四):链接接口组件和程序代码
编写好layout中的接口组件之后,下一步就是编写控制接口组件的程序代码.上一章,我们使用了三种接口组件,在使用者输入性别和年龄之后点击“健康建议按钮”,程序会读取用户所填入的性别和年龄,然后显示判断 ...
- WinPipe后门程序代码示例(仅限技术交流)
具体怎么编译,生成执行程序,不懂得先学习C++程序代码编译和集成开发环境. 多的不说了,只有两个代码文件,一个头文件,一个源文件.不多说了,直接上干货. (恶意使用,或者商用,后果自负,与本人无关.) ...
- Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...
- 每周一书-编写高质量代码:改善C程序代码的125个建议
首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...
- 使用sencha cmd 一键生成你的应用程序代码
一键生成你的应用程序代码: ------------------------------------------------------------ 我们的出发点就是使用命令来产生一个应用程序,执行以 ...
- 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)
PMD是一款采用BSD协议发布的Java程序代码检查工具.该工具可以做到检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是Java程序员 ...
- 如何快速读懂大型C++程序代码
要搞清楚别人的代码,首先,你要了解代码涉及的领域知识,这是最重要的,不懂领域知识,只看代码本身,不可能搞的明白.其次,你得找各种文档:需求文档(要做什么),设计文档(怎么做的),先搞清楚你即将要阅读是 ...
- 去除C/C++程序代码中的注释
最近搞软件著作权,去除代码空行和注释比较麻烦,想写个程序自动去除,去网上搜了下,发现有类似的程序,不过只有去除注释.鉴于word中可以去除空行(用^p^p替换^p),先用网上的代码,以后有时间写个完整 ...
- 存储过程系列之存储过程sql数据库调用和程序代码调用
1.存储过程,无参数的存储过程 创建无参数存储存储过程 Create Procedure DCEMREMR_TEMPLATEAs SELECT TOP 10 [FILENAME],[FILETITLE ...
随机推荐
- 图扑虚拟现实解决方案,实现 VR 数智机房
前言 如今,虚拟现实技术作为连接虚拟世界和现实世界的桥梁,正加速各领域应用形成新场景.新模式.新业态. 效果展示 图扑软件基于自研可视化引擎 HT for Web 搭建的 VR 数据中心机房,是将数据 ...
- 活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
7月29日"阿里云 Serverless 技术实战与创新"成都站圆满落幕.活动受众以关注 Serverless 技术的开发者.企业决策人.云原生领域创业者为主,活动形式为演讲.动手 ...
- 7、SpringBoot-mybatis-plus引入
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- <vue 路由 6、动态路由-方法传递参数>
一.query效果 点击query按钮 二.param效果 点击param按钮 注意点 1:重新刷新浏览器后,参数都不在了. 2:url中能看不到传递的参数 3.分别用{{$route. params ...
- 设备共享分配:虚拟化和 SRIOV
SRIOV 简介 OpenStack 自 Juno 版本开始引入 SRIOV,SRIOV(Single Root I/O Virtualization) 是将 PCIe(PCI) 设备虚拟化成虚拟 P ...
- RLHF · PbRL | QPA:选择 near on-policy query,加速 policy learning 收敛速度
论文题目:Query-Policy Misalignment in Preference-Based Reinforcement Learning,ICLR 2023 Spotlight(8 6 6) ...
- linux route 命令
route 管理路由表 要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是为了解决以下问题:该Linux ...
- 笔记本也能飞:运行chat大模型
背景 在过去的一年,ChatGPT的崛起彻底改变了我们与AI的交互方式.它不再是被动的信息提供者,而是成为了一个可以与我们自由交流.分享知识的伙伴.无论是生活中的琐事,还是工作中的难题,ChatGPT ...
- CDC设计实例-01
CDC设计实例 Clock Gating Cell & Glitch Free Clock Switch(门控单元和动态切换时钟) 一个电路有多个时钟输入进来,希望在工作当中能够动态切换时钟; ...
- [转帖]Oracle 19c 新特性|增加 VARCHAR2 数据类型的大小限制
JiekeXuAll China Database Union2022-10-13 795 经朋友介绍,我读完 Tim Hall 于 2022 年 9 月 27 日他的博客上发表的博文.10 月 11 ...