ARTICLE · 1081526
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(数据线)。通信过程就像一场对话:
发起呼叫:单片机(主机)先发送一个起始信号,然后发送 SSD1306 的 7 位设备地址。0.96 寸模块的地址通常是
0x3C或0x3D。表明来意:地址匹配后,单片机接着发送一个控制字节。这个字节里的
D/C#位至关重要,它告诉 SSD1306:“我接下来要发的是命令(用来配置芯片,如设置对比度),还是数据(要写入 GDDRAM 的像素信息)”。
🗺️ 第三:如何精确定位到某个像素?
知道了要写数据,下一个问题就是:数据要写到 GDDRAM 的哪个位置?SSD1306 提供了多种寻址模式,其中页寻址模式(Page Addressing Mode) 是理解其他模式的基础,也是最常用的。
GDDRAM 被划分为 8 个页(Page),每页有 8 行,共 64 行;水平方向有 128 列(Column)。当你向 GDDRAM 写入一个字节(8 位数据)时,这个字节的 8 个位会垂直地填充到当前页的同一列中,对应屏幕上的 8 个垂直像素点。
写入一个字节后,列地址会自动加 1,指向下一列。但当写满一行(列地址达到 127)后,地址指针不会自动跳到下一页,而是回到当前页的第 0 列。要写入下一页,必须手动发送命令来设置新的页地址。
🐱 第四:如何让“喵”动起来?
“月薪喵”是一个动画,动画的本质就是一系列静态图像(帧)的快速切换。要让喵动起来,就需要:
准备帧数据:把喵的动画分解成一系列 128×64 的单色图像,然后将每张图像转换为符合 SSD1306 页寻址格式的 C 语言数组。这个过程通常使用 PCtoLCD2002 或 Image2LCD 等取模软件来完成。
在循环中刷新:在代码的主循环里,依次遍历每一帧的数组。对于每一帧,你需要:
发送设置命令,把写指针定位到 GDDRAM 的起始位置(第 0 页,第 0 列)。
连续发送该帧的所有数据字节,将它们写入 GDDRAM。
等待一个短暂的时间(例如 120ms),以控制动画的播放速度。
然后处理下一帧,如此循环,就能看到连续的动画效果。
一个关键技巧:如果你想播放的动画比整个屏幕小(比如“月薪喵”的 51×64 像素),你不需要清除整个 GDDRAM。你可以在每一帧的写指针定位时,只清除上一帧“喵”所占用的那部分区域,这样可以显著提高刷新效率。









