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

从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.kler.cn/a/525876.html

相关文章:

  • 【自学笔记】计算机网络的重点知识点-持续更新
  • 力扣【416. 分割等和子集】详细Java题解(背包问题)
  • Origami Agents:AI驱动的销售研究工具,助力B2B销售团队高效增长
  • JavaScript
  • Python NumPy(7):连接数组、分割数组、数组元素的添加与删除
  • Linux基础指令
  • 智云-一个抓取web流量的轻量级蜜罐-k8s快速搭建教程
  • 基于 WEB 开发的在线考试系统设计与实现
  • [创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索
  • 蓝桥杯之c++入门(一)【C++入门】
  • OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境
  • 什么是线性化PDF?
  • Effective Objective-C 2.0 读书笔记—— 消息转发
  • 登录管理——认证方案(JWT、拦截器、ThreadLocal)
  • 代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III
  • 批量解密,再也没有任何限制了
  • 【逻辑学导论】1.4论证与说明
  • AI领域的技术评估与地缘政治困境 ——评析Anthropic CEO关于DeepSeek的矛盾论述
  • 【测试】开发模型和测试模型
  • C++,STL 头文件组织:结构、分类与最佳实践
  • 【BUUCTF】[GXYCTF2019]BabysqliV3.01
  • 【MySQL】我在广州学Mysql 系列——MySQL用户管理示例
  • 级数论存在重大错误的原因:中学数学对无穷数列的认识存在重大错误
  • android获取EditText内容,TextWatcher按条件触发
  • 图论——floyd算法
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.23 数据工厂:高级初始化模式解析