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

本文详细介绍了基于SSD1306驱动芯片的OLED显示模块,包括基本原理、电气特性、显示模式及常用指令。OLED模块通常为0.96寸128x64分辨率,支持SPI和I2C通信,内部采用GDDRAM存储显示数据。文章还解析了OLED的三种显示模式:页地址模式、水平地址模式和垂直地址模式,并提供了初始化及显示数据的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

参考链接

OLED概述

基本原理

  拿到一个模块,我们首先要对这个器件的整体结构有一个框架式的理解。关于这一点,我十分建议查阅参考链接1中的规格书
  简单来说,常见的OLED都是基于芯片SSD1306的显示屏,一般为0.96inch,分辨率为128x64,即一行有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线SPIIIC8位68008位8080
BS00101
BS10011

  本模块由于接线的原因,将并行数据输入输出端口接地,因而只能配置为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位,因此,如果要显示16x8(16行,8列)的数据,则必须要跨页显示,所以要定位到对应的位置来显示对应的数字。同样,如果需要显示图片,那么只需要使用取模软件来得到其16进制显示即可。但要注意取模的方式:从上到下8位(上面为低位,下面为高位)为一个字节,从左往右递增

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录无知岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值