基础命令:

1.页地址模式下设置列起始地址低位(Set Lower Column Start Address For Page Addressing Mode)(00h~0Fh)

此指令用于在页地址模式下设置GDDRAM的列起始地址(8位)的低4位, 页地址会在数据访问后递增

2.页地址模式下设置列起始地址高位(Set Higher Column Start Address For Page Addressing Mode)(10h~1Fh)
此指令用于在页地址模式下设置GDDRAM的列起始地址(8位)的高4位, 页地址会在数据访问后递增

3.设置内存地址模式(Set Memory Addressing Mode)(20h)
在SSD1306中有三种地址模式: 页地址模式, 水平地址模式和垂直地址模式, 此命令用于将地址模式设置为以上三种之一
'COL'的含义是GDDRAM列(column)

页地址模式(A[1:0]=10b)
当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将自动增加1。如果列地址指针到达列终止地址, 列地址指针将复位到列起始地址, 但页地址指针不会改变。
为了访问GDDRAM中下一页的内容, 用户必须设置新的页地址和列地址。页地址模式下页以及列地址指针的行为如下图所示

通常在页地址模式下访问GDDRAM, 需要如下步骤来定义起始RAM访问指针指向:
-通过命令(B0h-B7h)设置目标显示位置页起始地址
-通过命令(00h-0Fh)设置列起始地址低位
-通过命令(10h-1Fh)设置列起始地址高位

例如, 如果页地址是B2h, 列地址低位是03h, 列地址高位是10h, 起始列将为PAGE2的SEG3, GDDRAM访问指针的指向如下图所示

水平地址模式(A[1:0]=00b)

当处于此模式时, 在GDDRAM访问后(读/写), 列地址指针将自动增加1。如果列地址指针到达列终止地址, 列地址指针将复位到列起始地址, 且页地址指针将自动增加1。
水平地址模式下页以及列地址指针的行为如下图所示, 如果列地址指针和页地址指针都到达各自的终止地址时, 他们都将复位到各自的起始地址。(图中虚线)

垂直地址模式(A[1:0]=01b)
当处于此模式时, 在GDDRAM访问后(读/写), 页地址指针将自动增加1。如果页地址指针到达页终止地址, 页地址指针将复位到页起始地址, 且列地址指针将自动增加1。
垂直地址模式下页以及列地址指针的行为如下图所示, 如果列地址指针和页地址指针都到达各自的终止地址时, 他们都将复位到各自的起始地址。(图中虚线)

通常在(垂直/水平)地址模式下访问GDDRAM, 需要如下步骤来定义起始RAM访问指针指向:
-通过命令(21h)设置目标显示位置列起始地址以及列终止地址
-通过命令(22h)设置目标显示位置页起始地址以及页终止地址

4.设置列地址(Set Column Address)(21h)
此指令用于设置GDDRAM的列起始地址和列结束地址, 并使列地址指针(指向GDDRAM中当前访问的列地址)指向列起始地址。
若内存地址模式为水平地址模式, 在访问一列数据后, 列地址指针将增加到下一个列地址。当结束访问终止列地址时, 列地址指针将复位至列起始地址, 且行地址指针将增加到下一行。

5.设置页地址(Set Page Address)(22h)
此指令用于设置GDDRAM的页起始地址和页结束地址, 并使页地址指针(指向GDDRAM中当前访问的页地址)指向页起始地址。
若内存地址模式为垂直地址模式, 在访问一页数据后, 页地址指针将增加到下一个页地址。当结束访问终止页地址时, 页地址指针将复位至页起始地址。

下图展示了例子中列地址指针和页地址指针的移动方式: 列起始地址设为2, 列终止地址设为125, 页起始地址设为1, 页终止地址设为6, 并使用水平地址模式。
在此情况下, GDDRAM数据可范围范围在列2-列125, 页1-页6之内。同时列地址指针被设为2, 页地址指针被设为1。在访问数据后, 列地址自动增加1, 以访问下一数据(图中实线)
当结束访问终止列地址(125)时, 列地址指针复位到列2, 页地址指针自动增加1(图中实线), 当访问终止页地址6和终止列地址125所在数据后, 页地址指针复位到1, 列地址指针复位到2(图中虚线)

6.设置屏幕起始行(Set Display Start Line)(40h-7Fh)
此命令用于设置屏幕起始行寄存器以设置GDDRAM起始地址, 取值范围为[0, 63]。若值为0, 则RAM第0行映射至COM0, 若值为1, 则RAM第1行映射到COM0, 以此类推。

7.设置对比度(Set Contrast Control for BANK0)(81h)
此命令用于设置屏幕对比度。此芯片有256级对比度(从00h至FFh)。段输出电流和对比度值同增同减。

8.设置段重映射(Set Segment Re-map)(A0h/A1h)
此指令用于改变屏幕数据列地址和段驱动器间的映射关系, 这增强和OLED模块设计的可伸缩性。
此命令只影响其后的数据输入, 已存储在GDDRAM中的数据将保持不变。

9.全屏点亮(Entire Display ON)(A4h/A5h)
命令A4h启用输出GDDRAM中的数据
如果命令A5h已被调用, 通过A4h指令, 可以将屏幕显示从全屏点亮状态中恢复
命令A5h通过忽略GDDRAM中的数据以点亮全屏

10.设置正常/反转显示(A6h/A7h)
此命令用于设置显示是否反转, 正常模式下, RAM中的数据1表示点亮像素; 在反转模式下, RAM中的数据0表示点亮像素

11.设置复用率(A8h)
此命令用于将默认的63复用率更改至任何范围为[16, 63]的值, COM0~COM64输出将切换到正确的输出信号

12.设置屏幕开启/关闭(AEh/AFh)
此指令用于开启或关闭OLED屏幕
当屏幕开启时, 设置主机配置命令(Set Master Configuration)选择的电路将被连通。
当屏幕关闭时, 这些电路将被断开, 且段和公共的输出都被分别置为Vss和高阻态。
此指令设置屏幕状态为以下二者的其中之一:
AEh: 关闭屏幕
AFh: 开启屏幕

13.页地址模式下设置页起始地址
此指令用于设置在页地址模式下GDDRAM的页起始地址, 取值范围为[0, 7]

14.设置列输出扫描方向(Set COM Output Scan Direction)(C0h/C8h)
此指令用于设置列输出的扫描方向, 增强了OLED模块设计的布局的伸缩性。
注意, 此指令会立即生效。例如当屏幕正常显示时调用此指令, 屏幕将会立刻垂直翻转。

15.设置显示偏移(Set Display Offset)(D3h)
此命令为双字节命令, 第二个字节用于设置屏幕起始行为COM0~COM63之一(假设COM0为屏幕起始行, 那么屏幕起始行寄存器值为0)
例如, 要使COM16向COM0方向移动16行, 第二个字节的值应该为010000b; 向COM0相反方向移动16行, 第二个的值应该为64-16, 即100000b, 下表展示了调用指令C0h/C8h和D3h的例子

16.设置显示时钟分频值/震荡频率(Set Display Clock Divide Ration/Oscillator Frequency)(D5h)
此指令包括两个功能:
-设置显示时钟分频值(D)(A[3:0])
由于设置从CLK分频得到的DCLK(显示时钟, Display clock)的分频值, 分频值取值范围为[1, 16], 初始值为1, (Please refer to Secion 8.3 for more details)
-设置震荡频率(A[7:4])
如果CLS脚被拉高, 可用于编程震荡频率。 默认值为1000b

17.设置预充电周期(Set Pre-charge Period)(D9h)
此指令用于设置预充电周期的时长, 此周期单位为一DCLK的周期, 复位值为2 DCLK

18.设置列引脚硬件配置(Set COM Pins Hardware Configuration)(DAh)
此指令用于设置列信号引脚配置来适应OLED面板的硬件布局。下表展示了在不同条件下的列引脚配置效果。(图中芯片金手指向上)
-1.序列的列引脚配置(DAh A[4]=0), 列输出扫描方向从COM0到COM63(C0h), 禁用列左/右映射(DAh A[5]=0)

-2.序列的列引脚配置(DAh A[4]=0), 列输出扫描方向从COM0到COM63(C0h), 启用列左/右映射(DAh A[5]=1)

-3.序列的列引脚配置(DAh A[4]=0), 列输出扫描方向从COM0到COM63(C8h), 禁用列左/右映射(DAh A[5]=0)

-4.序列的列引脚配置(DAh A[4]=0), 列输出扫描方向从COM63到COM0(C8h), 启用列左/右映射(DAh A[5]=1)

-5.备选的列引脚配置(DAh A[4]=1), 列输出扫描方向从COM63到COM0(C0h), 禁用列左/右映射(DAh A[5]=0)

-6.备选的列引脚配置(DAh A[4]=1), 列输出扫描方向从COM0到COM63(C0h), 启用列左/右映射(DAh A[5]=1)

-7.备选的列引脚配置(DAh A[4]=1), 列输出扫描方向从COM63到COM0(C8h), 禁用列左/右映射(DAh A[5]=0)

-8.备选的列引脚配置(DAh A[4]=1), 列输出扫描方向从COM63到COM0(C8h), 启用列左/右映射(DAh A[5]=1)

19.设置VCOMH反压值(Set VCOMH Deselect Level)(DBh)
此指令用于调整VCOMH输出

20.空指令(NOP)(E3h)
不产生作用的指令

21.读取状态寄存器(Status register Read)
在读取数据时将D/C#拉低以调用此指令, MCU可用此指令读取芯片内部状态。

图形加速命令:

1.水平滚动配置(Horizontal Scroll Setup)(26h/27h)
此指令用于配置水平滚动参数和确定滚动起始页、终止页和滚动速度
水平滚动需要在调用此命令前禁用(2Eh), 否则RAM中的内容将会出错

SSD1306的水平滚动设计来为128列滚动, 以下是使用水平滚动的例子
向右滚动一列

向左滚动一列

水平滚动配置例子

2.垂直和水平滚动配置(Continuos Vertical and Horizontal Scroll Setup)(29h/2Ah)
此指令用于配置垂直和水平滚动参数和确定滚动起始页、终止页、滚动速度和垂直滚动偏移
B[2:0], C[2:0], D[2:0]用于配置垂直滚动, E[5:0]用于配置垂直滚动偏移, 所有这些字节用于设置斜线(Diagonal, 垂直滚动+水平滚动)
如果垂直滚动偏移为0, 那么只将发生水平滚动(和命令26/27h一样)
滚动需要在调用此命令前禁用(2Eh), 否则RAM中的内容将会出错
以下是使用垂直和水平滚动的例子:

3.禁用滚动(Deactivate Scroll)(2Eh)
此指令用于停止滚动, 在调用命令2Eh后, RAM的数据需要被重写

4.启用滚动(Activate Scroll)(2Fh)
此指令用于启动滚动, 并且只能在滚动配置参数经过调用命令26h/27h/29h/2Ah后调用。最后调用滚动参数命令时的配置将覆盖之间调用过时设置的配置

以下操作会在启用滚动后被禁止
-1.对RAM的访问
-2.改变水平滚动配置参数

5.设置垂直滚动区(Set Vertical Scroll Area)(A3h)
此指令用于设置垂直滚动区, 对于垂直滚动功能(29/2Ah), 垂直滚动的行数可以大于或小于复用率(MUX ratio)
————————————————
版权声明:本文为CSDN博主「专注于无线通信的蓬勃」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/XiaoXiaoPengBo/java/article/details/81329770

SSD1306(OLED驱动芯片)指令详解的更多相关文章

  1. [转]JVM指令详解(上)

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符      ...

  2. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  3. rsync指令详解

    rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...

  4. #pragma 预处理指令详解

    源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma  预处理指令详解              在所有的预处理指令中, ...

  5. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  6. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  7. C#中的预处理指令详解

    这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...

  8. pragma comment的使用 pragma预处理指令详解

    pragma comment的使用 pragma预处理指令详解   #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ...

  9. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

随机推荐

  1. Java第一阶段作业总结

    目录 0.前言 1.作业过程总结 2.OO设计心得 3.测试的理解与实践 4.课程收获 5.对课程的建议 前言 本次博客针对第一阶段的三次作业发表总结,作业要求主要是初学者对于Java的基本语法.用法 ...

  2. Spring5参考指南:基于Schema的AOP

    文章目录 基于Schema的AOP 定义Aspect 定义Pointcut 定义Advice advice参数 Advisors 基于Schema的AOP 上篇文章我们讲到了使用注解的形式来使用Spr ...

  3. Scala教程之:scala的参数

    文章目录 默认参数值 命名参数 scala的参数有两大特点: 默认参数值 命名参数 默认参数值 在Scala中,可以给参数提供默认值,这样在调用的时候可以忽略这些具有默认值的参数. def log(m ...

  4. ubuntu(物理机)连接ARM开发板

    非虚拟机 ubuntu下连接开发板 首先安装超级终端minicom sudo apt-get install minicom 安装完minicom以后,需要将开发板和电脑进行物理连接.需要使用一条网线 ...

  5. Axure遮罩 or 灯箱

    2019独角兽企业重金招聘Python工程师标准>>> 在做原型设计的时候,常常需要设计弹窗(比如confirm.alert或者弹出面板),加一个全屏的遮罩可以突出要展示的内容,效果 ...

  6. Ubuntu下访问Windows中Postgresql

    因为项目的原因,需要将Ubuntu中的一些信息记录到Windows中的Postgresql数据库中,查看网上信息,最后成功了,特地记录以下,需要以下步骤: (1)在Windows中Postgresql ...

  7. composer+psr-4实现自动加载

    自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个免费的自动加载支持. require 'vendor/ ...

  8. time wait 整理

    目录 状态转换图 1.谁会进入time wait状态: 主动发起断开连接的一方调用close()函数发送FIN并进入FIN WAIT 1状态,当收到对面反馈的ack之后会进入FIN WAIT2状态.之 ...

  9. JavaScript实现插入排序

    一.插入排序简介: 想象我们斗地主,摸排阶段,手里的牌都按照从小到大排序.如果每摸一张牌,我们就把他插入合适的位置,使得它比后面位置的牌小,比前面位置的牌大或者相等. 类似这样的一种排序方法就是插入排 ...

  10. ACM-ICPC 2019 山东省省赛D Game on a Graph

    Game on a Graph Time Limit: 1 Second Memory Limit: 65536 KB There are people playing a game on a con ...