用stm32控制oled显示字符,只有一个oled模块,编程过了,仿真时oled黑屏,怎么解决?程序在网上改的


重制,统一了SPI版和I2C版本的代码

  1. 主机设备通过开始条件初始化数据通讯。开始条件的定义在下面的图中展示。开始条件通过将 SDA 从高拉低而 SCL 保持高建立。
  2. 写模式的建立是通过设置 R/W#为到逻辑 0 实现的。
  3. 应答位信号将在接收到一个字节的数据后发生包括从机地址和 R/W#位。可以参考下面的应答位信号的图示。应答位的定义是在应答位相关的时钟脉冲的高周期中把 SDA 线拉低。
  4. 传输完从机地址之后,控制字节或数据字节开始通过 SDA 传输。一个控制字节主要由
    CO 和 D/C#位后面再加上六个 0 组成的。
    a) 如果 CO 为设为逻辑 0,后面传输的信息就只包含数据字节。
    b) D/C 位决定了下个数据字节是作为命令还是数据。如果 D/C#位设为 0,下一个数据
    就是命令。如果 D/C#位设为 1,下一个数据就是数据,将会存在 GDDRAM 中。GDDRAM 列地址指针将会在每次数据写之后自动加 1.
  5. 应答位将会在接收到每个控制字节或数据字节之后发生
  6. 写模式会在用了停止条件之后结束。停止条件:将 SDA 从低拉高,而 SCL 保持高。


请注意数据位的传输是有限制的
8. 数据位,在每个 SCL 脉冲阶段传输,必须在时钟脉冲高周期内保持稳定状态。可以参考
下面的图示。除了开始或停止条件,数据线只能在 SCL 为 LOW 的时候转换状态。

晶振电路和显示时间发生器

当 RES# 输入为 LOW 时,芯片初始化为下面的状态:

  1. 在串口中清除移位寄存器数据
  2. 显示开始行设置为显示 RAM 地址 0
  3. 正常扫描 COM 输出方向
  4. 对比度控制寄存器设为 7Fh
  5. 正常显示模式(等同于 A4h 命令)
全部显示开启(A4h/A5h)
设置正常/反相显示(A6h、A7h)
设置显示关、开(AEh、AFh)


水平滚动设置(26h 27h)

       这个命令是由五个连续字节来设置水平滚动参数和决定滚动开始页,结束页和滚动速度的。在声明这个命令前,水平滚动必须用命令(2Eh)关闭,否则,RAM 中的内容可能被损坏。SSD1306 水平滚动是为 128 列滚动设计的。下面的两张插图演示了滚动的效果:

持续垂直和水平滚动设置(29h 2Ah)

       这是一个由六个连续字节组成的命令,用来设置持续水平滚动参数和决定滚动开始页,结束页,滚动速度和垂直滚动偏移的。

下面的命令在滚动激活后是禁止的:

  1. RAM 访问(数据读写)
设置垂直滚动区域(A3h)

       这个命令由三个连续的字节组成用来设置垂直滚动区域。对于持续垂直滚动功能(命令 29h 2Ah),垂直滚动的行数可以设置的更小或等于最大复用率。


设置低列开始地址作为页地址模式(00h~0Fh)
设置高列开始地址作为页地址模式(10h~1Fh)
设置内存地址模式(20h)

       SSD1306 中有三种不同的内存地址模式:页地址模式,水平地址模式,垂直地址模式。这个命令将内存地址模式设置成这三种中的一种。在这里 COL 的意思是图形显示数据 RAM 列。
       在页地址模式下,在显示 RAM 读写之后,列地址指针自动加一。如果列地址指针达到了列的结束地址,列地址指针重置为列开始地址并且也地址指针不会改变。用户需要设置新的页和列地址来访问下一页 RAM 内从。页地址模式下 PAGE 和列地址指针的移动模式参考下图
在正常显示数据 RAM 读或写和页地址模式,要求使用下面的步骤来定义开始 RAM 访问的位置:

  1. 通过命令 B0h 到 B7h 来设置目标显示位置的页开始地址
  2. 通过 00h~0Fh 来设置低开始列地址的指针
  3. 通过命令 10h~1Fh 来设置高开始列地址

       在水平寻址模式下,当显示 RAM 被读写之后,列地址指针自动加一。如果列地址指针达到列的结束地址,列地址指针重置为列的开始地址,并且页地址指针自动加 1。水平寻址模式下页和列地址的移动顺序如下图所示。当列地址和页地址都达到了结束地址,指针重设为列地址和页地址的开始地址。
       在垂直寻址模式下,当显示 RAM 被读写之后,页地址指针自动加一。如果页地址达到了页的结束地址,页地址自动重置为页的开始地址,列地址自动加一。页地址和列地址的移动顺序如下图所示。当列地址和页地址都达到结束地址后,指针自动重置为开始地址。

  1. 用 21h 命令设置目标显示位置的列的开始和结束地址;
  2. 用命令 22h 设置目标显示位置的页的开始和结束地址

       这个三字节命令指定了显示数据 RAM 列开始地址和结束地址。这个命令也会设置列地址指针到列开始地址。这个指针用于定义当前读写的显示数据 RAM 列地址。如果用 20h 命令开启了水平寻址命令,在完成读写一个列数据之后,该指针就会自动指向下一列地址。当什么时候列地址指针完成了访问列结束地址,它就会返回到列开始地址,和行地址增加到下一行。

       这个三字节的命令指定了显示数据 RAM 页的开始和结束地址。这个命令同时也设置了页地址指针到页开始地址。这个指针用来定义在图像显示数据 RAM 中当前读写的地址。如果当前是垂直寻址模式,在读写完一页数据之后,会自动增加到下一页地址。当页地址指针完成访问结束页地址之后,会重置到开始页地址。
       下面的插图展示了列和页地址指针的移动方式:列开始地址设置为 2,列结束地址设置为125,页开始地址设置为 1,页结束地址设置为 6;通过命令 20h 使能水平地址增加模式。在这个案例中,图形显示数据 RAM 可访问的地址就只有从列 2 到列 125,页 1 到页 6。另外,列地址指针被设为 2 页地址指针被设为 1.在完成读写数据中的一个像素后,列地址自动加 1
到下一个 RAM 位置进行下一次读写操作。当列地址指针完成访问结束列地址 125 之后,重新回到列 2,页地址自动加 1。当结束页 6 和结束列 125RAM 位置被访问过之后,页地址设回 1,列地址设回 2。

设置页开始地址作为页寻址模式(B0h~B7h)

硬件配置(面板分辨率和版面相关)命令表

设置显示开始行(40h~7Fh)
设置显示偏移(D3h)
设置 COM 引脚硬件配置(DAh)

这个命令设置 COM 信号引脚配置来匹配 OLED 面板硬件层。下面的表展示了不同条件下的COM 引脚配置(复用率为 64)

时钟和驱动方案设置命令表

设置显示时钟分频率、振荡器频率(D5h)
}

公司简介:深圳市奥视特科技有限公司由业内资深人士共同创建而成,主营产品包括全系列工控设备液晶屏, 车载液晶屏, PDA液晶屏, 扫描仪液晶屏, 游戏机液晶屏/GPS液晶屏, 数码相...

}

我要回帖

更多关于 串口stm32丢字符 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信