SSD1306
具体代码请看下一篇
初始化

Set Display Off(显示关闭)— 0xAE
核心原因:避免上电瞬间的“乱码闪烁”或“鬼影”
当你给 SSD1306 上电后,它会进入一个 不确定状态,此时:
- 内部寄存器可能被随机初始化
- 显示内存(GRAM)可能包含垃圾数据
- 如果立即开启显示,屏幕上会出现 杂乱的图案、闪烁或花屏
X[0]=0b:显示关闭(睡眠模式)
Set Display ON (开启显示) — 0xAF
(RESET) AFh X[0]=1b:正常模式下显示 ON
Set Display Clock Divide Ratio/Oscillator Frequency (设置时钟分频比和振荡器频率) — 0xD5, 0X80
Oscillator Circuit and Display Time Generator(振荡电路和显示时间发生器)

该模块是一个片上低功耗 RC 振荡电路。操作时钟(CLK)可以由内部振荡器或外部源 CL 引脚产生。该选择由 CLS 引脚完成。如果 CLS 引脚被拉高,则选择内部振荡器,CL 应保持悬空。将 CLS 引脚拉低会禁用内部振荡器,并且必须将外部时钟连接到 CL 引脚以正常工作。当选择内部振荡器时,其输出频率 Fosc 可以通过命令 D5h A[7:4]改变。显示时序发生器的显示时钟(DCLK)由 CLK 导出。分频因子“D”可以通过命令 D5h 编程设置为 1 到 16。
DCLK=FOSC/D
DCLK = F_{OSC}/D
DCLK=FOSC/D
显示的帧频率由以下公式确定:
FFRM=FoscD×K×No. of Mux
\text{F}_{{}_{\text{FRM}}}=\frac{\text{F}_{{}_{\text{osc}}}}{\text{D}\times \text{K}\times\text{No. of Mux}}
FFRM=D×K×No. of MuxFosc
- D 代表时钟分频比。它由命令 D5h A[3:0]设置。分频比的范围从 1 到 16。
- K 是每行显示时钟的数量。K = Phase 1 period + Phase 2 period + BANK0 pulse width = 2 + 2 + 50 = 54 at power on reset
- Number of multiplex ratio is set by command A8h.上电复位值为 63(即 64MUX)。
- F 是振荡器频率。它可以通过命令 D5h A[7:4]改变。寄存器设置越高,频率越高。
**0xD5:**设置分频比,分频比= A[3:0] + 1,Reset值为0000b(分频比=1)
**0x80:**设置振荡频率,振荡器频率随 A[7:4]的值增加而增加,反之亦然。RESET 为 1000b。 范围:0000b~1111b
Set Multiplex Ratio(设置多路复用比)— 0xA8, 0X3F
该指令将默认的 63 路复用模式切换到任意复用比例,范围从 16 到 63。输出引脚 COM0~COM63 将切换到相应的 COM 信号。
**0xA8:**设置 MUX 比率至 N+1 MUX N=A[5:0]:从 16MUX 至 64MUX,RESET=111111b(即 63d,64MUX)A[5:0]从 0 到 14 都是无效输入。
**0x3F:**明确设置为 64MUX,即使它是默认值
Set Display Offse(设置显示偏移)— 0xD3, 0x00
这是一个双字节命令。第二个命令指定显示起始行映射到 COM0~COM63 之一(假设 COM0 是显示起始行,则显示起始行寄存器等于 0)。
例如,要将 COM16 向 COM0 方向移动 16 行,第二个字节的 6 位数据应为 010000b。要向相反方向移动 16 行,6 位数据应为 64-16,因此第二个字节为 100000b。以下两个表(表 10-1、表 10-2)显示了设置 C0h/C8h 和 D3h 的示例。
通过 COM 设置垂直位移,范围为 0d~63d。在 RESET 后,该值会重置为 00h。
Set Display Start Line(设置起始行) — 0x40
该命令设置显示起始行寄存器,通过从 0 到 63 中选择一个值来确定显示 RAM 的起始地址。当值为 0 时,RAM 行 0 映射到 COM0。当值为 1 时,RAM 行 1 映射到 COM0,以此类推。
Set display RAM display start line register from 0-63 using X 5X 3X 2X 1X 0. Display start line register is reset to 000000b during RESET.
Set Charge Pump(设置充电泵)— 0x8D, 0x10
电荷泵(Charge Pump) 就是一个 内部 DC-DC 升压电路,它能把 3.3V/5V 输入升压到约 9V 或更高,供 OLED 使用。
SSD1306_SendCommand(0x8D); // Set Charge Pump Enable
SSD1306_SendCommand(0x14); // Enable charge pump (recommended)
- 命令字节:
0x8D - 参数字节:
0x10→ 禁用电荷泵(默认上电状态!)0x14→ 启用内部电荷泵
Set Segment Re-Map(设置段重映射)— 0xA1
该命令更改显示屏数据列地址与段驱动之间的映射。它允许 OLED 模块设计的灵活性。请参考表 9-1。该命令仅影响后续数据输入。已存储在 GDDRAM 中的数据将不会发生变化。
A0h, X[0]=0b: 列地址 0 映射到SEG0 (RESET)
A1h, X[0]=1b:列地址 127 映射到SEG0(镜像)
Set COM Output Scan Direction (设置COM输出扫描方向) — 0xC8
该命令设置 COM 输出的扫描方向,允许在 OLED 模块设计中实现布局的灵活性。此外,一旦发出此命令,显示将显示。例如,如果在正常显示期间发送此命令,图形显示将立即垂直翻转。请参考表 10-3 以获取详细信息。
- C0h, X[3]=0b: 正常模式(Reset)扫描自COM0 到 COM[N-1]
- C8h, X[3]=1b: 重映射模式。扫描自COM[N-1]到 COM0, (可设置上下翻转)
其中 N 是复用比率。
Set COM Pins Hardware Configuration(设置串行端口引脚硬件配置)— 0xDA, 0x12
此命令设置 COM 信号引脚配置以匹配 OLED 面板的硬件布局。下表显示了不同条件下的 COM 引脚配置(对于 MUX 比率=64):
A[4]=0b, 顺序 COM 引脚配置 A[4]=1b(RESET), 替代 COM 引脚配置
A[5]=0b(复位), 禁用 COM 左右重映射 A[5]=1b, 启用 COM 左右重映射
Set Contrast Control (设置对比度控制) — 0x81, 0xCF
该命令设置显示的对比度设置。芯片具有从 00h 到 FFh 的 256 级对比度。随着对比度级值的增加,段输出电流也会增加。
双字节命令,从 256 种中选择 1 种。
对比步骤。对比度随值的增加而增加。(RESET = 7Fh )
Set Pre-Charge Period (设置预充电周) — 0xD9, 0xF1
此命令用于设置预充电期的持续时间。间隔以 DCLK 的数量计算,其中 RESET 等于 2 DCLK。
A[3:0]:第一阶段周期最长为 15 个 DCLK 时钟 0 是无效输入(RESET=2h)
A[7:4] : 第二阶段周期最长为 15 DCLK 时钟 0 为无效输入(RESET=2h )
OLED 像素本质上是 有机发光二极管,其阳极需要先被“预充电”到一定电压,才能在正式点亮时快速响应并稳定发光。
SSD1306 将这个过程分为两个阶段:
📌 阶段 1(Phase 1):从 COM 信号开始上升到达到阈值
- 时间由 A[3:0] 设置(1~15 DCLK)
- 不能为 0(无效,会被忽略或视为默认值)
📌 阶段 2(Phase 2):从阈值到完全充电完成
- 时间由 A[7:4] 设置(1~15 DCLK)
- 不能为 0
Set VCOMH Deselect Level(设置VCOMH取消选择级别)— 0xDB, 0x30
此命令调整 Vregulator 输出。
| A[6:4] | Hex code | V COMH deselect level | 特点 |
|---|---|---|---|
| 000b | 00h | ~ 0.65 x Vcc | 对比度高,但可能出现残影(暗处发灰) |
| 010b | 20h | ~ 0.77 x Vcc (RESET) | 上电复位默认值,平衡性好 |
| 011b | 30h | ~ 0.83 x Vcc | 推荐值,减少残影,提升黑色纯度 |
在 OLED 显示技术中:
- VCOMH 是 公共电极(Common Electrode)在“非选通”状态下的电压水平。
- OLED 像素由 阳极(Segment) 和 阴极(Common, COM) 构成。
- 当某一行被选中(扫描到该行)时,COM 被拉低(比如到 0V),而 SEG 上加数据电压 → 像素点亮。
- 当该行未被选中时,COM 会被拉高到 VCOMH 电平,此时即使 SEG 有电压,像素也不会导通(因为压差不够)
Set Entire Display On/Off (打开/关闭整个显示屏) — 0xA4
A4h 指令根据 GDDRAM 内容使显示屏输出。
如果发出 A5h 指令,则通过使用 A4h 指令,显示屏将恢复到 GDDRAM 内容。换句话说,A4h 指令从整个显示屏“开启”阶段恢复显示。
A5h 指令强制整个显示屏为“开启”状态,无论显示数据 RAM 中的内容如何。
- A4h, X0=0b: 恢复到 RAM 内容显示(RESET)输出跟随 RAM 内容
- A5h, X0=1b: 整个显示屏开启 输出忽略 RAM 内容
Set Normal/Inverse Display (设置正常/反转显示) —
该指令将显示屏设置为正常或反转模式。在正常显示模式下,RAM 数据中的 1 表示“开启”的像素,而在反转显示模式下,RAM 数据中的 0 表示“开启”的像素。
- A6h, X[0]=0b: 正常显示(RESET) RAM 中为 0: 显示面板关闭 RAM 中为 1: 显示面板开启
启 输出忽略 RAM 内容
Set Normal/Inverse Display (设置正常/反转显示) —
该指令将显示屏设置为正常或反转模式。在正常显示模式下,RAM 数据中的 1 表示“开启”的像素,而在反转显示模式下,RAM 数据中的 0 表示“开启”的像素。
- A6h, X[0]=0b: 正常显示(RESET) RAM 中为 0: 显示面板关闭 RAM 中为 1: 显示面板开启
- A7h, X[0]=1b: 反转显示 RAM 中为 0:显示面板中为 ONRAM 中为 1:显示面板中为 OFF
560

被折叠的 条评论
为什么被折叠?



