0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

OLED模块(一)

修罗 2025-08-06 253 0条评论 51单片机

首页 / 正文

OLED模块-I2C协议

OLED模块概述

1.1 OLED简介

OLED(Organic Light-Emitting Diode,有机发光二极管)显示屏由许多微小的发光二极管构成,每个发光二极管就对应着屏幕上的一个像素,通过控制二极管的亮灭就能在屏幕上显示图像或文字。

image-20250805134000383.png

​ 按照驱动方式划分,OLED显示屏分可分为两类,分别是PMOLED(Passive Matrix,被动矩阵)和AMOLED(Active Matrix,主动矩阵)。

  • PMOLED的驱动方式和LED点阵类似,每次只能点亮一行或者一列,需要快速的逐行或者逐列扫描来显示内容。
  • AMOLED屏幕上的每个像素点都有一个单独的控制电路,可以独立进行控制。

​ 本文使用的是一块PMOLED(Passive Matrix,被动矩阵)屏,其分辨率为128x64

1.2 驱动芯片

​ 市面上的多数OLED显示屏都会带有驱动芯片,驱动芯片的核心作用是控制每个像素点的亮灭以显示图像或文字,此外它还会提供数据接口(例如I2C),用于接收屏幕上要显示的数据。驱动芯片的存在使得我们可以通过简单的接口控制OLED显示屏,大大简化了开发和控制流程。

​ 本文所使用的这块OLED屏的驱动芯片为SSD1315,由于我们需要通过它来控制OLED显示的内容,所以需要重点学习它的用法。

1.2.1 基本工作原理

image-20250805135022641.png

  • 工作流程

image-20250805135041752.png

1.2.2 IIC接口

​ 虽然SSD1315MCU Interface支持多种通信协议,但我们所选用的OLED显示模块只暴露出了IIC接口,如下图所示。

image-20250805154507847.png

​ 由于OLED显示屏的作用是显示数据,它对于MCU来讲更多的是一个输出设备,因此我们只需关注如何向SSD1315写入数据即可。下面是写数据的时序图:

image-20250805160734791.png

image-20250805160750191.png

说明:SSD1315的地址,高6位是固定的011110,最后1位SA0可由用户自定义。参考OLED模块手册,可得最后1位的默认值为0R/W#(读写标识)应为0。(增加或移出相应电阻可以更改高低电平实现修改地址)

结论:地址 + 读写标识应为01111000(0x78)

image-20250805161044200.png

image-20250805161055295.png

说明:

MCUSSD1315发送的数据可分为两类 -- ControlbyteData byte

  • Data byte: 数据字节,其内容可能是Data(显示数据),也可能是Command(控制命令)。
  • Control byte: 控制字节,在Data byte之前发送,用于声明后续Data byte内容的类型和格式,该字节只有高2位有效,其余6位均为0;

    D/C#(Data/Command): 用于声明后续的Data byteData还是Command1表示Data,0表示Command

    Co(Contination Bit): 用于声明后内容是否连续。0表示连续。此时后边可以连续发送多个Data bvte;1表示不连续,此时后边只能发送一个Data byte

    需要注意的是,当Co设置0时,本次通信中后续所有的字节都会被视作Databyteco位的具体用法如下:

image-20250805161503802.png

image-20250805161539976.png

image-20250805161553592.png

image-20250805161606446.png

image-20250805161624798.png

image-20250805161635919.png

1.2.3 GDDRAM

GDDRAM的作用是存储显示数据,其容量是128×64 bit,每个bit对应着屏幕上的一个像素,该bit的值就能决定该像素的亮灭。

1.2.3.1 内存组织结构

​ 分为8页,每一页128x8个字节:

image-20250805161828151.png

每一页的结构

image-20250805162010918.png

写一个Data byte:从上往下,而不是从左往右

image-20250805162135838.png

1.2.3.2 内存寻址

​ 在了解了内存组织结构之后,我们还需掌握内存的寻址方式,这样才能在我们指定的位置写入指定的内容。

​ 向GDDRAM写入数据时是以byte为单位的,按照上述的内存组织结构, 定位一个byte,至少需要明确两点,分别是第几页(Page Address,页地址)第几列(Column Address,列地址)。因此GDDRAM内部设有两个指针, Page Address PointerColumn Address Pointer,分别指向当前要写入的页和列。为方便连续写入多个字节,每当成功写入一个字节后,Page Address Pointer或者Column Address Pointer会自动递增,指向下一个要写入的位置。

​ 根据指针递增逻辑的不同,GDFRAM提供了三种不同的寻址方式,分别是页寻址水平寻址垂直寻址,具体使用哪种模式,可以通过向SSD1315发送控制命令进行选择,具体命令如下:

image-20250805162725817.png

​ 下面逐一介绍三种寻址方式的工作原理。

  1. 页寻址

    这种寻址方式下,用户需要先向SSD1315发送控制命令设置页地址(例如Page1)和列地址(例如COL3),此时Page Address Pointer和Column Address Pointer就会指向对应的位置。之后便可开始连续发送数据,每成功写入一个字节,Column Address Pointer都会自动+1,而Page Address Pointer始终不变,如果写到当前页末尾,Column Address Pointer会回到当前页的第1列。

image-20250805175548475.png

设置页地址的命令如下: X三位表示0-7行

image-20250805175615357.png

设置列地址的命令如下: 两个字节拆开分别表示高位和低位,7位可以表示0-127列

image-20250805175651701.png

  1. 水平寻址

    这种寻址方式下,用户需要先向SSD1315发送控制命令,设置一个写入区域,具体来讲就是分别指定页的起始地址和结束地址(例如Page1~Page5)以及列的起始地址和结束地址(例如COL2~COL125)。此时Page Address Pointer和Column Address Pointer会指向该区域的左上角。之后便可开始连续发送数据,每成功写入一个字节,Column Address Pointer会自动+1,当到达目标区域的右侧边界时,Page Address Pointer便会自动+1。当写到目标区域的右下角时,两个指针会再次回到左上角。如下图所示。

  • 设置页地址范围的命令如下。

    如: 00100010 00000001 00000011 为1-3页

image-20250806102653806.png

  • 设置列地址范围的命令如下

    如:00100001 00000001 00000011 为1-3列

image-20250806102708838.png

  1. 垂直寻址

    这种寻址方式下,用户需要先向SSD1315发送控制命令,设置一个写入区域,具体来讲就是分别指定页的起始地址和结束地址(例如Page1~Page5)以及列的起始地址和结束地址(例如COL2~COL125)。此时Page Address Pointer和Column Address Pointer会指向该区域的左上角。之后便可开始连续发送数据,每成功写入一个字节,Page Address Pointer会自动+1,当到达目标区域的底部边界时,Column Address Pointer便会自动+1。当写到目标区域的右下角时,两个指针会再次回到左上角。如下图所示:
    image-20250806103207806.png

1.2.3.3 内存bit与屏幕像素映射关系

GDDRAM中的每个bit都对应着屏幕上的一个像素,但具体哪个bit对应着哪个像素,目前仍是不明确的,最理想的方式当然是每个bit和每个像素的位置完全对应,但默认情况下并非如此。

bit和像素之间的对应关系受两个环节的影响,第一个环节是GDDRAMSSD1315输出引脚(64个COM和128个SEG)的对应关系,第二个环节是SSD1315的输出引脚和OLED屏幕的连线方式。下面逐一分析。

  1. GDDRAMSSD1315输出引脚对应关系,默认映射关系如下:一一对应

image-20250806103719246.png

  1. SSD1315输出引脚和OLED屏幕对应关系,行和列都与GDDRAMSSD1315相反:

image-20250805150935252.png

  1. 为了保证设计的灵活性,SSD1315提供了重映射功能,用户可以通过控制命令来重新定义GDDRAM和输出引脚的对应关系,如下

image-20250806104109706.png

映射过后,GDDRAM行的0对应oled屏幕行的0,GDDRAM列的0对应oled屏幕的列0,我们让左上角的二极管亮,只需要将SEG0COM0定位的二极管亮即可;

  • 设置Segment重映射的命令如下:

    设置1即可让127映射为SEG0,从左到右127到0

image-20250806104506847.png

  • 设置Common重映射的命令如下:

    X3设置为1即可从上到下为63到0

image-20250806104516532.png

评论(0)


最新评论

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • @@5Qa2D

    1

  • 1

    1

  • 1

    1

日历

2025年09月

 123456
78910111213
14151617181920
21222324252627
282930    

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis