目录

一、前言

二、部分说明

2.1 重要说明 

2.2 命令寄存器

2.3 多字节命令寄存器

三、寄存器及详解

3.1 基本命令

1. 设置对比度命令 (MYOLEDReg_ConCtrl)

2. RAM显示/整个显示命令

3. 正常显示/反向显示命令

4. 开启/关闭显示命令(电源管理)

3.2 滚动命令

1. 停止滚动命令 (MYOLEDReg_DScroll)

2. 开始滚动命令 (MYOLEDReg_AScroll)

3. 水平滚动设置命令 (MYOLEDReg_RHScroll 和 MYOLEDReg_LHScroll)

4. 垂直和水平滚动设置命令 (MYOLEDReg_VRHScroll 和 MYOLEDReg_VLHScroll)

5. 垂直滚动区域设置命令 (MYOLEDReg_VScrollA)

关键注意事项总结

3.3 寻址设置命令

1. 寻址模式设置寄存器 (0x20)

2. 列起始地址设置寄存器

3. 页起始地址设置寄存器 (0xB0)

4. 列范围设置寄存器 (0x21)

5. 页范围设置寄存器 (0x22)

关键操作流程(页寻址模式示例)

3.4 硬件配置命令

1.寄存器功能:设置显示起始线(范围0x40-0x7F)

2.寄存器功能:设置分段重映射

3.寄存器功能:设置多路复用比率

4.寄存器功能:设置COM输出扫描方向

5.寄存器功能:设置显示偏移

6.寄存器功能:设置COM引脚硬件配置

3.5 定时和驱动方案命令

1. 宏 MYOLEDReg_DCDR_OF (寄存器地址: 0xD5)

2. 宏 MYOLEDReg_PreCPrd (寄存器地址: 0xD9)

3. 宏 MYOLEDReg_ComVHD (寄存器地址: 0xDB)

4. 宏 MYOLEDReg_NOP (寄存器地址: 0xE3)

四、头文件


一、前言

2025-9-3重要更新:3.2节水平滚动设置命令命令组末尾添加假字节0x00、0xFF

本文由本躯根据晶门科技有限公司(Solomon Systech Limited)SSD1306 128*64显示器集成电路芯片器件手册编写,若有差异请参考原英文文档。

SSD1306大规模使用于小尺寸OLED显示屏,是目前最常见的型号。

专业人士可以直接复制文末代码或下载资源文件,注释已经非常详细了。

文章由DeepSeek参考代码及注释生成并修改,故格式并不统一。另外,若内容有差异以文末头文件寄存器宏定义及相关注释为准。

资源中的头文件中,有许多“RAM”被我误写为“ARM”,使用时不影响。可以自行更改。

图1-1 0.96寸OLED
标图1-1 0.96寸OLED题

二、部分说明

2.1 重要说明 

(1)写入命令寄存器前应先发送写命令指令0x00。

(2)若描述了某个非全数据,如A[5:4],则除了第6位和第4位数据(**x[5]x[4]***b)以外的其他数据不用管。

(3)未描述的寄存器地址禁止修改或写入,多字节命令必须连续且全部发送,否则可能产生奇怪的错误。

2.2 命令寄存器

微控制器(如ARM、AVR)通过命令寄存器管理外设控制指令,只要通信指向了某个命令寄存器的地址,就会执行此寄存器的功能。

2.3 多字节命令寄存器

多字节命令寄存器是一种用于存储或处理多个字节(通常为16位、32位或更长)数据的硬件寄存器,常见于微控制器、FPGA、通信协议控制器等场景。此类寄存器通常用于传输复杂指令、配置参数或批量数据,需通过特定时序或协议访问。

例如单片机通过IIC通信协议发送命令,下文若描述了“后续字节命令”,则需要将所有命令一次发送,可类比于“Class”。

三、寄存器及详解

通过合理配置下述寄存器,可实现SSD1306的显示控制、滚动效果及硬件参数调整等基本功能,搭配驱动算法即可发挥OLED显示屏的全部性能。

对OLED开发要求特殊或开发需求高的,必须深入了解控制芯片内部的命令寄存器。

3.1 基本命令

1. 设置对比度命令 (MYOLEDReg_ConCtrl)

  • 命令地址0x81
  • 功能:设置OLED显示的对比度级别。对比度值越高,显示内容越清晰;值越低,显示越暗淡。
  • 后续字节需求:需要发送一个8位数据字节(即一个字节的命令参数),范围从0到255(或0x00到0xFF)。对比度随数据值的增加而增加。
  • 默认值:复位(RESET)时默认对比度为0x7F(十进制127),这是一个中等对比度级别。
  • 实际影响:例如,发送0x81后紧跟一个字节如0xFF,会将对比度设为最高;发送0x00则设为最低。这允许动态调整显示以适应不同环境光线。

2. RAM显示/整个显示命令

这两个命令用于控制显示内容的来源,是互斥的(只能选择一种模式)。

  • RAM显示命令 (MYOLEDReg_RAMOn)

    • 命令地址0xA4
    • 功能:OLED仅显示来自RAM处理器的数据。在这种模式下,屏幕内容基于RAM发送的显示数据更新。
    • 后续字节需求:无后续字节,命令本身即完成设置。
    • 默认状态:这是默认显示模式(OLED在初始状态下会使用RAM数据)。
    • 实际影响:启用后,OLED只响应RAM的数据输入,其他输入被忽略。适用于嵌入式系统中处理器驱动的显示场景。
  • 整个显示命令 (MYOLEDReg_EntireOn)

    • 命令地址0xA5
    • 功能:忽略RAM数据,强制整个屏幕开启(即所有像素点亮)。这种模式下,OLED不显示任何数据内容,而是全屏点亮。
    • 后续字节需求:无后续字节。
    • 默认状态:非默认模式,需主动发送此命令激活。
    • 实际影响:常用于测试或诊断,例如检查屏幕是否有坏点;但会消耗更多功耗,不适合正常显示操作。

3. 正常显示/反向显示命令

这两个命令用于控制像素的显示逻辑,也是互斥的。

  • 正常显示命令 (MYOLEDReg_NDisplay)

    • 命令地址0xA6
    • 功能:OLED以正常模式显示内容。逻辑为:当RAM数据位为1时,像素点亮;为0时,像素关闭。这是默认显示方式。
    • 后续字节需求:无后续字节。
    • 默认状态:默认启用(复位后自动生效)。
    • 实际影响:例如,在显示文本或图像时,高电平(1)对应亮像素,低电平(0)对应暗像素,符合常规视觉习惯。
  • 反向显示命令 (MYOLEDReg_RDisplay)

    • 命令地址0xA7
    • 功能:OLED以反向模式显示内容。逻辑为:当RAM数据位为0时,像素点亮;为1时,像素关闭。这相当于颜色反转。
    • 后续字节需求:无后续字节。
    • 默认状态:非默认模式,需主动发送此命令激活。
    • 实际影响:适用于特定场景,如夜间模式或高对比度需求,能减少眼睛疲劳;但可能增加功耗,因为更多像素被点亮。

4. 开启/关闭显示命令(电源管理)

这两个命令用于控制OLED的电源状态,互斥且影响整个模块。

  • 关闭显示命令 (MYOLEDReg_Close)

    • 命令地址0xAE
    • 功能:关闭OLED显示,使其进入睡眠模式(低功耗状态)。在这种状态下,屏幕不显示任何内容,但内部电路可能保持待机。
    • 后续字节需求:无后续字节。
    • 默认状态:默认启用(复位后OLED处于关闭状态)。
    • 实际影响:显著降低功耗,适用于电池供电设备或空闲时;唤醒需发送开启命令。
  • 开启显示命令 (MYOLEDReg_Open)

    • 命令地址0xAF
    • 功能:开启OLED显示,使其进入正常工作模式。屏幕基于当前设置(如对比度和显示模式)显示内容。
    • 后续字节需求:无后续字节。
    • 默认状态:非默认模式,需主动发送此命令激活。
    • 实际影响:从睡眠模式唤醒后,显示会恢复之前状态;适用于用户交互或数据更新时。

3.2 滚动命令

以下是对您提供的OLED显示屏滚动控制命令的详细解析。这些命令基于SSD1306显示控制器,用于实现高效的滚动功能。我将按照寄存器的功能分类解释,包括参数描述、警告和提示,确保内容结构清晰。所有解释基于您提供的宏定义,并遵循专业显示控制的最佳实践。

1. 停止滚动命令 (MYOLEDReg_DScroll)

  • 功能:取消当前滚动设置,停止显示屏滚动。停止后,滚动配置被清除,需要重新写入RAM数据。
  • 后续字节命令:无。
  • 关键警告
    • 在配置新滚动设置前,必须执行此命令,否则可能导致RAM数据损坏。
    • 停止滚动后,RAM数据需重新初始化。
  • 使用提示:作为滚动配置序列的第一步,确保系统稳定。

2. 开始滚动命令 (MYOLEDReg_AScroll)

  • 功能:激活滚动功能,启动显示屏滚动。
  • 后续字节命令:无。
  • 关键警告
    • 激活滚动后,禁止访问RAM数据;禁止更改水平滚动参数(如通过 MYOLEDReg_RHScrollMYOLEDReg_LHScroll)。
    • 此命令会覆盖先前滚动配置。
  • 使用提示:在完成所有滚动设置后调用,以启用滚动效果。

3. 水平滚动设置命令 (MYOLEDReg_RHScrollMYOLEDReg_LHScroll)

  • 功能:配置连续水平滚动参数,MYOLEDReg_RHScroll 用于向右滚动,MYOLEDReg_LHScroll 用于向左滚动。SSD1306默认支持128列滚动。
  • 后续字节命令:四个字节,格式为 A[7:0] B[2:0] C[2:0] D[2:0]
    • A[7:0]:假字节,固定输入 0x00。
    • B[2:0]:起始页位置,3位二进制数,范围 000_b 到 111_b(对应十进制 0$到 7),例如 111_b 表示 page7。
    • C[2:0]:滚动时间间隔,以帧频率为单位。对应关系:
      • 000_b:5 帧
      • 001_b:64 帧
      • 010_b:128 帧
      • 011_b:256 帧
      • 100_b:3 帧
      • 101_b:4 帧
      • 110_b:25 帧
      • 111_b:2 帧
    • D[2:0]:末页位置,格式同 B[2:0],范围 000_b 到 111_b。
    • F[7:0]:假字节,固定输入0x00
    • E[7:0]:假字节,固定输入0xFF
  • 关键警告
    • D[2:0] 的值必须大于或等于 B[2:0](即末页不能早于起始页),否则行为未定义。
  • 使用提示:适用于纯水平滚动场景,配置后需调用 MYOLEDReg_AScroll 启动。

4. 垂直和水平滚动设置命令 (MYOLEDReg_VRHScrollMYOLEDReg_VLHScroll)

  • 功能:配置连续垂直和水平滚动参数,MYOLEDReg_VRHScroll 用于垂直和向右滚动,MYOLEDReg_VLHScroll 用于垂直和向左滚动。不支持纯垂直滚动。
  • 后续字节命令:五个字节,格式为 A[7:0] B[2:0] C[2:0] D[2:0] E[5:0]
    • A[7:0]:假字节,固定输入 $0x00$。
    • B[2:0]:起始页位置,同水平滚动设置。
    • C[2:0]:滚动时间间隔,同水平滚动设置。
    • D[2:0]:末页位置,同水平滚动设置。
    • E[5:0]:垂直滚动偏移量,6位二进制数,范围 000000_b 到 111111_b(对应十进制 0 到 63),例如 000001_b 表示偏移1行,111111_b 表示偏移63行。
  • 关键警告
    • D[2:0] 的值必须大于或等于 B[2:0]
    • 垂直滚动偏移量 E[5:0] 必须小于滚动区域行数(由 MYOLEDReg_VScrollA 设置)。
  • 使用提示
    • 若 E[5:0] = 0,则退化为纯水平滚动。
    • 滚动区域的最后一行会移动到第一行,实现循环效果。

5. 垂直滚动区域设置命令 (MYOLEDReg_VScrollA)

  • 功能:定义垂直滚动区域,包括固定区域和滚动区域的大小。
  • 后续字节命令:两个字节,格式为 A[5:0] B[6:0]
    • A[5:0]:顶部固定区域的行数,6位二进制数,范围 000000_b 到 $111111_b(对应十进制 0 到 63),默认值 0。
    • B[6:0]:滚动区域的行数,7位二进制数,范围 0000000_b 到 1111111_b(对应十进制 0 到 127),默认值 64。滚动区域从固定区域下方开始。
  • 关键约束(数学表达):
    • 行数总和:A + B \leq \text{MUX比率}(多路复用比率,通常为64)。
    • B \leq \text{MUX比率}。
    • 垂直滚动偏移量(由 E[5:0] 设置)必须小于 B。
    • 显示起始线(通过命令 40h 到 7Fh 设置)必须小于 B。
  • 使用提示
    • 对于64行MUX显示器,若 A=0 且 B=64,则全区域滚动。
    • 滚动区域的行循环:最后一行移至第一行。

关键注意事项总结

  • 安全序列:配置滚动时,必须遵循顺序:先调用 MYOLEDReg_DScroll 停止滚动 → 设置参数(如 MYOLEDReg_RHScroll) → 调用 MYOLEDReg_AScroll 启动滚动。违反此序列可能导致数据损坏。
  • RAM访问限制:滚动激活期间,禁止读写RAM;更改参数需先停止滚动。
  • 参数验证:确保 D[2:0] \geq B[2:0]和偏移量小于滚动区域,否则行为异常。
  • 性能优化:帧频率设置影响滚动流畅度;选择低帧数(如 111_b 对应2帧)可实现快速滚动,但可能增加功耗。

3.3 寻址设置命令

1. 寻址模式设置寄存器 (0x20)

  • 功能:配置内存访问模式
  • 命令格式:单字节命令 + 模式参数 A[1:0]
  • 模式说明
    • 00b:水平寻址模式
      数据地址(RAM)持续递增,达到最大值后归零并页指针+1;若页指针与RAM同时达最大值,二者归零(横向遍历)。
    • 01b:垂直寻址模式
      页指针持续递增,达到最大值后归零并RAM+1;若同时达最大值,二者归零(纵向遍历)。
    • 10b:页寻址模式(默认)
      数据在当前页内递增,超限后自动回到起始位置;页指针不变。
    • 11b:无效模式

2. 列起始地址设置寄存器

  • 低4位设置 (0x00)
    命令格式:0x00 | (X & 0x0F)
    示例:设置列地址低4位为 5:0x00 | 0x05 = 0x05
  • 高4位设置 (0x10)
    命令格式:0x10 | ((X & 0xF0) >> 4)
    示例:设置列地址高4位为 9:0x10 | 0x09 = 0x19
  • 说明
    组合低/高4位可覆盖128列分辨率(0-127)。页寻址模式下数据自动递增,无需重复设置列地址。

3. 页起始地址设置寄存器 (0xB0)

  • 功能:设置当前页地址
  • 命令格式0xB0 | Y(Y范围 0-7)
  • 示例:切换到第3页:0xB0 | 0x03 = 0xB3
  • 说明
    页寻址模式下需手动切换页地址(共8页,从上至下编号0-7)。

4. 列范围设置寄存器 (0x21)

  • 功能:定义列操作区间
  • 命令格式:三字节命令 0x21 + 起始列 + 结束列
  • 参数范围:起始列/结束列均为 0-127
  • 示例:设置列区间 20-100:
    WriteCommand(0x21); WriteCommand(20); WriteCommand(100);

5. 页范围设置寄存器 (0x22)

  • 功能:定义页操作区间
  • 命令格式:三字节命令 0x22 + 起始页 + 结束页
  • 参数范围:起始页/结束页均为 0-7
  • 示例:设置页区间 1-5:
    WriteCommand(0x22); WriteCommand(1); WriteCommand(5);

关键操作流程(页寻址模式示例)

  1. 初始化寻址模式
    WriteCommand(0x20); WriteCommand(0x10); // 启用页寻址
  2. 设置起始位置
    • 列地址:WriteCommand(0x00 | (X_low)); WriteCommand(0x10 | (X_high));
    • 页地址:WriteCommand(0xB0 | Y);
  3. 写入数据
    数据自动按列递增,页地址保持不变。

:水平/垂直模式适用于全屏刷新,页模式适合局部更新。寄存器地址均以十六进制表示(如 0x20),参数使用十进制或二进制直接书写。

3.4 硬件配置命令

以下描述严格基于提供的代码内容,不添加任何额外信息。每个寄存器功能、后续字节命令和描述均直接源自代码注释。

1.寄存器功能:设置显示起始线(范围0x40-0x7F)

  • 宏定义#define MYOLEDReg_Startline 0x40
  • 后续字节命令:无
  • 描述:这是7位连续的地址,即1x[5]x[4]x[3]x[2]x[1]x[0]b(RESET:1000000b)。后面可更改的6位,数值对应显示RAM的起始地址。例如:0x40,RAM第0行映射到COM0;0x41,RAM第1行映射到COM0,以此类推(COM:OLED的公共驱动单元)。

2.寄存器功能:设置分段重映射

  • 宏定义#define MYOLEDReg_ReMap0 0xA0(正常模式)和#define MYOLEDReg_ReMap127 0xA1(重映射模式)
  • 后续字节命令:无
  • 描述:A0h:列地址0映射到SEG0(RESET);A1h:列地址127映射到SEG0(SEG:OLED的段驱动单元)。提示:此命令只影响后续的数据输入,GDDRAM中已存储的数据不会改变。

3.寄存器功能:设置多路复用比率

  • 宏定义#define MYOLEDReg_MUXRatio 0xA8
  • 后续字节命令:A[5:0]
  • 描述:A[5:0]:将MUX比率设置为值+1。例:111111b → MCU ratio=64(RESET)。警告:A[5:0]从0到14的值无效。

4.寄存器功能:设置COM输出扫描方向

  • 宏定义#define MYOLEDReg_COMDireN 0xC0(正常模式)和#define MYOLEDReg_COMDireR 0xC8(重映射模式)
  • 后续字节命令:无
  • 描述:正常模式(RESET):扫描从COM0-COM(N-1)(N为多路复用比率);重映射模式:扫描从COM(N-1)-COM0。

5.寄存器功能:设置显示偏移

  • 宏定义#define MYOLEDReg_OffSet 0xD3
  • 后续字节命令:A[5:0]
  • 描述:通过COM将垂直位移设置为0-63d(RESET=0)。

6.寄存器功能:设置COM引脚硬件配置

  • 宏定义#define MYOLEDReg_COMPin 0xDA
  • 后续字节命令:A[5:4]
  • 描述:A[4]=0b:采用COM引脚配置;A[4]=1b:转变/替代COM引脚配置(RESET);A[5]=0b:禁用COM左/右重映射(RESET);A[5]=1b:启用COM左/右重映射。

3.5 定时和驱动方案命令

1. 宏 MYOLEDReg_DCDR_OF (寄存器地址: 0xD5)

  • 功能:设置显示时钟分频比和振荡器频率。
  • 后续字节命令:一个字节的数据,表示为A[7:0](即8位二进制数,范围从0到255)。
  • 详细描述
    • A[3:0]位(低4位)控制显示时钟分频比。分频比的计算公式为:A[3:0]的值加1。例如:
      • 如果A[3:0]设置为0000b(二进制0),分频比为1(复位默认值)。
      • 如果A[3:0]设置为0011b(二进制3),分频比为4。
      • 分频比范围是1到16(因为A[3:0]值从0到15,分频比从1到16)。注意,复位时A[3:0]固定为0000b。
    • A[7:4]位(高4位)控制振荡器频率。振荡器频率随A[7:4]值的增加而增加(即值越大,频率越高)。例如:
      • 复位时A[7:4]为1000b(二进制8)。
      • A[7:4]范围是0000b到1111b(0到15),值0对应最低频率,值15对应最高频率。
    • 总结:这个寄存器允许调整显示时钟的时序和振荡器速度,以适应不同的显示需求。

2. 宏 MYOLEDReg_PreCPrd (寄存器地址: 0xD9)

  • 功能:设置预充电周期。
  • 后续字节命令:一个字节的数据,表示为A[7:0](8位二进制数)。
  • 详细描述
    • A[3:0]位(低4位)定义第一阶段预充电周期的持续时间,单位为DCLK时钟周期。持续时间等于A[3:0]的值,最大值为15。注意:
      • 值0是无效输入(不能使用)。
      • 复位时A[3:0]为2h(十六进制值,相当于二进制0010b,十进制2)。
    • A[7:4]位(高4位)定义第二阶段预充电周期的持续时间,同样单位为DCLK时钟周期。持续时间等于A[7:4]的值,最大值为15。注意:
      • 值0是无效输入。
      • 复位时A[7:4]为2h(十六进制值,二进制0010b,十进制2)。
    • 总结:预充电周期影响OLED像素的充电时间,分两个阶段控制。每个阶段的值必须为1到15(无效输入0会导致未定义行为)。复位时两阶段均设置为2个时钟周期。

3. 宏 MYOLEDReg_ComVHD (寄存器地址: 0xDB)

  • 功能:设置COM高电压取消级别(即控制COM线的电压阈值)。
  • 后续字节命令:一个字节的数据,但只有A[6:4]位(中间3位)有效,其他位(A[7]、A[3:0])可能被忽略或保留。命令格式为A[7:0],但仅使用A[6:4]。
  • 详细描述
    • A[6:4]位控制高电压取消级别,以电源电压VCC的倍数表示。具体设置如下:
      • 当A[6:4]为000b(二进制0)时,电压级别为0.65倍VCC。
      • 当A[6:4]为010b(二进制2)时,电压级别为0.77倍VCC(这是复位默认值)。
      • 当A[6:4]为011b(二进制3)时,电压级别为0.83倍VCC。
    • 注意:描述中提到的00h、20h、30h是示例值,对应A[6:4]的设置(00h对应000b, 20h对应010b, 30h对应011b)。复位时A[6:4]固定为010b。
    • 总结:这个寄存器用于调节COM线的电压,以优化显示对比度和功耗。有效设置范围有限(仅三种值),其他值可能导致未定义行为。

4. 宏 MYOLEDReg_NOP (寄存器地址: 0xE3)

  • 功能:无效命令(无操作)。
  • 后续字节命令:无(发送该命令后,不需要附加数据)。
  • 详细描述
    • 此命令不执行任何操作。它可能用于测试、时序延迟或作为占位符,以避免误操作。
    • 如代码注释所述,它“应该啥用都没有”,在驱动程序中可以安全忽略或用于填充命令序列。

四、头文件

#ifndef __MYOLEDReg_H
#define __MYOLEDReg_H

/**********************************************
  * @ 作者:		史上最甜的躯
  * @ 日期:		2025/7/28
  * @ 描述:		SSD1306显示屏寄存器列表
  * @ 补充说明:	人如其名
  * @ 补充说明:	写入命令寄存器前应先发送写命令指令0x00
  * @ 补充说明:	若描述了某个非全数据,如A[5:4],则除了第6位和第4位数据(**x[5]x[4]***b)以外的其他数据不用管
  * @ 重要说明:	未描述的寄存器地址禁止修改或写入,多字节命令必须连续且全部发送,否则可能产生奇怪的错误
  ********************************************/
  
//*****基本命令*****//
//*****基本命令*****//

//寄存器功能:	设置对比度
//后续字节命令:	A[7:0]
//描述:			双字节256分辨率对比度,对比度随数据的增加而增加。RESET:0x7F		
#define MYOLEDReg_ConCtrl	0x81	//设置对比度

//寄存器功能:	RAM显示(默认)/整个显示
//后续字节命令:	无
//描述:			寄存器地址A4,OLED显示RAM数据
//				寄存器地址A5,OLED全部开启(无视RAM数据)
#define MYOLEDReg_RAMOn		0xA4	//RAM显示
#define MYOLEDReg_EntireOn	0xA5	//整个显示

//寄存器功能:	正常显示(默认)/反向显示
//后续字节命令:	无
//描述:			寄存器地址A6,OLED正常显示,1在ARM为点亮,否则为关闭(默认)
//				寄存器地址A7,OLED反转显示,0在ARM为点亮,否则为关闭
#define MYOLEDReg_NDisplay	0xA6	//正常显示
#define MYOLEDReg_RDisplay	0xA7	//反转显示

//寄存器功能:	开启/关闭显示(睡眠模式)
//后续字节命令:	无
//描述:			寄存器地址AE,OLED进入睡眠模式(默认)
//				寄存器地址AF,OLED正常显示开启
#define MYOLEDReg_Close		0xAE	//关闭显示
#define MYOLEDReg_Open		0xAF	//开启显示

//*****滚动命令*****//
//*****滚动命令*****//

//寄存器功能:	取消滚动
//后续字节命令:	无
//描述:			停止滚动,清除滚动设置
//警告:			在配置下述滚动设置之前,必须停止滚动,否则ARM数据可能损坏。且停止滚动后需要重新写入RAM数据
#define MYOLEDReg_DScroll	0x2E

//寄存器功能:	开始滚动
//后续字节命令:	无
//描述:			开始滚动
//警告:			激活滚动后禁止访问RAM数据!禁止更改水平滚动参数!
//提示:			配置完任意滚动设置后需开启滚动,并将覆盖先前滚动设置的配置
#define MYOLEDReg_AScroll	0x2F

//寄存器功能:	连续水平滚动设置
//后续字节命令:	A[7:0]B[2:0]C[2:0]D[2:0]
//描述:			A[7:0]:假字节,输入0x00
//				B[2:0]:定义起始页位置,十进制对应page[n],例如:111b对应page7
//				C[2:0]:以帧频率为单位设置每个滚动步骤之间的时间间隔。对应关系为:000b-5帧 100b-3帧001b-64帧 101b-4帧010b-128帧 110b-25帧011b-256帧 111b-2帧
//				D[2:0]:定义末页位置,对应关系同“定义起始页位置”
//				E[7:0]:假字节,输入0x00
//				F[7:0]:假字节,输入0xFF
//警告:			D[2:0]的值必须>=B[2:0]
//提示:			SSD1306水平滚动功能被设置为128列滚动
#define MYOLEDReg_RHScroll	0x26	//向右水平滚动
#define MYOLEDReg_LHScroll	0x27	//向左水平滚动

//寄存器功能:	连续垂直和水平滚动设置
//后续字节命令:	A[2:0]B[2:0]C[2:0]D[2:0]E[5:0]
//描述:			A[7:0]:假字节,输入0x00
//				B[2:0]:同“连续水平滚动设置”
//				C[2:0]:连续水平滚动设置
//				D[2:0]:连续水平滚动设置
//				E[5:0]:垂直滚动偏移,例如,E[5:0]=01h表示偏移量=1行,E[5:0]=3Fh表示偏移量=63行
//警告:			D[2:0]的值必须>=B[2:0]
//提示:			无法进行连续垂直滚动	
//提示:			若E[5:0]被设为0,则呈现水平滚动
#define MYOLEDReg_VRHScroll	0x29	//垂直和向右水平滚动
#define MYOLEDReg_VLHScroll	0x2A	//垂直和向左水平滚动

//寄存器功能:	设置垂直滚动区域
//后续字节命令:	A[5:0]B[6:0]
//描述:			A[5:0]:设置顶部固定区域的行数。[RESET = 0]
//				B[6:0]:设置滚动区域中的行数。滚动区域从顶部固定区域下方的第一行开始。[RESET = 64]
//提示:			A[5:0]+B[6:0]<=MUX比率(多路复用比率);B[6:0]<=MUX比率
//				垂直滚动偏移量(29h/2Ah中的E[5:0])<B[6:0]
//				设置显示起始线(X5X4X3X2X1X0(40h~7Fh))<B[6:0](显示起始线下会说明)
//				滚动区域的最后一行将移至滚动区域的第一行。
//				用于64d MUX显示器,若A[5:0]=0,B[6:0]=64则全区域滚动;
#define MYOLEDReg_VScrollA	0xA3

//*****寻址设置命令*****//
//*****寻址设置命令*****//

//寄存器功能:	设置内存的寻址模式
//后续字节命令:	A[1:0]
//描述:			A[1:0]=00b,水平寻址模式 ;A[1:0]=01b,垂直寻址模式;A[1:0]=10b,页寻址模式(Reset);A[1:0]=11b,无效
//提示:			水平寻址模式:数据在RAM不断递增,最大值后清零并页指针加一,当页指针和RAM同时达到最大值后,二者同时归零。换而言之——水平方向遍历寻址模式
//提示:			垂直寻址模式:页指针不断递增,最大值后清零并RAM数据加一,当页指针和RAM同时达到最大值后,二者同时归零。换而言之——垂直方向遍历寻址模式
//提示:			页寻址模式:数据在当页内RAM不断递增,并超限后自动回到首位。但页指针不会改变。
#define MYOLEDReg_MemoryMod	0x20

//寄存器功能:	设置页寻址模式的列初始地址(长度为两个字节的起始地址)
//后续字节命令:	无
//描述:			MYOLEDReg_LColS:使用例子:MYOLED_WriteCommand(0x00 | (X & 0x0F));			(设置X位置低4位)
//				MYOLEDReg_HColS:使用例子:MYOLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));	(设置X位置高4位)
//提示:			低四位加高四位,正好对应屏幕分辨率128,也就是128列led。	
//提示:			页寻址模式下每次数据访问会自动递增,所以无需一直重设列地址
#define MYOLEDReg_LColS		0x00	//低4位数据的起始地址(范围0x00-0x0f)
#define MYOLEDReg_HColS		0x10	//高4位数据的起始地址(范围0x10-0x1f)

//寄存器功能:	设置页寻址模式的页初始地址(长度为3bit的起始地址)
//后续字节命令:	无
//描述:			MYOLEDReg_PageS:使用例子:MYOLED_WriteCommand(0xB0 | Y);					(设置Y位置)
//提示:			对应屏幕从上到下8页		
//提示:			页寻址模式下页的访问不会自动递增,所以需要重设页地址
#define MYOLEDReg_PageS		0xB0	//低4位数据的起始地址(范围0xB0-0xB7)

//寄存器功能:	设置列的起始地址和结束地址
//后续字节命令:	A[6:0]B[6:0]
//描述:			A[6:0]:设置列的起始,范围0-127d。RESET=0
//				B[6:0]:设置列的结束,范围0-127d。RESET=0
//提示:			列从左往右为0-127d
#define MYOLEDReg_Column	0x21

//寄存器功能:	设置页的起始地址和结束地址
//后续字节命令:	A[2:0]B[2:0]
//描述:			A[2:0]:设置页的起始,范围0-7d。RESET=0
//				B[2:0]:设置页的结束,范围0-7d。RESET=0
//提示:			页从上往下为0-7d
#define MYOLEDReg_Page		0x22

//*****硬件配置命令*****//
//*****硬件配置命令*****//

//寄存器功能:	设置显示起始线(范围0x40-0x7F)
//后续字节命令:	无
//描述:			这是7位连续的地址,即1x[5]x[4]x[3]x[2]x[1]x[0]b(RESET:1000000b)
//				后面可更改的6位,数值对应显示RAM的起始地址。例如:0x40,RAM第0行映射到COM0,0x41,RAM第1行映射到COM0,以此类推(COM:OLED的公共驱动单元)
#define MYOLEDReg_Startline	0x40

//寄存器功能:	设置分段重映射
//后续字节命令:	无
//描述:			A0h:列地址 0 映射到SEG0(RESET)
//				A1h:列地址127映射到SEG0(SEG:OLED的段驱动单元)
//提示:			此命令只影响后续的数据输入,GDDRAM中已存储的数据不会改变
#define MYOLEDReg_ReMap0	0xA0
#define MYOLEDReg_ReMap127	0xA1

//寄存器功能:	设置多路复用比率
//后续字节命令:	A[5:0]
//描述:			A[5:0]:将MUX比率设置为值+1。例:111111b → MCU ratio=64(RESET)
//警告:			A[5:0]从0到14的值无效			
#define MYOLEDReg_MUXRatio	0xA8

//寄存器功能:	设置COM输出扫描方向
//后续字节命令:	无
//描述:			正常模式(RESET):扫描从COM0-COM(N-1)(N为多路复用比率)
//				重映射模式:扫描从COM(N-1)-COM0
#define MYOLEDReg_COMDireN	0xC0	//正常模式
#define MYOLEDReg_COMDireR	0xC8	//重映射模式

//寄存器功能:	设置显示偏移
//后续字节命令:	A[5:0]
//描述:			通过COM将垂直位移设置为0-63d(RESET=0)				
#define MYOLEDReg_OffSet	0xD3

//寄存器功能:	设置COM引脚硬件配置
//后续字节命令:	A[5:4]
//描述:			A[4]=0b:采用COM引脚配置				A[4]=1b:转变/替代COM引脚配置(RESET)
//				A[5]=0b:禁用COM左/右重映射(RESET)	A[5]=1b:启用COM左/右重映射
#define MYOLEDReg_COMPin	0xDA

//*****定时和驱动方案命令*****//
//*****定时和驱动方案命令*****//

//寄存器功能:	设置显示时钟分频比/振荡器频率
//后续字节命令:	A[7:0]
//描述:			A[3:0]:设置显示时钟分频比,分频比=A[3:0]+1。(RESET:0000b(分频比=1))
//				A[7:4]:设置振荡器频率,振荡器频率随A[7:4]的值增加而增加,反之亦然。RESET:1000b。范围:0000b~1111b频率随设定值的增加而增加
#define MYOLEDReg_DCDR_OF	0xD5	

//寄存器功能:	设置预充电周期
//后续字节命令:	A[7:0]
//描述:			A[3:0]:第一阶段最多持续15个DCLK时钟周期,0是无效输入(RESET=2h)
//				A[7:4]:第二阶段最多持续15个DCLK时钟周期,0是无效输入(RESET=2h)
#define MYOLEDReg_PreCPrd	0xD9

//寄存器功能:	设置COM高电压取消级别
//后续字节命令:	A[6:4]
//描述:			00h ~ 0.65x VCC
//				20h ~ 0.77x VCC (RESET)
//				30h ~ 0.83 x VCC
#define MYOLEDReg_ComVHD	0xDB

//寄存器功能:	无效命令
//后续字节命令:	无
//描述:			无
//提示:			也不知道干嘛的,应该啥用都没有
#define MYOLEDReg_NOP		0xE3

#endif

本文仅作学习分享

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐