楼主: 李小东aa
88 0

嵌入式学习:OLED_SSD1306芯片手册阅读 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-9-21
最后登录
2018-9-21

楼主
李小东aa 发表于 2025-11-26 11:58:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

SSD1306 初始化配置说明

关于具体的代码实现,请参见后续章节内容。

显示开关控制

Set Display Off(关闭显示)— 命令码 0xAE

  • X[0] = 0b:进入显示关闭状态(睡眠模式)

核心作用:防止上电瞬间出现“乱码闪烁”或“鬼影”现象。

当 SSD1306 刚通电时,芯片处于未定义的初始状态:

  • 内部寄存器可能被随机赋值
  • 显存(GRAM)中可能存在残留数据

若此时直接开启显示,屏幕很可能显示出杂乱图案、花屏或异常闪烁。因此,在初始化流程开始前先执行关显示操作,是确保显示稳定的关键步骤。

Set Display ON(开启显示)— 命令码 0xAF

  • RESET 后默认值为 AFh,X[0] = 1b:进入正常工作模式并打开显示输出

时钟与振荡器设置

Set Display Clock Divide Ratio/Oscillator Frequency — 命令序列 0xD5, 0x80

该功能涉及振荡电路和显示时序发生器模块,其主要构成如下:

  • 片上集成低功耗 RC 振荡器
  • 支持内部或外部时钟源选择

通过 CLS 引脚决定时钟来源:

  • CLS 高电平:启用内部振荡器,CL 引脚悬空
  • CLS 低电平:禁用内部振荡器,需外接时钟信号至 CL 引脚

当使用内部振荡器时,其输出频率 Fosc 可通过命令 D5h 的 A[7:4] 位进行调节。显示时钟 DCLK 由主时钟分频得到,公式为:

DCLK = FOSC / D

其中 D 为可编程分频系数,取值范围为 1 到 16,由命令 D5h 的 A[3:0] 设置。

帧刷新率(Frame Rate)由以下公式决定:

FFRM = Fosc / (D × K × Number of Mux)

  • D:时钟分频比(命令 D5h A[3:0] 控制)
  • K:每行对应的时钟周期数,上电复位后 K = Phase1 + Phase2 + BANK0 pulse width = 2 + 2 + 50 = 54
  • Multiplex Ratio(MUX 数量):由命令 0xA8 设置,默认为 63(即 64MUX)
  • Fosc:振荡器频率,可通过 D5h A[7:4] 调整,数值越大频率越高

详细参数说明:

  • 0xD5:设置分频比,实际分频值 = A[3:0] + 1;复位默认值为 0000b(对应分频比为 1)
  • 0x80:设定振荡频率初始值,A[7:4] 越大则频率越高;复位值为 1000b,有效范围为 0000b ~ 1111b

多路复用比率配置

Set Multiplex Ratio — 命令序列 0xA8, 0x3F

此命令用于设定 COM 输出端口的数量,即可驱动的行数。支持从 16MUX 至 63MUX(即 16 到 64 行)之间的任意配置。

COM0~COM63 将根据设定值动态映射到相应的扫描线。

  • 0xA8:设置 MUX 比率为 N+1,其中 N = A[5:0];复位值为 111111b(即 63d,代表 64MUX)
  • A[5:0] 取值在 0 到 14 之间为无效输入
  • 0x3F:显式设置为 64MUX,即使该值已是默认值,也建议明确写入以增强兼容性

显示偏移设置

Set Display Offset — 命令序列 0xD3, 0x00

这是一个双字节命令,第二字节用于指定显示起始行相对于 COM0 的垂直偏移量(0~63),从而实现画面整体上下移动。

例如:

  • 若希望将 COM16 对齐至 COM0 位置,向上偏移 16 行,则第二个字节设为 010000b(即 16)
  • 若向下偏移 16 行,则偏移值为 64 - 16 = 48,对应二进制 110000b(即 48)

该设置可用于校正物理安装偏差或实现滚动效果。系统复位后该寄存器自动清零(00h)。

设置显示起始行

Set Display Start Line — 命令码 0x40

该命令用于设定显示 RAM 中哪一行作为当前显示的第一行(映射到 COM0)。参数范围为 0 到 63:

  • 0x40:起始行为第 0 行 → RAM 行 0 映射到 COM0
  • 0x41:起始行为第 1 行 → RAM 行 1 映射到 COM0
  • 依此类推...

此命令仅改变显示映射关系,不影响显存内容本身,常用于快速实现画面垂直翻滚而无需重写数据。

设置显示 RAM 的起始行寄存器(0–63),使用指令 X5X4X3X2X1X0。在系统复位(RESET)时,该寄存器将被重置为 000000b。

设置充电泵(Set Charge Pump)— 0x8D, 0x10

电荷泵(Charge Pump) 是一种内置的 DC-DC 升压电路,能够将输入电压(如 3.3V 或 5V)提升至约 9V 或更高,以满足 OLED 屏幕的工作需求。

SSD1306_SendCommand(0x8D); // 启用充电泵设置
SSD1306_SendCommand(0x14); // 开启内部电荷泵(推荐配置)

命令字节:

0x8D

参数字节:

0x10

→ 禁用内部电荷泵(默认上电状态)

0x14

→ 启用内部电荷泵

设置段重映射(Set Segment Re-Map)— 0xA1

此命令用于调整显示屏的数据列地址与段驱动器之间的映射关系,提高 OLED 模块设计的灵活性。具体配置可参考表 9-1。该操作仅影响后续写入的数据,GDDRAM 中已存储的内容不会发生改变。

  • A0h, X[0]=0b:列地址 0 映射到 SEG0(复位状态)
  • A1h, X[0]=1b:列地址 127 映射到 SEG0(镜像模式)

设置 COM 输出扫描方向 — 0xC8

该命令控制 COM 驱动信号的扫描顺序,支持 OLED 面板布局的多样化设计。一旦执行此命令,显示画面会立即响应变化。例如,在正常显示过程中发送此命令,图像将垂直翻转。

  • C0h, X[3]=0b:正常扫描模式(复位值),从 COM0 扫描至 COM[N-1]
  • C8h, X[3]=1b:反向扫描模式,从 COM[N-1] 扫描至 COM0(实现上下翻转)

注:N 表示当前设定的复用比率(MUX Ratio)。

设置 COM 引脚硬件配置 — 0xDA, 0x12

此命令用于配置 COM 信号引脚的物理连接方式,以适配不同 OLED 面板的硬件结构。以下为 MUX 比率为 64 时的配置选项:

  • A[4]=0b:顺序 COM 引脚排列
  • A[4]=1b(复位值):交替 COM 引脚排列
  • A[5]=0b(复位值):禁用 COM 左右重映射
  • A[5]=1b:启用 COM 左右重映射功能

设置对比度控制 — 0x81, 0xCF

通过该命令调节 OLED 显示屏的对比度水平。芯片支持从 00h 到 FFh 共 256 级亮度调节。随着数值增大,段驱动电流增强,显示对比度也随之提升。

这是一个双字节命令,允许从 256 种级别中选择其一。复位默认值为 7Fh。

设置预充电周期 — 0xD9, 0xF1

此命令定义 OLED 像素预充电阶段的时间长度,时间单位为 DCLK 周期数,复位时默认为 2 个 DCLK。

  • A[3:0]:第一阶段持续时间,范围为 1–15 DCLK(0 为无效值,默认为 2h)
  • A[7:4]:第二阶段持续时间,范围为 1–15 DCLK(0 为无效值,默认为 2h)

OLED 像素本质上是有机发光二极管,其阳极需先进行“预充电”至一定电压,才能在点亮时快速响应并稳定发光。SSD1306 将此过程分为两个阶段:

  1. 阶段 1(Phase 1):从 COM 信号开始上升至达到导通阈值,持续时间由 A[3:0] 控制(1–15 DCLK),不可设为 0。
  2. 阶段 2(Phase 2):从阈值继续充电至完全饱和,持续时间由 A[7:4] 控制(1–15 DCLK),同样不能为 0。

设置 VCOMH 取消选择电平 — 0xDB, 0x30

该命令用于调节 Vregulator 的输出电压,进而影响 VCOMH 的电平设置。不同配置如下表所示:

A[6:4] 十六进制码 VCOMH 取消极电平 特性说明
000b 00h ~0.65 × Vcc 对比度高,但可能出现残影(暗区发灰)
010b 20h ~0.77 × Vcc 上电复位默认值,性能均衡
011b 30h ~0.83 × Vcc 推荐设置,减少残影,提升黑色纯净度

在 OLED 技术中,VCOMH 指的是公共电极(Common Electrode)在非选通状态下的电压水平。每个 OLED 像素由阳极(Segment)和阴极(Common, COM)组成,精确控制 VCOMH 有助于优化显示质量。

在 OLED 显示驱动中,像素的点亮通过行(COM)与列(SEG)之间的电压差实现。当某一行被选中(即扫描到该行)时,对应的 COM 信号会被拉低至低电平(如 0V),同时在 SEG 线上施加数据电压,从而形成足够的电位差使像素导通并点亮。

而当该行未被选中时,COM 信号将保持在高电平状态(例如 VCOMH),此时即使 SEG 上存在电压,由于两端压差不足,像素仍处于关闭状态,不会被点亮。

接下来介绍几个关键的显示控制指令:

Set Entire Display On/Off(开启/关闭整个显示屏)— 指令码 0xA4

该指令用于控制显示屏是否根据 GDDRAM 中的数据进行输出显示。

  • A4h 指令:显示屏恢复为依据 GDDRAM 内容显示模式。即每个像素的状态由显存中的数据决定,此为默认或复位状态。
  • A5h 指令:强制整个显示屏进入“全开”状态,忽略 GDDRAM 中的实际数据内容,所有像素均被点亮。

具体配置如下:

  • A4h, X0=0b:启用 RAM 控制模式,输出跟随显存内容。
  • A5h, X0=1b:启用全局点亮模式,输出不受 RAM 数据影响。

Set Normal/Inverse Display(设置正常/反转显示模式)

此命令允许切换显示的极性,即正常显示或反相显示。

  • 正常显示模式下,GDDRAM 中值为 1 的位对应点亮的像素,值为 0 的位则对应熄灭的像素。
  • 反转显示模式下,逻辑相反:GDDRAM 中值为 0 表示像素点亮,值为 1 表示像素关闭。

对应的指令设置包括:

  • A6h, X[0]=0b:设置为正常显示模式(复位状态)。此时 RAM 值为 0 → 像素关闭;RAM 值为 1 → 像素开启。
  • A7h, X[0]=1b:设置为反转显示模式。此时 RAM 值为 0 → 像素开启;RAM 值为 1 → 像素关闭。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:OLED OLE LED 嵌入式 Frequency

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 12:50