【嵌入式模块】OLED显示屏模块

前言

  OLED应该是除了LCD之外使用最为频繁的显示模块了,关于这个模块的使用网上也有很多非常详细的资料,本篇博客一是为总结,二是为记录。

参考链接

  • 0.96inch SPI OLED Module——资料非常详细,建议必须访问!
  • 吃透OLED显示原理——玩转OLED模块各种使用方法 – CSDN
  • SSD1306(OLED驱动芯片)指令详解【翻译版】- CSDN
  • 【常用模块】OLED显示模块(原理讲解、STM32实例操作)- CSDN——含并行传输
  • OLED概述

    基本原理

      拿到一个模块,我们首先要对这个器件的整体结构有一个框架式的理解。关于这一点,我十分建议查阅参考链接1中的规格书
      简单来说,常见的OLED都是基于芯片SSD1306的显示屏,一般为0.96inch,分辨率为128×64,即一行有128个像素点,一列有64个像素点,这些像素点都连接到SSD1306芯片的输出端上,而这些输出由SSD1306内部的GDDRAM(Graphic Display Data RAM)中数据决定,该RAM的大小刚好为1024字节,对应8192个像素点。因此,用户需要做的就是给SSD1306输入指令,并将需要显示的内容输出到GDDRAM中,从而来控制显示的内容。所以这个显示屏是不带字库的,需要使用取模软件来得到显示的二进制数据。
      电气方面,OLED兼容的电源电压为3.0~5.5V,所以是兼容3.3V和5V单片机的。

    原理图

      该模块的原理图如下所示:【文件来自参考链接1】

      从上图可以看出,可以通过调整内部的电阻和电容来实现不同通信协议。此外,OLED模块还可以采用并行传输的方式,和LCD12864一样。OLED支持8位68008位8080两种并行通信协议,不同通信协议的选择由BS0、BS1两个引脚控制。

      其对应关系如下表所示:

    引脚 4线SPI IIC 8位6800 8位8080
    BS0 0 1 0 1
    BS1 0 0 1 1

      本模块由于接线的原因,将并行数据输入输出端口接地,因而只能配置为4线SPI或IIC两种串行数据传输协议,而且,串行传输模式下,数据只能输入,不能输出,因此单片机引脚直接配置为输出模式即可。

    型号

      常见的OLED模块的型号除引出并行数据传输端口外的那种,一般是四根引脚或者7根引脚,如下图所示:


      其中,四根引脚的模块一般默认配置为IIC协议;七根引脚的模块默认协议为4线SPI,其中,D0对应SCK,D1对应SDA。RES为复位引脚,CS为片选引脚,低电平有效,DC为选择输入指令还是输入数据【DC=0时输入指令,DC=1时输入数据】。另外,还有一种OLED模块只有6根引脚,那是把CS和GND连接在一起,使该模块始终有效。

    OLED使用

    GDDRAM

      在使用OLED显示模块时,我们首先要了解其内部GDDRAM的结构,如下图所示:


      简而言之,该显示模块一共64行,可以分为8页(Page0 ~ Page7),每页8行(COM0 ~ COM7,COM8 ~ COM15,…),一共128列(SEG0~SEG127),每次显示时一次性至少显示8位,即一页中的一列,上面的为低位(LSB),下面的为高位(MSB),且低4位为列低地址,高4位为列高地址,之所以这样区分,是因为后面有具体的设置指令。

    三种工作模式

      通过设置指令,OLED模块可以配置为三种显示模式:页地址模式、水平地址模式、垂直地址模式,其实差别在于显示完本位置后,下一位要在哪显示的问题。

  • 页地址模式

      在页模式中,显示RAM读写完后,列地址指针自动加一。如果列地址指针到达了列地址尾部,列地址指针重新回到列地址开始的地方,但是页地址指针不变。用户要设置新的页指针和列指针来获取下一页RAM的内容。
  • 水平地址模式

       在水平地址中,显示RAM读写完后,列地址指针自动加一。如果列地址指针到达了列地址尾部,列地址指针重新回到列开始地址,同时页地址指针也加一。而PAGE和列地址指针扫描每页地址的模型在下面。当列地址指针和页指针都到达末尾时,两个指针会调回到列地址和页地址指针开始的位置(图中虚线所示)。
  • 垂直地址模式

      在垂直地址中,显示RAM读写完后,页地址指针自动加一。如果页地址指针到达了页地址尾部,页地址指针重新回到页开始地址,同时列地址指针也加一。而PAGE和列地址指针扫描地址的模型在下面。当列地址指针和页指针都到达末尾时,两个指针会调回到列地址和页地址指针开始的位置(图中虚线所示)。
  •   需要注意的是,OLED上电复位时的默认状态为页地址模式,而且这种也是最为常用的显示模式,因此可以看到很多OLED的代码中初始化时都没有配置这一项。

    指令的理解与使用

      初始化OLED时,需要给OLED模块传输相关的控制指令,这个指令即是指其内部芯片SSD1306的指令集,这个可以从参考链接1中下载得到,是一个英文版的数据手册。可以定位到COMMAND TABLECOMMAND DESCRIPTIONS两个章节中,查看所有的指令操作,如下图所示:

      上图中需要注意两点:1、要仔细看表头,区分不同类型的指令,一些比较复杂的指令,如果屏幕滚动类的指令可以暂时不看,提高效率;2、注意看指令的格式,有些指令只有一行,代表传输一个指令之后相关的设置就设置好了,有些指令有多行,类似于要先选中寄存器地址,然后向寄存器中写入数据,不过这些东西的传输都算是指令传输,不算是数据。

    常用指令

      本节简单总结一下常用的控制指令。



    如果设置的页地址低4位为0x03,高4位为0x11,则列地址为0x13(各取寄存器低4位组成一个字节)。



    如何使用

      掌握了OLED的基本控制指令,接下来就可以开始写程序了。一般来说,OLED程序有以下几个步骤:初始化->设置显示位置->输出显示数据
      其中,初始化时根据自己的需要选择对应的指令,下面是一份比较完整的初始化指令,仅供参考。其中有一部分是复位默认的状态,可以不写。【所以建议初始化前先复位】

      此外,设置显示位置即在页地址模式下输入页地址,和列地址低4位、高4位。

      至于显示数据,则需要根据实际情况和需要来显示了。从前文可知,每一次传输的数据和显示的数据都只能是8位,因此,如果要显示16×8(16行,8列)的数据,则必须要跨页显示,所以要定位到对应的位置来显示对应的数字。同样,如果需要显示图片,那么只需要使用取模软件来得到其16进制显示即可。但要注意取模的方式:从上到下8位(上面为低位,下面为高位)为一个字节,从左往右递增

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【嵌入式模块】OLED显示屏模块

    发表评论