精华内容
下载资源
问答
  • 2021-11-27 00:49:20

    SSD1306命令

    命令表单(D/C#=0, R/W#(WR#) = 0, E(RD#=1) 特殊状态除外)

    1. 基本命令

     

    D/C

    Hex

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    命令

    描述

    0

    81

    A[7:0]

    1

    A7

    0

    A6

    0

    A5

    0

    A4

    0

    A3

    0

    A2

    0

    A1

    1

    A0

    设置对比度

    双字节命令,1~256级对比度可选,对比度随值增加。

    (复位值 = 0x7f)

    0

    A4/A5

    1

    0

    0

    0

    0

    1

    0

    X0

    全部显示开

    A4h,X0 = 0 :恢复内存内容显示(默认),输出内存中的内容

    A5h,X0 = 1 :开显示,输出无视内存的内容

    0

    A6/A7

    1

    0

    0

    0

    0

    1

    1

    X0

    设置正常/逆显示

    A6,X[0]= 0:正常显示(默认)

    RAM为0:显示面板关

    RAM为1:显示面板开

    A7 X[0]= 1:逆显示

    RAM为0:显示面板开

    RAM为1:显示面板关

    0

    AE/AF

    1

    0

    0

    0

    1

    1

    1

    X0

    设置显示开/关

    AE:X[0]= 0:关显示(默认)

    AF:X[0]= 1:在正常模式显示

    2、滚动命令表

    D/C

    Hex

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    命令

    描述

    0

    0

    0

    0

    0

    0

    0

    26/27

    A[7:0]

    B[2:0]

    C[2:0]

    D[2:0]

    E[7:0]

    F[7:0]

    0

    0

    *

    *

    *

    0

    1

    0

    0

    *

    *

    *

    0

    1

    1

    0

    *

    *

    *

    0

    1

    0

    0

    *

    *

    *

    0

    1

    0

    0

    *

    *

    *

    0

    1

    1

    0

    B2

    C2

    D2

    0

    1

    1

    0

    B1

    C1

    D1

    0

    1

    X0

    0

    B0

    C0

    D0

    0

    1

    连续水平滚动设置

    26小时,X[0]= 0,右向水平滚动

    27 h,X[0]= 1,左向水平滚动

    (水平滚动1列)

    [7:0]:虚拟字节(设置为00 h)

    B(2:0):定义开始页面地址

    0~7   PAGE0 ~ PAGE7

    C(2:0):设置每个滚动步骤之间的时间间隔的帧频

    000 b - 5帧100 b - 3帧

    001 b - 64帧101 b - 4帧

    010 b - 128帧110 b - 25帧

    011 b - 256帧111 b - 2帧

    D(2:0):定义最终页面地址

    0~7   PAGE0 ~ PAGE7

    D(2:0)的值必须大于或等于B(2:0)

    E[7:0]:虚拟字节(设置为00 h)

    F[7:0]:虚拟字节(设置为FFh)

    0

    0

    0

    0

    0

    0

    29/2A

    A[2:0]

    B[2:0]

    C[2:0]

    D[2:0]

    E[5:0]

    0

    0

    *

    *

    *

    0

    0

    0

    *

    *

    *

    0

    1

    0

    *

    *

    *

    E5

    0

    0

    *

    *

    *

    E4

    1

    0

    *

    *

    *

    E3

    0

    0

    B2

    C2

    D2

    E2

    X1

    0

    B1

    C1

    D1

    E1

    X0

    0

    B0

    C0

    D0

    E0

    连续垂直和水平滚动

    设置

    29H,X1X0 = 01 :垂直和水平滚动

    2AH,X1X0 = 10 :垂直和水平滚动

    (水平滚动1列)

    [7:0]:虚拟字节

    B(2:0):定义开始页面地址

    0~7   PAGE0 ~ PAGE7

    C(2:0):设置每个滚动步骤之间的时间间隔的帧频

    000 b - 5帧100 b - 3帧

    001 b - 64帧101 b - 4帧

    010 b - 128帧110 b - 25帧

    011 b - 256帧111 b - 2帧

    D(2:0):定义最终页面地址

    0~7   PAGE0 ~ PAGE7

    D(2:0)的值必须大于或等于B(2:0)

    E[5:0]:垂直滚动偏移量

    例如E[5:0]= 01 h指抵消= 1行

    E(5:0)= 3跳频是指抵消= 63行

    请注意(1)没有可用连续垂直滚动。

    0

    2E

    0

    0

    1

    0

    1

    1

    1

    0

    禁用滚动

    0

    2F

    0

    0

    1

    0

    1

    1

    1

    1

    激活滚动

    0

    0

    0

    A3

    A[5:0]

    B[6:0]

    1

    *

    0

    0

    *

    B5

    1

    A5B5

    0

    A4B4

    0

    A3B3

    0

    A2

    B2

    1A1

    B1

    1A0

    B0

    设置垂直滚动

    区域

    A(5:0):没有。的行固定区域。没有。的行固定区域引用的GDDRAM(重置= 0)(即行。0]

    B[6:0]:没有。在滚动的行。这是一个用于垂直的行数滚动。滚动区域开始在第一行下面的顶部固定区域。(重置= 64)

    请注意

    (1)A[5:0]+[6:0]< = MUX比率

    (2)B(6:0)< = MUX比率

    (3)垂直滚动抵消(E(5:0)h / 2啊29日)<B[6:0]

    (3 b)设置显示线(X5X4X3X2X1X0开始40 h ~ 7跳频)< B[6:0]

    (4)最后一行滚动区域的转移到第一行滚动的区域。

    (5)对64 d MUX显示(5:0)= 0,B[6:0]= 64:整个区域卷轴

    (5:0)= 0,B[6:0]< 64:高级卷轴

    A[5:0]+[6:0]< 64:中心区卷轴

    A[5:0]+[6:0]= 64:底部区域卷轴

    3、寻址设置命令表

    D/C

    Hex

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    命令

    描述

    0

    00~0F

    0

    0

    0

    0

    X3

    X2

    X1

    X0

    设置低的列开始地址页面寻址模式

    设置列的低咬起始地址注册页面使用X(握)寻址模式数据位。最初的显示行寄存器复位后重置为0000 b。

    请注意

    (1)该命令只是页面寻址模式

    0

    10~1F

    0

    0

    0

    1

    X3

    X2

    X1

    X0

    设定更高的列

    开始地址页面寻址模式

    设置列的高咬起始地址注册页面使用X(握)寻址模式数据位。最初的显示行寄存器复位后重置为0000 b。请注意

    1)这个命令只是页面寻址模式

    0

    0

    20

    A[1:0]

    0

    *

    0

    *

    1

    *

    0

    *

    0

    *

    0

    *

    0

    A1

    0

    A0

    设置内存寻址模式

    A[1:0]= 00,水平寻址模式

    A[1:0]= 01,垂直的寻址模式

    A[1:0]= 10,页面寻址模式(重置)

    A[1:0]= 11,无效

    0

    0

    0

    21

    A[6:0]

    B[6:0]

    0

    *

    *

    0

    A6B6

    1

    A5B5

    0

    A4B4

    0

    A3B3

    0

    A2

    B2

    0A1

    B1

    1A0

    B0

    设置列地址

    设置列开始和结束地址

    A[6:0]:列起始地址,范围:0 - 127 (默认值 = 0)

    B[6:0]:列结束地址范围:0 - 127 (默认值 = 127)

    注:(1)该命令只是为水平或垂直寻址模式。

    0

    0

    0

    22

    A[2:0]

    B[2:0]

    0

    *

    *

    0

    *

    *

    1

    *

    *

    0

    *

    *

    0

    *

    *

    0

    A2

    B2

    1A1

    B1

    0A0

    B0

    设置页面地址

    页面设置开始和结束地址

    A[2:0]:页面起始地址,范围:0-7

    (默认值= 0 )

    B[2:0]:页面结束地址,范围:0-7

    (默认值= 7 )

    注:(1)该命令只是为水平或垂直寻址模式。

    0

    B0~B7

    1

    0

    1

    1

    0

    X2

    X1

    X0

    设置页面开始

    页面地址寻址模式

    设置GDDRAM页面的起始地址

    (PAGE0 ~ PAGE7)页面寻址模式,使用X[2:0]。

    请注意

    (1)该命令只是页面寻址模式

    4、硬件配置表(面板分辨率&设计相关)命令

    0

    40~7F

    0

    1

    X5

    X4

    X3

    X2

    X1

    X0

    设置显示开始行

    设置显示RAM的显示起始行地址0 -> 63,使用X5X4X3X2X1X0 。

    在复位后起始行地址为0。

    0

    A0/A1

    1

    0

    1

    0

    0

    0

    0

    X0

    设置段重映射

    A0,X[0]= 0:列地址0映射到

    SEG0(默认值)

    A1 X[0]= 1:列地址127映射到SEG0

    0

    0

    A8

    A[5:0]

    1

    *

    0

    *

    1

    A5

    0

    A4

    1

    A3

    0

    A2

    0

    A1

    0

    A0

    设置多种比列

    MUX比率设置为N + 1 MUX

    N =A[5:0]:从16MUX到64MUX ,复位值= 111111 b(即63 d、64 mux)

    A[5:0]:值0到14是无效的。

    0

    C0/C8

    1

    1

    0

    0

    X3

    0

    0

    0

    设置COM输出扫描方向

    C0:X[3]= 0:正常模式(默认值)扫描 COM0->COM(N - 1)

    C8:X[3]= 1:重映射模式。扫描

    COM0(N - 1)->COM0

    其中N是MUX比率值

    0

    0

    D3

    A[5:0]

    1

    *

    1 *

    0

    A5

    1

    A4

    0

    A3

    0

    A2

    1

    A1

    1

    A0

    设置显示补偿

    设置COM垂直移动 0->63

    复位后的值为0。

    0

    0

    DA

    A[5:4]

    1

    *

    1 *

    0

    A5

    1

    A4

    0

    0

    0

    0

    1

    0

    1

    0

    设置COM脚

    A[4]= 0,连续COM脚配置

    A[4]= 1,(默认),可选择COM脚配置

    A[5]= 0,(默认),禁用COM左/右重映射

    A[5]= 1,COM左/右可重映射

    5、时间和驱动方案设置命令表

    0

    0

    D5

    A[7:0]

    1

    A7

    1

    A6

    0

    A5

    1

    A4

    0

    A3

    1

    A2

    0

    A1

    1

    A0

    设置显示时钟

    分比率/振荡器频率

    A[3:0]:设置DCLK的除频因子:分频比=A[3:0]+ 1,复位后为0(分频比= 1);

    A[7:4]:设置晶振频率,FOSC频率随

    A[7:4]的增加而增加,反之亦然。

    复位后为8,范围:0 ~ 15;

    当设定值增加时频率增加。

    0

    0

    D9

    A[7:0]

    1

    A7

    1

    A6

    0

    A5

    1

    A4

    1

    A3

    0

    A2

    0

    A1

    1

    A0

    设置Pre-charge间隔

    A[3:0]:1到15 DCLK的间隔,

    写入0是无效的(复位值 = 2);

    A[7:4]:2到15 DCLK的间隔;写入0是无效的(复位值 = 2)

    0

    0

    DB

    A[6:4]

    1

    0

    1 A6

    0

    A5

    1

    A4

    0

    0

    0

    0

    1

    0

    1

    0

    VCOMH

    电压设置

    A[6:4] V COMH设置

    00     0.65 x VCC

    20     0.77 x VCC(复位之后)

    30     0.83 x VCC

    0

    E3

    1

    1

    1

    0

    0

    0

    1

    1

    NOP

    没有操作命令

    6、高级图形命令表

    0

    0

    23

    A[6:0]

    0

    *

    0

    *

    1

    A5

    0

    A4

    0

    A3

    0

    A2

    1

    A1

    1

    A0

    设置褪色出去,闪烁的

    A[5:4]= 00 禁用淡出/闪烁模式(重置)

    A[5:4]= 10 使能消退模式。

    一旦启用消退模式,对比逐渐减少

    对所有像素。输出内存内容时消退模式是禁用的。

    A[5:4]= 11 b启用闪烁模式。一旦启用了闪烁模式,对比减少逐步对所有像素,比对照增加逐渐正常显示。这个过程循环不断,直到闪烁模式是禁用的。

    A[3:0]:设置时间间隔为每一个褪色的一步

    请注意

    (1)请参考10.3.1节细节。

    A[3:0]时间间隔为每一个褪色的一步

    0000 b 8帧

    0001 b 16帧

    0010 b 24帧

    :

    1111 b 128帧

    0

    0

    D6

    A[0]

    1

    0

    1

    0

    0

    0

    1

    0

    0

    0

    1

    0

    1

    0

    0

    A0

    设置放大

    A[0]= 0禁用放大模式(重置)

    A[0]= 1 b使放大模式

    请注意

    (1)必须在替代COM销的面板配置(命令哒[4]= 1)

    (2)请参考10.3.2节细节。

    7、电荷泵命令表

    0

    0

    8D

    A[7:0]

    1

    *

    0

    *

    0

    0

    0

    1

    1

    0

    1

    A2

    0

    0

    1

    0

    电荷泵

    设置

    A[2]= 0,禁用电荷泵(复位)

    A[2]= 1,在显示时使能电荷泵

    请注意:在下列的命令序列之前电荷泵必须启用:

    0x8d;电荷泵设置

    0x14,使能电荷泵

    0xAF;开显示

    注:由于时间有限,很多是机器翻译只是加以修改,请自己参照英文对照。

    更多相关内容
  • SSD1306 中文手册

    2018-06-26 14:07:39
    SSD1306是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由128 segments 和64 Commons组成。该芯片专为共阴极OLED面板设计。SSD1306中嵌入了对比度控制器、显示RAM和晶振,并因此...
  • ssd1306中文手册V2.docx

    2020-08-24 14:03:50
    本人自己翻译的SSD1306中文手册,由于翻译水平有限可能会存在翻译不准确,词不达意等问题。欢迎大家指正。
  • SSD1306资料手册

    2018-08-30 14:27:03
    SSD1306资料
  • SSD1306 OLED驱动芯片中文手册.pdf
  • SSD1306(OLED驱动芯片)中文手册
  • ssd1306中文手册 SSD1306是一个单片 CM,OS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图像显示系统。
  • 包含结构方框图、功能块描述等,SSD1306是一个单片 CMOS OLED/PLED驱动芯片可以驱动有机 / 聚合发光二极管点阵图形显 示系统。
  • SSD1306是一个单片 CMOS OLED/PLED驱动芯片可以驱动有机 / 聚合发光二极管点阵图形显 示系统。由 128 segments 和 64 Commons 组成。该芯片专为共阴极 OLED面板设计。 SSD1306中嵌入了对比度控制器、 显示 RAM 和...
  • 解压后有原版ssd1306手册和html格式的手册,使用谷歌浏览器打开html的手册可以自动翻译成中文,再对照原版的看即可
  • oled驱动芯片SSD1306中文手册
  • SSD1306 是一个单片 CMOS OLED/PLED 驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由 128 segments 和 64 Commons 组成。该芯片专为共阴极 OLED 面板设计。 SSD1306 中嵌入了对比度控制器、显示 RAM 和...
  • SSD1306-OLED驱动芯片中文手册,适用于0.96OLED屏
  • 资料包括: 1)SSD1306 英文中文数据手册 2)I2C时序图 3)代码github,详细看文档 4)验证SSD 1306 OLED的上位机

    在这里插入图片描述
    资料包括:
    1)SSD1306 英文中文数据手册
    2)I2C时序图
    3)代码github,详细看文档
    4)验证SSD 1306 OLED的上位机

    资料下载连接:点击下载

    展开全文
  • SSD1306.pdf

    2021-05-28 16:42:19
    SSD1306芯片驱动中文手册,包括命令表及其详解
  • OLED 1.55 SSD1305数据手册
  • Proteus仿真Arduino控制OLED1306显示 简单测试 包括:SSD1306OLED.ino, SSD1306OLED.ino.elf, SSD1306OLED.ino.hex, SSD1306OLED.pdsprj
  • SSD1306-OLED驱动芯片中文手册,SSD1306-OLED datasheet的中文翻译.
  • 0.96寸OLED显示屏驱动手册SSD1306

    千次阅读 2021-02-08 08:20:19
    SSD1306必须在发送或者接收数据前,识别到IIC总线上的从地址。设备必须回复从地址通过从地址位(SA0位)并且配置读写选择位(R/W 位)以一个字节的格式。 如: b7 b6 b5 b4 b3 b2 b1 b0 0 1 ...

    MCU IIC接口

     

     

    IIC通信接口由从地址位SA0,IIC总线数据信号SDA(输出SDAout/D2和输入SDAin /D1)IIC总线时钟信号SCLD0)。不管是数据线还是时钟线都需要连接上拉电阻。RES#是用来初始化设备的。

     

    a. 从地址位(SA0

     

    SSD1306必须在发送或者接收数据前,识别到IIC总线上的从地址。设备必须回复从地址通过从地址位(SA0位)并且配置读写选择位(R/W 位)以一个字节的格式。

    如:

    b7b6 b5b4b3b2b1b0
    01110SA0SA0R/W#

    “SA0”位提供一个额外的从地址位。不管是0111_100”还是“0111_101”,都可以被选择为SSD1306的从地址。D/C#引脚作为SA0为从地址选择。

    R/W#”位是被用来决定IIC协议的工作模式,R/W#=1时,为读模式,R/W#=0时,为写模式。

     

    b. IIC总线数据信号(SDA

     

    SDA作为通讯通通道在发送器和接收器之间,数据和应答信号在SDA线上被发送。

    需要注意的事,ITO 轨道电阻和SDA引脚的上拉电阻变成一个潜在的分压器,结论就是,应答可能不会达到有效的低电平,在SDA线上。

    SDAin”和“SDAout”是绑定在一条SDA线上,当SDA线为SDAin模式时,SDAout被屏蔽,当SDAout使用时,应答信号将被IIC总线忽略。

     

    c. IIC总线时钟信号(SCL

     

    IIC总线上的信息传送是根据SCL时钟信号,每一次数据为的发送都发生在一个单独的SCl时钟周期内。

     

     

    IIC总线写数据

     

     

    IIC总线协议允许数据和命令在设备间的通讯。时序如下:

     Co:连续位 D/C#:数据/命令选择位 ACK:应答信号 SA0:从地址位

    R/W:读写选择位 S:开始条件 P:停止条件

     

    IIC写模式

    1. 主设备开始数据通讯通过开始条件,开始条件的定义如下图。开始条件发生在SCL高电平期间,SDA产生一个下降沿的跳变。

     

     

     

     

    2. 从地址紧跟着开始信号,用于设备从设备。对于SSD1306来说,从地址可能是“b0111100”或者“b0111101”。通过改变“SA0位”为01,(D/C引脚作为SA0)。

    3. 写模式发生在R/W#位是低电平。

    4. 应答信号在接收到一个字节的数据后有从设备产生,包括从地址和R/W#位,参考下面关于应答信号的图示。应答信号定义为在SCL时钟周期的高电平期间SDA拉低。

     

     

    5. 在从地址发送结束后,不管是控制字节还是数据姐姐都可以发送通过SDA线。一个控制字节主要包括Co位和D/C#位在六个0后,

     

    A. 如果Co位为低电平,发送的后续信息只能是数据字节。

     

    B. D/C#位决定下一个数据字节是数据还是命令字节,如果D/C#字节设置为低电平,这意味着下一个字节是命令字节,如果D/C#为是高电平,下一个数据字节是数据字节,将被存储在GDDRAM中,GDDRAM的列地址指针在每一个数据写之后自加一。

     

    6. 应答为在接收到一个数据字节或只命令字节后产生。

     

    7. 写模式在接受到停止信号之后结束。停止条件定义如下图所示,停止信号发生在SCL高点平期间SDA的上升沿,作为停止信号。

     

     

     

     

    2. 命令解码器

     

    这个模块用来决定输入的到底是数据还是命令,通过D/ C#位来判断。

    如果D/C#是高电平,D[7:0]是作为显示数据写在图像数据随机存储器中(GDDRM),如果是低电平,输入的数据是被理解为命令。然后数据输入被解码并且写在相应的命令寄存器中。

    2. 振荡器电路和显示时间发生器

    这个模块是一个片上低功耗RC振荡电路。工作时钟(CLK)可以由内部振荡器产生或者外部时钟源(CL引脚),通过引脚CLS选择,如果CLS引脚被拉到高电平,内部的时钟被选择,CL应该开路,将CLS引脚拉低则不使用内部振荡电路,这时为了工作正常一定要连接CL引脚。当内部振荡器被选择时,输出频率Fosc由命令D5h A[7:4]改变。

    显示时序发生器的显示时钟(DCLK)源于CLK。分频系数D可以通过命令D5H 1变到16

      DCLK=Fosc/D

    显示帧频率由以下公式决定

     

      *   D代表时钟分频率,通过命令D5H A[3:0]决定,范围是从116.

    *K是每行的显示时钟,该值源于

    K=1周期+2周期+BANK0脉宽 =2+2+54(电源复位时)

    (详情参考“段驱动器/公用驱动器”里的“相位”)

      *多路复用比

    通过命令A8H配置,复位值是(64MUX)。

    *   Fosc是振荡器频率,可以通过命令D5h [7:4]改变,这个值越大,设置的最终频率越高。

    FR  synchronizationFR 同步)

    FR同步信号可以避免发生撕裂效应。

     

    向OLED驱动器写一个新的图片的开始时间依赖于MCU的写速度,如果MCU可以完成写一帧图片在一个帧周期内,这个MCU被分类位高速写MCU。对于MCU需要更长的时间完成写操作(超过一个帧周期但每到两个帧周期),就是慢速的一种了。

       对于高速写微控制器:MCU应该开启向ram里写一个新的帧数据紧跟在FR的上升沿之后,并且应该在下一个上升沿到来之前完成。

      对于低速写微控制器:MCU在第一个下降沿之前开始写,必须在第三个FR脉冲上升沿到来之前完成。

    复位电路

    1. 显示管关

    2. 配置为128*64显示模式

    3. 正常的短和显示列地址和行地址映射(SEG0映射到地址00hCOM0映射到00h)。

    4. 在串行接口上清除移位寄存器数据

    5. 显示开始线设置在RAM地址0

    6. 列地址计数器设置为0

    7. 正常的com输出扫描方向

    8. 反向控制寄存器设置为7Fh

    9. 正常显示模式(等同于命令A4h

     段驱动器和公共驱动器

     段驱动器给予128个电流源来驱动OLED板,驱动电流可以在0~100uA调节(256份),公共驱动器发生电压扫描脉冲。

    段驱动波形被分割成三相:

    1. 在相1OLED上一个图片的像素放电为了准备下一个图像显示内容。

     

    2. 在相2OLED像素被驱动到目标电压,像素驱动到相当的对地电压,相2的周期可以被编程为116DCLK的长度。如果OLED像素的电容值更大,需要更长的周期来给电容充电到达期望的电压值。

     

    3. 在相3OLED驱动选择使用电流源去驱动OLED像素,并且这时现在的电流驱动环节。

     

    完成这三相之后,驱动IC将回到相1去显示下一个图片数据,这三步环节连续执行去刷新显示在OLED上。

    在相3,如果电流驱动脉宽设置为50,在完成50DCLK周期在现在的驱动相,驱动IC将回到相1继续下一个显示。

    图片显示数据随机存储器(GDDRAM

    GDDRAM是一个位映射静态RAM,保持位模式直到显示在OLED上,RAM的大小是128*64位且RAM分成8页,从第零页达第七页,用来存128*64个单色点阵显示,如图:

     

     

     

    但一个数据字节被写在GDDRAM中,当前页的所有的行图像数据被填满(例,一列(8位)使得列地址指针填满),数据为b0被写到最顶的一行,当数据位D7被写到最底下一行。如图所示:

     

     

     

     

    为了灵活性,段复用和公共复用输出可以通过软件选择。

    为了显示的垂直移动,一个内部寄存器存储显示开始行可以被设置通过RAM中的数据位置映射到显示屏上。(命令D3h

    SEG/COM驱动块

    这个区块被用来将输入电源导出到不同级别的内部使用的电压和电流。

    *Vcc是主电源。

    *Vcomh 是取消选择水平,内部规定。

    * Iref是段电流驱动器Isegd的参考电流源。参考电流和颜色段电流的关系如下式:

     

    Iseg=Contrase/256*scale factor in which

     

    The Contrase(0~255)通过设置反向命令(81h),且比例因子是8.

    这个数量级的Iref通过改变电阻值来改变,连接咋Iref到地之间,如图所示,推荐电流范围12.50.2uA,以实现Iseg=100uA在最大值255时。

     

     

     

    Iref引脚电压为Vcc-2.5VR1的值可以由下式确定:

     

    Ired=12.5uAVcc=12V

     

     

     

    R1=Voltage at Iref-Vss/Iref

     

    =12-2.5/12.5uA=760k欧姆

     

    开机和关机条件

     

    下面用图解的方法给出了推荐的SSD1306开机和关机条件

     

    上电条件:

     

    1. VDD上电

     

    2. VDD电源稳定之后,设置RES#引脚为逻辑低至少3us然后拉高。

     

    3. RES#处于低电平状态之后,扥带至少3us,然后打开VCC

     

    4. Vcc稳定后,发送命令AFh,打开显示。SEG/COM100msTaf)后开启。

     

     

     

    POWER OFF条件:

     

    1. 发送命令AEh,关闭显示。

     

    2. 关掉Vcc

     

    3. 等待Toff,关闭VDD.(典型值toff=100ms)。

     

     

     

    注意:

     

    1. ESD保护电路连接达VDDVCC之间,当VCC关闭时VDDVCC要高。在图中用点线表示。

     

    2. VCC在关闭时时浮空的。

     

    3. 电源引脚(VDDVCC)在关闭情况下一定不要拉到地。

     

     

     

    命令列表

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

      

    注意:*”代表不需要管着一位

    位组合

    命令

    介绍

    D7D6D5D4D3D2D1D0

    状态寄存器读

    D[7]:保留

    D[6]:1”显示关“0”显示开

    D[5]:保留

    D[4]:保留

    D[3]:保留

    D[2]:保留

    D[1]:保留

    D[0]:保留

     

     

     

     

     

     

     

     

     

     

    注意

    除了命令表中给出的模式外,其他模式都禁止作为命令写入芯片;以防止意外的情况发生。

     

     

     

     

    数据写/

    为了从GDDRAM中读数据,在6800 并行模式下,要将R/W#WR#

    D/C#位都拉高,在8080并行模式下,ERD#)引脚拉低,D/C#引脚拉高。在串行模式下不提供数据读。

    GDDRAM在正常数据读模式下,列地址指针在没一次数据读之后自加一。

    同样,在第一次数据读前,需要读取虚拟字节。

    为了向GDDRAM中写数据,将R/W#位拉低且D/C#位拉高,在6800并行通讯和8080并行通讯模式下都可以。串行接口总是在写模式下。

    GDDRAM列地址指针在每一次写数据之后自加一。

    D/C#

    R/W#

    描述

    地址增加(自增)

    0

    0

    写命令

    不支持

    0

    1

    读状态

    不支持

    1

    0

    写数据

    支持

    1

    1

    读数据

    支持

    命令介绍

    一.基础命令

    1. 设置页地址模式的低起始地址(00h~0Fh

    这个命令说明了在页写模式下的显示数据RAM的低的8位列起始地址。列地址咋每个数据接收后自加一。

    2. 设置页地址模式下的高起始地址(10h~1Fh

    这个命令说明了在页地址模式下的显示数据RAM的高的8位列起始地址。列地址在每个数据接收后自加一。

    3. 设置内存地址模式(20h

    SSD1306中有三种不同的内存地址模式:页地址模式,水平地址模式和垂直地址模式。这个命令设置内存地址模式,选择其中的一个,“COL”意思是GDDRAM的列。

    页地址模式(A[1:0]=10x b

    页地址模式下,在显示RAM写过或者度过之后,列地址指针自加一,如果列地址指针到达最后的地址,列地址指针会回到开始地址且页地址指针不变。用户必须设置新的页且页地址为了几首下一个页RAM内容。

     

     

     

    在页地址模式下正常显示数据RAM读或写,如下的几步需要定义开始RAM接收指针位置

    *设置页开始地址在目标地址通过命令B0hB7h

    *设置低起始列地址指针通过命令00h~0Fh

    *设置高起始列地址指针通过10h~1Fh

    例如:如果页地址被设置到B2h,低列地址是03h,高列地址是00h,这就意味着在PAGE2SEG3开始,RAM接收指针定位如图所示,输入数据字节将被写在RAM中的第3列。

     

     

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

    在水平地址模式,RAM读或写后,列地址指针自动加一,如果列地址到达最后一列,列地址会复位到列开始地址并且页地址指针加1。页移动的顺序和水平地址模式列地址指针如图,当列地址指针和页地址指针都到达最后一个地址时,指针会复位到列开始地址和页起始地址。

     

     

     

    垂直地址模式(A[1:0]=01b)

     

    在垂直地址模式,显示RAM读或者写后,页地址自加一,如果页地址指针到达最后的页地址,页地址指针会复位到页起始地址并且列地址指针自加一。垂直地址模式页地址指针的移动顺序和列地址指针如图,当列地址指针和页地址指针都到达最后一个时,指针复位到页起始地址和列起始地址。

     

     

     

    在正常显示数据RAM读或写且处于水平或垂直地址模式时,要遵循一下几步来定义RAM访问指针位置:

     

    *通过命令21h设置列起始和结束地址到目标显示位置

     

    *通过命令22h来设置页起始和结束地址达目标显示位置

     

    4. 设置列地址(21h

     

    这个三字节命令描述了显示数据RAM列起始地址和结束地址。这个命令也可以设置;列起始地址的列地址指针。这个指针定义在GDDRAM中正在读或写的列地址。如果通过命令20h使能了水平地址增加模式,在完成读或写数据RAM后,下一个列地址会自加一。不管列地址指针有没有到最后一个列地址,他都会回到列起始地址并且行地址自加到下一行。

     

    5. 设置页地址(22h

     

    这个三字节命令描述了显示数据RAM的页起始地址和结束地址。也包括设置页起始地址指针,用来定义GDDRAM中的当前在读或写的页地址。如果使用命令20h设置为垂直地址模式,在完成读或写一页数据后,下一个页地址将自加一到下一个页地址,不管页地址指针有没有到最后一个页地址,都会被复位到起始页地址。

     

    该图展示了列地址和页地址指针移动顺序:列起始地址设置位2,结束地址设置位125,页起始地址设置为1,页结束地址为6,通过命令20h设置的水平地址增加模式,在这个例子中,GDDRAM可用列范围从第2列到第125列,从第一页到第六列,另外,列地址指针位置为2,页地址指针设置为1.在完成读或写整篇的数据后,列地址自加一到达下一个读或写的RAM中的位置,不管列地址指针是否到达最后的125列,都会回到最开始的第2列且页地址自加一。当到达最后的第六页和最后的125列时,页地址复位到1,列地址复位到2.

     

     

     

     

     

     

     

    6. 设置显示起始线

    这个命令通过选择063的一个值来设置显示起始线寄存器为了决定显示RAm的起始地址。当该值等于0时,RAM的第0行映射到COM0,当该值等于1时,第一行映射到COM0等等。

     

    7. BANK0设置对比度控制(81h

    这个命令设置显示的对比度,SSD1306将对比度分成256份,对应值为00h-FFh

    端输出电流在该值增加时增加。

    8. 设置段重映射(A0h/A1h

    这个命令改变显示数据列地址和段驱动器之间的映射关系。这允许OLED模块的灵活设计。

    这个命令值影响数据输入的顺序,数据早存在在GDDRAM中的数据不会改变。

    9. 整体显示开(A4h/A5h

    A4h命令使能根据GDDRAM中的内容显示输出。

    如果A5h命令发送后,通过发送A4命令,GDDRAM中的内容将重新出现。

    换句话说,A4h命令就是使整个重新开始显示。

    A5h命令强制打开整个显示,而不管显示数据RAM中的数据。

    10. 设置正常显示/反显(A6h/A7h

    这个命令设置正常显示或反显,在正常显示一个RAM数据“1”代表打开一个像素点,而在反显模式下,“0”代表点亮一个像素点。

    11. 设置复用率(A8h)

    该命令选择63种复用模式,范围是1663.输出块COM0~COM63被选择为相应的COM信号。

    12. 设置显示开/关(AEh/AFh

    这个单字节命令被用来打开OLED显示或关闭。

    当显示打开时,通过设置主配置命令打开被选择的电路。

    当显示关闭时,一些电路被关闭并且segmentcom输出为高阻态,以下命令用来设置显示的两种状态。

    AEh:显示关闭

    AFh:显示打开

     

     

    13. 设置页地址模式下的页开始地址(B0h~B7h

    这个命令设置在页地址模式下GDDRAM的页起始地址,范围(PAGE0~PAGE7)。

    14. 设置COM输出扫描方向(C0h/C8h

    该命令设置COM输出的扫描方式,在OLED模块设计上允许更多的灵活设计。另外,一旦该命令被发送,显示将立即生效。例如,如果在正常显示模式期间,该命令被发送,图像显示将立即垂直翻转。

    15. 设置显示偏移(D3h

    该命令是双字节命令,第二个命令描述显示开始行在COM0~COM63的映射(假设COM0是显示起始行,然后显示起始寄存器就等于0)。

    例如,为了把COM16移动16行到COM0,则设置第二个字节为010000b,下面两个表展示了设置命令C0h/C8hD3h

     

     

     

     

     

    16. 设置显示时钟分频率/振荡器频率(D5h

    该命令包括两个功能:

    *显示时钟分频率(D(A[3:0])

    CLK中设置分频率去产生DCLK(显示时钟)。范围116

    复位值位1

    *振荡器频率(A[7:4]

    如果CLS引脚被拉高时,可编程振荡器频率 Fosc就是CLK时钟源,这个四位数值包括16种不同的频率可供选择,默认值位1000b

    17. 设置预充电周期(D9h

    该命令被用来设置预充电周期的持续时间,以DCLK的整数倍位间隔,复位值等于2DCLK

    18. 设置COM引脚硬件配置(DAh

    该命令设置COM信号引脚配置去配合OLED的硬件电路布局。

    下表展示了COM引脚配置在不同的情况下(MUX=64):

     

    条件

    COM引脚配置

    1连续COM引脚配置(DAh,A[4]=0

    COM输出扫描方向:从COM0COM63C0h

    屏蔽COM/右重映射(DAh,A[5]=0

     

     

     

     

    2连续COM引脚配置(DAhA[4]=0

    COM输出扫描方向:从COM0COM63C0h),使能COM/右重映射

     

     

     

    3连续COM引脚配置(DAhA[4]=0

    COM输出扫描:从COM63COM0C8h

    屏蔽COM/右映射(DAh A[5]=0

     

     

     

    4连续COM引脚配置(DAhA[4]=0

    COM输出扫描方向:从COM63COM0C8h

    使能COM/右重映射(DAhA[5]=1

     

     

     

    5备用COM引脚配置(DAhA[4]=1

    COM输出扫描方向:从COM0COM63C0h

    屏蔽COM/右重映射(DAhA[5]=0

     

     

     

    6备用COM引脚配置(DAhA[4]=1

    COM输出扫描方向:从COM0COM63C0h

    使能COM/右重映射(DAhA[5]=1

     

     

     

    7备用COM引脚配置(DAhA[4]=1

    COM输出扫描方向:从COM63COM0C8h

    屏蔽COM/右重映射(DAhA[5]=0

     

     

     

     

     

    8备用COM引脚配置(DAhA[4]=1

    COM输出扫描方向:从COM63COM0C8h

    使能COM/右重映射(DAhA[5]=1

     

     

     

     

     

    19. 设置Vcomh取消选择等级(D8h

    该命令用来设置调压器输出

    20. NOPE3h

    无操作命令

    21. 状态寄存器读

    通过在数据读期间设置D/C#位为低电平执行。他允许MCU读取监视器的内部状态。在串行通讯模式下,没有状态读寄存器。

     

    二.图像加速命令

    1. 水平滚动设置(26h/27h

    该命令由五个连续字节设置水平滚动参数且决定滚动起始页,结束页,滚动速度。

    在执行该命令前,必须屏蔽水平滚动(2Eh),否则,RAM内容会被破坏。

    SSD1306水平滚动被设计成128列滚动,下列两个图表为例。

     

     

    连续垂直和水平滚动设置(29h/2Ah

    该命令包含六个连续字节为了设置连续垂直滚动参数和决定滚动开始页,结束页,滚动速度和垂直滚动偏移量。

    命令29h/2Ah之后的字节B[2:0],C[2:0]D[2:0]是用来设置连续垂直滚动,字节E[5:0]是用来设置连续垂直滚动偏移量,所有的这些字节一起设置连续对角线(垂直+水平)滚动。如果垂直滚动失调量字节E[5:0]被设置成0,这时就只有水平滚动就像命令26h/27h那样。

    在执行该命令之前必须要平布滚动(2Eh,否则,RAM中的内容会被破坏,显示效果如图:

     

     

     

    3. 屏蔽滚动(2Eh

     

    此命令停止滚动的进行,在发送2Eh命令之后,停止滚动,RAM中的内容需要重新写入。

     

    4. 开始滚动(2Fh

     

    该命令开始滚动且在滚动参数配置完成(命令26h/27h/29h/2Ah)之后执行,最后一次写的滚动设置命令将覆盖上一个滚动配置命令。

     

    在滚动开始之后下面这些操作是禁止的

     

    1,RAM操作(读或写)

     

    2. 改变水平滚动设置参数

     

     

    5. 设置垂直滚动区域(A3h

     

    该命令包括三个连续字节用来设置垂直滚动区域。为了连续垂直滚动功能(命令29h/2Ah),在垂直滚动模式下行的数量应该小于或等于MUX比。

     

     

     

    最大参数范围

    符号

    参数

    单位

    Vdd

    供电电压

    -0.3~+4

    V

    Vcc

    0~16

    V

    Vseg

    SEG输出电压

    0~Vcc

    V

    Vcom

    COM输出电压

    0~0.9xVcc

    V

    Vin

    输入电压

    Vss-0.3~Vdd+0.3

    V

    Ta

    工作温度

    -40~85

    Tstg

    存储温度范围

    -65~150

    最大范围是不可以超过的值,如果超过这些值得话,可能会损坏设备。基础工作配置应该参考电气特性列表或者引脚描述部分。

    该设备对光敏感,正常工作是应该注意避免在任何光源下暴晒该设备。该设备位非辐射防护设备。

    直流特征

    条件(除非另有说明):

    电压参考到Vss

    Vdd=1.65~3.3VTa=25

     

    符号

    参数

    测试条件

    最小值

    典型值

    最大值

    单位

    VCC

    工作电压

    -

    7

    -

    15

    V

    VDD

    逻辑供电电压

    -

    1.65

    -

    3.3

    V

    VOH

    输出逻辑高电平

    Iout=100uA3.3Mhz

    0.9xVDD

    -

    -

    V

    VOL

    输出逻辑低电平

    Iout=10uA3.3Mhz

    -

    -

    0.1xVDD

    V

    VIH

    输入逻辑高电平

    -

    0.8xVDD

    -

    -

    V

    VIL

    输入逻辑低电平

    -

    -

    -

    0.2xVDD

    V

    ICC

    VCC供电电流

    VDD=2.8VVCC=12VIREF=12.5uA

    无负载,显示开所有开

    对比度=FFh

     

    -

    430

    780

    uA

    IDD

    VDD供电电流

    VDD=2.8VVCC=12VIREF=12.5uA

    无负载,显示开,所有开,

    -

    50

    150

    uA

    ISEG

    段输出电流

    VDD=2.8VVCC=12V

    IREF=12.5uA,显示开

    对比度=FFh

    -

    100

    -

    uA

    对比度=AFh

    -

    69

    -

    对比度=3Fh

    -

    25

    -

    DEV

    段输出电流一致性

    DEV=ISEG-IMID/IMID

    IMID=IMAX+IMIN/2

    ISEG[0:132]=对比度在FFh时的段电流

    -3

    -

    +3

    %

    Adj.Dev

    输出电流一致性调节引脚(对比度FFh

    Adj Dev=(I[n]-I[n-1])/I[n]+I[n+1]

    -2

    -

    +2

    %

    13交流特性

    条件:

    电压参考到Vss

    VDD=1.65~3.3V25

     

    符号

    参数

    测试条件

    最小值

    典型值

    最大值

    单位

    Fosc

    显示时序发射器的振荡器频率

    VDD=2.8V

    333

    370

    407

    KHz

    Ffrm

    64MUX模式的帧频率

    128x64GDDRAM

    显示开,内部振荡器使能

    -

    Fosc/DxKx64

    -

    Hz

    RES#

    复位低脉宽

     

    3

    -

    -

    us

    注意:


    1. Fosc以内部振荡器为参考且命令D5h A[7:4]为定义值。

    2. D:分率(默认为1

    K:显示时钟的数量(默认是54

     

     

     

    6800系列MCU并行接口时序特性

    工作环境:(VDD-VSS=2.8V) 25

     

    符号

    参数

    最小值

    典型值

    最大值

    单位

    Tcycle

    时钟周期时间

    300

    -

    -

    ns

    Tas

    地址设置时间

    0

    -

    -

    ns

    Tah

    地址保持时间

    0

    -

    -

    ns

    Tdsw

    写数据设置时间

    40

    -

    -

    ns

    Tdhw

    写数据保持时间

    7

    -

    -

    ns

    Tdhr

    读数据保持时间

    20

    -

    -

    ns

    Toh

    输出失能时间

    -

    -

    70

    ns

    Tacc

    接收时间

    -

    -

    140

    ns

    PWcsl

    片选低脉宽时间(读)

    片选低脉宽时间(写)

    120

     

     

    60

    -

    -

    ns

    PWcsh

    片选高脉宽时间(读)

    片选高脉宽时间(写)

    60

     

     

    60

    -

    -

    ns

    Tr

    上升时间

    -

    -

    40

    ns

    Tf

    下降时间

    -

    -

    40

    ns

     

     

     

    8080系列MCU并行接口时序特性

    工作环境:VDD=2.8VTa=25℃)

    符号

    参数

    最小值

    典型值

    最大值

    单位

    Tcycle

    时钟周期时间

    300

    -

    -

    ns

    Tas

    地址设置时间

    10

    -

    -

    ns

    Tah

    地址保持时间

    0

    -

    -

    ns

    Tdsw

    写数据设置时间

    40

    -

    -

    ns

    Tdhw

    写数据保持时间

    7

    -

    -

    ns

    Tdhr

    读数据保持时间

    20

    -

    -

    ns

    Toh

    输出使能时间

    -

    -

    70

    ns

    Tacc

    接收时间

    -

    -

    140

    ns

    Tpwlr

    读低电平时间

    120

    -

    -

    ns

    Tpwlw

    写低电平时间

    60

    -

    -

    ns

    Tpwhr

    读高电平时间

    60

    -

    -

    ns

    Tpwhw

    写高电平时间

    60

    -

    -

    ns

    Tr

    上升时间

    -

    -

    40

    ns

    Tf

    下降时间

    -

    -

    40

    ns

    Tcs

    片选建立时间

    0

    -

    -

    ns

    Tcsh

    片选读信号保持时间

    0

    -

    -

    ns

    Tcsf

    片选保持时间

    20

    -

    -

    ns

     

     

              写周期时序         

     

     

     读周期时序

     

     

    四线串行接口时序特征

    工作环境:(VDD-VSS=2.8V25℃)

    符号

    参数

    最小值

    典型值

    最大值

    单位

    Tcycle

    时钟周期时间

    250

    -

    -

    ns

    Tas

    地址设置时间

    150

    -

    -

    ns

    Tah

    地址保持时间

    150

    -

    -

    ns

    Tcss

    片选建立时间

    120

    -

    -

    ns

    Tcsh

    片选保持时间

    60

    -

    -

    ns

    Tdsw

    写数据建立时间

    50

    -

    -

    ns

    Tdhw

    写数据保持时间

    15

    -

    -

    ns

    Tclkl

    时钟低电平时间

    100

    -

    -

    ns

    Tclkh

    时钟高电平时间

    100

    -

    -

    ns

    Tr

    上升时间

    -

    -

    15

    ns

    Tf

    下降时间

    -

    -

    15

    ns

     

     

    四线串行接口特性

     

     

     

     

    三线串行接口时序特征

    工作环境:(VDD-VSS=2.8V,25℃)

    符号

    参数

    最小值

    典型值

    最大值

    单位

    Tcycle

    时钟周期时间(写周期)

    250

    -

    -

    ns

    Tas

    地址设置时间

    15

    -

    -

    ns

    Tah

    地址保持时间

    10

    -

    -

    ns

    Tdsw

    数据设置时间

    10

    -

    -

    ns

    Tdhw

    数据保持时间

    20

    -

    -

    ns

    Tacc

    数据接收时间

    15

    -

    170

    ns

    Toh

    输出保持时间

    20

    -

    60

    ns

     

     

     三线串行接口特性

     

     

     

    IIC接口时序特征

    工作环境:(VDD-VSS=2.8VTa=25℃)

     

    符号

    参数

    最小值

    典型值

    最大值

    单位

    Tcycle

    时钟周期时间

    2.5

    -

    -

    us

    Thstart

    开始条件保持时间

    0.6

    -

    -

    us

    Thd

    数据保持时间(SDAout

    0

    -

    -

    ns

    数据保持时间(SDAin

    300

    -

    -

    ns

    Tsd

    数据设置时间

    100

    -

    -

    ns

    Tsstart

    开始条件设置时间(一个重复的开始条件相对应)

    0.6

    -

    -

    us

    Tsstop

    结束条件设置时间

    0.6

    -

    -

    us

    Tr

    数据引脚或者时钟引脚的上升时间

    -

    -

    300

    ns

    Tf

    数据引脚和时钟引脚的下降时间

    -

    -

    300

    ns

    Tidle

    在一个新的传送开始前始前的待电时间

    1.3

    -

    -

    us

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 51驱动SSD1306OLED显示屏(详细教程)

    千次阅读 2021-09-24 11:02:43
    前几天买了个0.96寸的OLED显示屏...查阅SSD1306手册,我们可以发现与其通信的方式。在这里我们使用的是I2C通信方式: 起始信号 写入芯片地址,一般为0x78或者0x7a 应答信号 写入控制命令(D/C#)选择数据模式....

    2022.7.3更新:分享一下文件自取

    链接:https://pan.baidu.com/s/1oEu-XXo5MCHzxKD0NWpjbA 
    提取码:4a42


    以下为原文:

    前几天买了个0.96寸的OLED显示屏,商家说支持I2C和SPI通信,就想着应该比较简单,于是兴冲冲准备大干一场。然而发现好像并没有想象中那么简单,还是有很多要点需要了解,下面细说。

    首先拿到SSD1306后,接上GND,VCC,SCL,SDA四条线后,屏幕是不会自动亮起的,需要CPU写入数据驱动它显示。查阅SSD1306的手册,我们可以发现与其通信的方式。在这里我们使用的是I2C通信方式:

    1. 起始信号
    2. 写入芯片地址,一般为0x78或者0x7a
    3. 应答信号
    4. 写入控制命令(D/C#)选择数据模式(0x40)/控制模式(0x00)
    5. 应答信号
    6. 写入数据/控制字(一个字节)
    7. 应答信号
    8. 结束信号

     由于一开始我们需要初始化SSD1306,因此我们需要先写入一些控制字来命令SSD1306的工作模式。鉴于指令集网上的中文手册中已有许多资料,这里不再赘述,只简单介绍一些用到的指令。

    OLED_WR_Byte(0xAE,OLED_CMD);//开启OLED屏显示

     以上是开启OLED屏关闭的命令,0xAE是控制字,OLED_CMD是写入命令。以下同理,便不再赘述

    OLED_WR_Byte(0x00,OLED_CMD);//设置列起始地址的高位
    OLED_WR_Byte(0x10,OLED_CMD);//设置列起始地址的低位
    OLED_WR_Byte(0xB0,OLED_CMD);//设置目标显示位置页的起始地址
    

     这三行代码用来控制显示的位置。这里就必须提一下SSD1306的内存地址模式,因为不同的模式下写入相同的数据输出的图像不同。SSD1306中有三种不同的内存地址模式:页地址模式,水平地址模式,垂直地址模式。

    这里我们使用的是页地址模式,其结构如下所示:

    可以看到,这是128*64的显示屏,其中横向分为128段(列),竖向分为8页,每页有8行。选择页地址模式后,数据的填充如下所示:

    在用户定义的地址写入数据后,列地址会自动加1,写完最后一列后,列地址指针会重置为列开始地址,而页地址不会变。至此,我们就很好理解上述的三行命令,其中0x00和0x10设置了列起始地址为0,而0xb0则设置了页起始地址为0。

    OLED_WR_Byte(0x81,OLED_CMD); //设置显示的对比度(00H~FFH)
    OLED_WR_Byte(0xFF,OLED_CMD);//对比度为256
    OLED_WR_Byte(0xA1,OLED_CMD);/设置Segment重映射
    OLED_WR_Byte(0xA6,OLED_CMD);//设置正常显示
    OLED_WR_Byte(0xA8,OLED_CMD);//设置复用率(16~63)
    OLED_WR_Byte(0x3F,OLED_CMD);//设置复用率为63
    OLED_WR_Byte(0xC8,OLED_CMD);//设置COM输出扫描方向
    OLED_WR_Byte(0xD3,OLED_CMD);//设置显示偏移
    OLED_WR_Byte(0x00,OLED_CMD);//偏移量为0
    OLED_WR_Byte(0xD5,OLED_CMD);//设置时钟分频率(1~16),振荡器频率
    OLED_WR_Byte(0x80,OLED_CMD);//0~3位为时钟分频率(1),4~7位为振荡器频率(1000)
    OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    OLED_WR_Byte(0x05,OLED_CMD);//
    OLED_WR_Byte(0xD9,OLED_CMD);//设置重充电周期
    OLED_WR_Byte(0xF1,OLED_CMD);//
    OLED_WR_Byte(0xDA,OLED_CMD);//设置COM引脚硬件配置
    OLED_WR_Byte(0x12,OLED_CMD);//
    OLED_WR_Byte(0xDB,OLED_CMD);//设置Vcomh取消选择水平
    OLED_WR_Byte(0x30,OLED_CMD);//
    OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    OLED_WR_Byte(0x14,OLED_CMD);//
    OLED_WR_Byte(0xAF,OLED_CMD);//打开OLED显示

    以上我们就把OLED初始化完成了。接下来我们可以开始写显示函数了。

    	void OLED_Set_Pos(unsigned char x, unsigned char y) 
    { 	OLED_WR_Byte(0xb0+y,OLED_CMD);//设置目标显示位置页起始地址
    	OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//设置列起始地址高位
    	OLED_WR_Byte((x&0x0f),OLED_CMD);//设置列起始地址低位 
    }   //起始列为x

    这里我们先写一个设置坐标的函数,方便后面调用。

    1.显示一个字符的函数如下:

    void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
    {      	   //8x16规格
    	unsigned char c=0,i=0;	
    	c=chr-' ';//得到偏移后的值
    		      //' '为ASCII码第32个			
    	if(x>Max_Column-1)
            {
            x=0;y=y+2;//如果x大于最大列,则置0,y+2?
            }
    	if(Char_Size ==16)
            {
    		OLED_Set_Pos(x,y);//起始列为x,起始页为y	
    		for(i=0;i<8;i++)
    		    {
                OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);//第c*16行前半行的数据
                }
    		OLED_Set_Pos(x,y+1);//换下一页
    		for(i=0;i<8;i++)
    		    {
                OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);//后半行数据
                }
    		}
    	else {	
    			OLED_Set_Pos(x,y);
    			for(i=0;i<6;i++)
    			OLED_WR_Byte(F6x8[c][i],OLED_DATA);
    		}
    }

    由于规格为8*16,因此我们需要16个16进制数来表示一个字符,表的一部分如下:

     其中最后一个十进制数为所在数组中的第几行,即字符减去偏移量32后的十进制序号。

    上图为SSD1306页地址模式下单个字符的写入模式。

     2.显示一个汉字的函数如下:

    void OLED_ShowCHinese(u8 x,u8 y,u8 no)
    {   //16*16   			    
    	u8 t,adder=0;
    	OLED_Set_Pos(x,y);	
        for(t=0;t<16;t++)
    		{
    				OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);//字模数组
    				adder+=1;
         }	
    		OLED_Set_Pos(x,y+1);	
        for(t=0;t<16;t++)
    			{	
    				OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    				adder+=1;
          }					
    }

    可以看到,显示汉字与显示字符的方式大同小异,只是汉字为16*16的规格。

     利用取模工具生成汉字的字模,再利用以上函数,就可以显示汉字。

    3.如果要显示BMP图片,也需要用取模工具取模,再利用函数即可实现。

    void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    { 	
     unsigned int j=0;
     unsigned char x,y;
      
      if(y1%8==0) y=y1/8;      
      else y=y1/8+1;
    	for(y=y0;y<y1;y++)
    	{
    		OLED_Set_Pos(x0,y);
        for(x=x0;x<x1;x++)
    	    {      
    	    	OLED_WR_Byte(BMP[j++],OLED_DATA);	    	
    	    }
    	}
    } 
    //128*64

    以上基本就可以实现SSD1306的显示功能,当然,有很多汉字和图片需要自己用取模工具(例如PCtoLCD2002)去取模。

    以上就是SSD1306的显示功能的实现过程,不足之处,还望担待。

    展开全文
  • BSP-SSD1306.rar

    2020-04-23 12:23:54
    SSD1306-OLED驱动芯片中文手册描述,文档来自互联网公开信息,非常好的资料,如有任何问题请反馈。
  • 0.96oled屏,驱动ssd1306 一些不常用的命令用法和效果

    万次阅读 多人点赞 2019-05-23 16:45:21
    0.96oled一般用ssd1306驱动,ssd1306的指令丰富,但是在平常显示使用默认的初始化命令,之后就是读写显示数据了,网上的例程很多,除了常用的命令,有些命令在一些场合也有用。 初始化函数例子: //OLED显示模块...
  • IIC-OLED显示屏资料(SSD1306) 0.96.zip
  • SSD1306资料.rar

    2019-12-26 20:54:03
    0.91寸 OLED SSD1306资料(包含英文/中文数据手册/iic逻辑时序图/代码/上位机),供学习下载
  • SSD1315官方正式版Datasheet,新一代OLED驱动芯片可替代SSD1306,尺寸更小,显示区域不变,点阵124x64。
  • 0.96寸OLED屏幕控制器SSD1306详解

    千次阅读 2021-12-12 13:07:22
    这一篇将在前面的基础上对这个屏幕进行详细讲解,尤其是一些屏幕控制器SSD1306比较重要的命令。 根据第9节COMMAND TABLE进行描述 (Fundamental Command Table) 0X81 xx: 根据命令描述,这是一个双...
  • OLED显示屏(SSD1306)I2C驱动仿真 首字母缩写词“OLED”代表有机发光二极管 - 一种使用 LED 的技术,其中的光由有机分子产生。 这些有机 LED 用于制造被认为是世界上最好的显示面板。 OLED 显示器是通过在两个导体...
  • 目录硬知识SSD1306简介I2C 接口从机...手册SSD1306-OLED驱动芯片中文手册 硬知识 SSD1306简介        SSD1306 是一个单片 CMOS OLED/PLED 驱动芯片,可以驱动有机/聚合发光二极管
  • OLED(SSD1306)驱动

    热门讨论 2013-07-29 19:12:32
    SSD1306的OLED上显示字符、汉字、画点、画线、画圆的驱动函数,以及一个基于MSP430单片机的各个功能的测试文件。 整个文件采用模块化的划分方式,程序清晰容易阅读,适用于对OLED不熟悉的初学者直接移植使用,非常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,159
精华内容 463
关键字:

ssd1306中文手册

友情链接: CHECKER_.rar