OLED(Organic Light-Emitting Diode,中文叫有机发光二极管)因其自发光、超高对比度、超广视角等特性,在智能设备、可穿戴设备和高端显示领域广泛应用。
本篇文章将系统讲解OLED的驱动原理、驱动手册分析方法、屏幕驱动流程以及OLED显示图片的实现方法。
一、OLED驱动原理
1.1 原理概述
OLED面板由许多微小的发光单元(像素点)组成,每个像素点都能自己发光。驱动电路的作用,就是根据控制器的指令,精确地给每个像素提供正确的电压和电流,从而实现不同颜色和亮度的显示效果。
什么是OLED驱动IC
每块OLED屏幕背后,都有一颗或者几颗专门的芯片(驱动IC),例如SSD1306、SH1106、SSD1351等。这些芯片内置了寄存器、存储器和电荷泵,专门负责管理像素。
接下来我们就以分析SSD1306的手册进行分析
引脚讲解
BS[2:0]位:就是选择 MCU(单片机)和显示驱动器之间的通信接口模式。这个配置通常由硬件引脚
VDD:核心逻辑电源引脚。
VCC:用于驱动 OLED 屏幕的电源引脚,也是最高电压源引脚。
VSS:地(GND)引脚。
D/C#:数据/命令选择引脚。(拉高传输数据,拉低传输命令)
RES#:复位引脚,用于重置 SSD1306 驱动 IC。
CS#:片选引脚,用于选择目标设备
下图是SSD1306 在 SPI 模式下的数据传输时序
SPI 模式下,通过 时钟信号(SCLK) 和 数据线(SDIN) 如何将数据传送到 OLED 屏幕:
CS# 确保你选中正确的设备。
D/C# 用来区分是发送命令还是显示数据。
然后通过 SCLK 时钟信号,逐位(从最低位到最高位)传输数据到 SDIN,确保正确显示。
接下来SSD1306 中的 Graphic Display Data RAM (GDDRAM)
(可以理解为显存)
1. GDDRAM (Graphic Display Data RAM)
GDDRAM 是 SSD1306 显示控制器内部的一个内存区域,用于存储显示内容(如图像、文字等)。它是 OLED 屏幕显示的“数据源”,也就是说,显示的每个像素值都是从 GDDRAM 中读取出来的。
SSD1306 的 GDDRAM 总共有 128 x 64 像素(共 8192 个像素点),但是由于其内部存储的特殊方式,实际上它被划分为 多个页面。每个页面包含 128 列和 8 行像素,每一行有 8 个像素。
2. GDDRAM 页结构
GDDRAM 是按照 页(Page) 来组织的,SSD1306 使用 页面寻址模式 来管理屏幕上的数据。
GDDRAM 的总大小是 128 x 64,所以它被划分为 8 页(Pages),每一页包含 128 列,具体每一页的内容表示屏幕的一行高度(8 行)。
每个页面的大小是 128(列数) x 8(行数),这样总共有 8 页,每页 128 字节,总共占用 1024 字节(8 页 * 128 字节 = 1024 字节)。因此,GDDRAM 的 1024 字节分别存储了 8 页的数据。
那么我们如果对OLED进行操作,设置起始位置,首先设置起始页位置,接下来就是列位置,但是数据为一个字节,前四位位命令,后四位是参数。
所以我们现在比如在第三页,107列设置为起始位置,就是一下步骤
首先设置起始页地址
0xB3 //起始的页地址
在107列的话,将107对应二进制0110 1011 前四位为高列地址,后四位为低列地址
设置列地址低四位
0x0B
设置列地址高四位
0x16
4. 基础命令(Fundamental Commands)
SSD1306 使用一系列基础命令来配置显示屏、控制 GDDRAM、设置显示模式等。以下是一些关键的基础命令。
4.1 开启和关闭显示
0xAE:关闭显示。通过此命令,屏幕的显示内容将被关闭,虽然 GDDRAM 中的内容仍然存在。
0xAF:开启显示。通过此命令,恢复 OLED 屏幕的显示。
4.2 地址设置命令
这些命令用于设置 GDDRAM 中的列地址和页地址,允许我们在不同位置显示内容。
0x21:设置列地址范围。后跟两个字节,指定开始和结束列地址(从 0 到 127)。
例如:
0x21 0x00 0x7F
设置列地址为从 0 到 127。
0x22:设置页地址范围。后跟两个字节,指定开始和结束页地址(从 0 到 7)。
例如:
0x22 0x00 0x07
设置页地址为从 0 到 7。
4.3 显示模式配置
0x20:设置显示内存寻址模式。后跟一个字节来选择寻址模式:
0x00
:水平寻址模式(Horizontal Addressing Mode)0x01
:垂直寻址模式(Vertical Addressing Mode)0x02
:页面寻址模式(Page Addressing Mode)
4.4 对比度设置
0x81:设置显示对比度。后跟一个字节来调整显示的对比度(亮度)。值范围是 0x00(最暗)到 0xFF(最亮)。
4.5 复位命令
0xRESET:复位显示控制器,使得 OLED 屏幕恢复到默认状态。
5. 如何在 GDDRAM 中写入数据
要在 SSD1306 中显示图像或文字,首先需要通过相应的命令设置列地址和页地址,然后将图像的每个像素数据写入 GDDRAM。