0.96寸OLED(SSD1306)史上最全命令寄存器地址及详解
本文介绍了SSD1306 OLED显示屏驱动芯片的寄存器配置说明,典型用于0.96英寸128×64分辨率OLED屏幕。主要内容包括:1.基本操作命令(对比度调节、显示模式设置);2.滚动功能设置(水平/垂直滚动配置);3.寻址模式设置(页/水平/垂直寻址);4.硬件配置(扫描方向、引脚设置等);5.时钟和驱动方案设置。重点强调了多字节命令必须连续发送、未描述寄存器禁止修改等注意事项,并提供了详细的
目录
1. 设置对比度命令 (MYOLEDReg_ConCtrl)
3. 水平滚动设置命令 (MYOLEDReg_RHScroll 和 MYOLEDReg_LHScroll)
4. 垂直和水平滚动设置命令 (MYOLEDReg_VRHScroll 和 MYOLEDReg_VLHScroll)
5. 垂直滚动区域设置命令 (MYOLEDReg_VScrollA)
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”,使用时不影响。可以自行更改。
二、部分说明
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_RHScroll或MYOLEDReg_LHScroll)。 - 此命令会覆盖先前滚动配置。
- 激活滚动后,禁止访问RAM数据;禁止更改水平滚动参数(如通过
- 使用提示:在完成所有滚动设置后调用,以启用滚动效果。
3. 水平滚动设置命令 (MYOLEDReg_RHScroll 和 MYOLEDReg_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_VRHScroll 和 MYOLEDReg_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);
关键操作流程(页寻址模式示例)
- 初始化寻址模式:
WriteCommand(0x20); WriteCommand(0x10);// 启用页寻址 - 设置起始位置:
- 列地址:
WriteCommand(0x00 | (X_low)); WriteCommand(0x10 | (X_high)); - 页地址:
WriteCommand(0xB0 | Y);
- 列地址:
- 写入数据:
数据自动按列递增,页地址保持不变。
注:水平/垂直模式适用于全屏刷新,页模式适合局部更新。寄存器地址均以十六进制表示(如 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对应最高频率。
- 总结:这个寄存器允许调整显示时钟的时序和振荡器速度,以适应不同的显示需求。
- A[3:0]位(低4位)控制显示时钟分频比。分频比的计算公式为:A[3:0]的值加1。例如:
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个时钟周期。
- A[3:0]位(低4位)定义第一阶段预充电周期的持续时间,单位为DCLK时钟周期。持续时间等于A[3:0]的值,最大值为15。注意:
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线的电压,以优化显示对比度和功耗。有效设置范围有限(仅三种值),其他值可能导致未定义行为。
- A[6:4]位控制高电压取消级别,以电源电压VCC的倍数表示。具体设置如下:
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
本文仅作学习分享
更多推荐



所有评论(0)