当前位置: 首页 > news >正文

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架

目录

前言

环境介绍

代码与动机

架构设计,优缺点

博客系列指引


前言

笔者前段时间花费了一周,整理了一下自从TM1637开始打算的,使用OLED来搭建一个通用的显示库的一个工程。笔者的OLED库已经开源到Github上了,地址在:MCU_Libs/OLED at main · Charliechen114514/MCU_Libs (github.com)

框架目前的最终目的,是设计一个丝滑的带有动画和图标的动态多级菜单。笔者会尽可能详细的介绍自己的设计思路,供大家参考。

环境介绍

首先,笔者惯用的是PlatformIO作为嵌入式开发的IDE,CubeMx作为方便的代码生成器辅助笔者进行快速的工作。各位可能更多使用的是CubeIDE或者是MDK5,关于这个,笔者会尽可能详细的阐述一些可能异于平台操作的操作。这里需要各位自行动手做更改!

代码与动机

关于江科大的OLED代码和以KeysKing作为代码的优秀的嵌入式工程师的代码,笔者早就有所拜读,这些代码更多的是出于一种“可用的”而不是可复用的,代码风格上,笔者更青睐于KeysKing大佬的代码风格。但是笔者在移植的时候出现了一些困扰,导致最终失败。笔者随后决定基于KeysKing的思路,使用江科大的代码作为参考,使用Linux设备代码抽象的架构与面对对象C重新设计一套完整的OLED框架,全面的支持软硬件IIC和软硬件SPI。支持参数不同,大小不同的OLED作为显示。这也是笔者的一次大型的C语言工程训练。新手上路,多多包涵!

如果你并不关心如何实现的,只是想快速实现如何使用,请到MCU_Libs/OLED/library at main · Charliechen114514/MCU_Libs (github.com)中直接拷贝两份代码,将所有代码添加进入你的工程(如果您有确定的OLED协议,请自行适当裁剪,笔者的代码极低耦合,可以直接删除不需要的代码)

如果你关心的是如何实现的,这就是笔者写这个系列博客的目的。

架构设计,优缺点

简单的讲,分为协议层(使用何种协议进行通信?),设备层(这个设备可以做什么?),图像层(可以使用设备绘制哪一些图像?),组件层(可以使用图像绘制哪一些组件?),层层递进,保证互相之间互不干扰。

优点我说了,低耦合高内聚,笔者添加支持SSD1309的代码,从头到尾只是修改了两行代码 + 添加一行修正(X += 2),跑起来了整个框架。其他的代码笔者丝毫未动。

缺点就是老生常谈的效率问题。整个事情需要良好的抽象。尽可能大的变量复用,确保敏感部分的函数跳转尽可能少,对OLED的特性尽可能熟悉,对自己的要求很高。

看看效果?

如下的演示视频是硬件SPI + 2.42寸的SSD1309 OLED演示。

演示视频

博客系列指引

本博客是一个Title性质的和Guide性质的博客,系列文章如下所示,可自行翻阅。

总览

协议层封装

OLED设备封装

绘图设备抽象

基础图形库封装

基础组件实现

动态菜单组件实现

http://www.lryc.cn/news/529296.html

相关文章:

  • Java实现.env文件读取敏感数据
  • Go反射指南
  • Fullcalendar @fullcalendar/react 样式错乱丢失问题和导致页面卡顿崩溃问题
  • 【电工基础】4.低压电器元件,漏电保护器,熔断器,中间继电器
  • 有限元分析学习——Anasys Workbanch第一阶段笔记梳理
  • C++中常用的十大排序方法之1——冒泡排序
  • vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
  • 手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)
  • 【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用
  • 网络攻防实战指北专栏讲解大纲与网络安全法
  • 【已解决】windows7虚拟机安装VMtools频繁报错
  • 蓝桥杯模拟算法:多项式输出
  • 冲刺蓝桥杯之速通vector!!!!!
  • 知识管理平台在数字经济时代推动企业智慧决策与知识赋能的路径分析
  • IT服务管理平台(ITSM):构建高效运维体系的基石
  • [EAI-026] DeepSeek-VL2 技术报告解读
  • 深度学习:基于MindNLP的RAG应用开发
  • 【C语言】static关键字的三种用法
  • STM32 PWMI模式测频率占空比
  • 神经网络|(四)概率论基础知识-古典概型
  • ubuntu20.04.6下运行VLC-Qt例子simple-player
  • 低代码产品插件功能一览
  • Blazor-@bind
  • RK3568中使用QT opencv(显示基础图像)
  • [答疑]DDD伪创新哪有资格和仿制药比
  • C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示
  • DIY QMK量子键盘
  • C++ 堆栈分配的区别
  • 范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作
  • Pandas进行MongoDB数据库CRUD