夜雨聆风学习资料网

ARTICLE · 1081526

AI零基础,手把手教你使用AI进行嵌入式软件编程之控制OLED显示“月薪喵”

AI零基础,手把手教你使用AI进行嵌入式软件编程之控制OLED显示“月薪喵”

接合集手把手教你,AI零基础使用AI开发嵌入式软件 从AI工具链安装到,使用AI学习嵌入式基础的新模式,没有哪个老师,能比AI老师,讲的仔细,认真,服务到位,没有任何脾气。

今天给大家介绍使用AI如何开发OLED屏的控制显示,最终程序开发的OLED动画效果如下:

对于“月薪喵”这个项目,整个开发的步骤可以归结为一句话:通过 I2C 总线,按特定的规则修改 SSD1306 内部一块 128×64 位的显存(GDDRAM)中的数据,并定时更换这些数据,就能让屏幕上的像素点动起来。

接线比较简单,电源地和IIC

使用AI学习嵌入式的新模式,实现功能之后再进行知识拆解和巩固,不需要一上来就学习IIC,先了解整个控制对象,数据传递的过程,IIC的知识在这都是次要的,这样的程序整个都是AI写,没有一点问题。

“月薪喵”的动画数据,

本质上是 Flash 里的一串 0/1 字节;

它们被 CPU 读出,通过 I2C 变成 SCL/SDA 上的串行位流,写入 SSD1306 的 GDDRAM;

GDDRAM 再被扫描成 OLED 像素的亮灭,最终在你眼里形成动态的喵。下面,我们就从这条原理出发,一步步拆解。

🧱 第一:OLED 为何能显示?

首先需要理解,你手里的 0.96 寸 OLED 屏幕本身并不“智能”,它只是一块由许多微小的有机发光二极管组成的矩阵。而让这些二极管按你的意愿发光的“大脑”,是驱动 IC SSD1306。

SSD1306 内部集成了一个 128×64 位的显存(Graphic Display Data RAM, GDDRAM)。屏幕上的每一个像素点,都对应着 GDDRAM 中的一个二进制位(bit):1 代表像素亮,0 代表像素灭。所以,控制屏幕显示,本质上就是控制这块 GDDRAM 里的数据。

🔌 第二:如何与 SSD1306 “对话”?

你的单片机无法直接“看到” GDDRAM,它必须通过通信协议与 SSD1306 交流。最常用的方式就是 I2C(Inter-Integrated Circuit) 协议。

I2C 只用两根线:SCL(时钟线) 和 SDA(数据线)。通信过程就像一场对话:

  1. 发起呼叫:单片机(主机)先发送一个起始信号,然后发送 SSD1306 的 7 位设备地址。0.96 寸模块的地址通常是 0x3C 或 0x3D。

  2. 表明来意:地址匹配后,单片机接着发送一个控制字节。这个字节里的 D/C# 位至关重要,它告诉 SSD1306:“我接下来要发的是命令(用来配置芯片,如设置对比度),还是数据(要写入 GDDRAM 的像素信息)”。

🗺️ 第三:如何精确定位到某个像素?

知道了要写数据,下一个问题就是:数据要写到 GDDRAM 的哪个位置?SSD1306 提供了多种寻址模式,其中页寻址模式(Page Addressing Mode) 是理解其他模式的基础,也是最常用的。

GDDRAM 被划分为 8 个页(Page),每页有 8 行,共 64 行;水平方向有 128 列(Column)。当你向 GDDRAM 写入一个字节(8 位数据)时,这个字节的 8 个位会垂直地填充到当前页的同一列中,对应屏幕上的 8 个垂直像素点。

写入一个字节后,列地址会自动加 1,指向下一列。但当写满一行(列地址达到 127)后,地址指针不会自动跳到下一页,而是回到当前页的第 0 列。要写入下一页,必须手动发送命令来设置新的页地址。

🐱 第四:如何让“喵”动起来?

“月薪喵”是一个动画,动画的本质就是一系列静态图像(帧)的快速切换。要让喵动起来,就需要:

  1. 准备帧数据:把喵的动画分解成一系列 128×64 的单色图像,然后将每张图像转换为符合 SSD1306 页寻址格式的 C 语言数组。这个过程通常使用 PCtoLCD2002 或 Image2LCD 等取模软件来完成。

  2. 在循环中刷新:在代码的主循环里,依次遍历每一帧的数组。对于每一帧,你需要:

    • 发送设置命令,把写指针定位到 GDDRAM 的起始位置(第 0 页,第 0 列)。

    • 连续发送该帧的所有数据字节,将它们写入 GDDRAM。

    • 等待一个短暂的时间(例如 120ms),以控制动画的播放速度。

    • 然后处理下一帧,如此循环,就能看到连续的动画效果。

一个关键技巧:如果你想播放的动画比整个屏幕小(比如“月薪喵”的 51×64 像素),你不需要清除整个 GDDRAM。你可以在每一帧的写指针定位时,只清除上一帧“喵”所占用的那部分区域,这样可以显著提高刷新效率。

控制原理知道了,老规矩,开始指挥AI干活:
基于我全自动开发嵌入式软件的智能体(可以付费学习,有需要的私信),只要告诉AI,引脚的定义和逻辑分析仪的链接关系,直接发出我们的需求:先让AI了解SSD1306芯片,AI会自动添加SSD1306.c,SSD1306.h两个文件到keil工程中。
再告诉AI,软硬件接口和逻辑分析仪的连接关系,AI控制逻辑分析仪进行闭环验证,就没有开发不出来的MCU外设驱动程序。
提示词:IIC通讯,PB9 为SDA,PB8为SCL,逻辑分析仪D0接SCL,D2接SDA。
收到指令,AI分析管脚使用情况,进行调整。
一会之后,基本的OLED驱动程序OK了
开始开发动画程序了,我选用了小米的mimo模型,多模态的,可以分析视频,需要的动画和形象效果,我直接网上下载了一段动画,让AI直接复刻实现。大家记住这个直接描述需求的方法。
一段时间后:
老规矩,功能开发完后,让AI出开发学习指南:AI学习新模式,先实现功能再让AI讲解,学习者掌握后,进行复刻。没有学不会的的嵌入式
提示词:我是嵌入式初学者,以第一性原理给出OLED控制程序的学习指南,HTML格式,带左侧目录。
学习指南非常的仔细完整:没有哪个老师,能比AI老师,讲的仔细,认真,服务到位,没有任何脾气。
内容结构(第一性原理推导链)
开篇:一块屏到底是什么 → 7 层栈全景图(像素→协议→指令→显存→刷新→图形→动画)
逐层拆解(每层 = 原理/实测数据/本工程真实代码/自测题):
L0 物理层
:为什么引脚稀缺选 I2C、开漏+上拉的"线与"本质、逻辑分析仪实测(72.2ms 突发 / 130kHz)
L1 协议层
:START/地址/ACK 波形图、OLED_I2C_SendByte逐行位运算解读、0x00/0x40 控制字节
L2 指令层
:初始化序列逐条问"为什么"、★缺 0x20 0x00花屏案例、三种寻址模式对比
L3 显存层
:页=竖 8 像素、DrawPixel的 y/8+1<<bit、帧缓冲建模
L4 刷新层
:72ms 的一笔账(1026×9bit÷130kHz)、阻塞刷新让 tick 停走
L5 图形层
:字模查表原理、"从 GIF 到 1-bit"完整流水线、正/逆向映射伪影坑L6 动画层
:152ms 帧周期解剖、3 动作×4s 状态机、为什么用"步数"不用"毫秒"切动作
实战:分层定位调试法(5 个是/否问题锁定故障层)、3 个真实踩坑案例(旧 hex、页寻址、构建失败被掩盖)、8 关实验路线(含验收标准)、故障速查表
附录:项目文件地图、SSD1306 指令速查、构建/烧录/抓帧命令、术语表

相关学习资料