欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OLED驱动芯片SSD1306解读

程序员文章站 2022-07-04 18:51:46
...

驱动OLED实际上是控制的OLED的驱动控制芯片。一般常用的芯片SSD1306等。这里以此芯片为例解读一下,也是自己的扫盲片作为自己学习过程中的笔记。有不对的地方欢迎指出。大佬绕过!

一般我们购买一块OLED屏。一般的屏厂家帮我们设置好了好几种单片机与屏通信接口。比如:SPI (3线或4线)、IIC、6800接口、8080接口等。
默认是其中一种,但是我们相用其他的通信接口,我们只需简单的条线就可以实现。这其实还是控制的SSD1306的驱动芯片来实现的,与屏没有多大的关系。

/*****************************************************************************************************************************************************************

SSD1306是一个单芯片CMOS OLED/PLED驱动器与控制器,用于有机/聚合物发光二极管点阵图形显示系统。它由128段和64公地组成。这种集成电路专为普通阴极型OLED面板设计。
SSD1306嵌入了对比度控制、显示RAM和振荡器,减少了显示器的数量外部元件和功耗。它有256步亮度控制。数据/命令通过硬件可选的通用MCU 6800/8000系列兼容并行接口发送,I2C接口或串行外围设备接口。它适用于许多紧凑的便携应用程序,例如手机子显示器、MP3播放器、计算器等

***************************************************************************************************************************************************************/
注意:
(1)阴极OLED。这个是由芯片限制了OLED的极性。
(2)128段和64公共地----->横向128个点
纵向64个点
OLED驱动芯片SSD1306解读
OLED驱动芯片SSD1306解读
单片机接口的选择
SSD1306单片机接口由8个数据引脚和5个控制引脚组成。不同接口的pin分配模式如表8-1所示。在BS[2:0]引脚上通过硬件选择可以设置不同的MCU模式(BS[2:0]设置见表7-1)。

6800接口:

The parallel interface consists of 8 bi-directional data pins (D[7:0]), R/W#, D/C#, E and CS#
接口线:
6800双向数据接口有8个数据线,
一个R/W#(读写控制线【低电平表示写,高电平表示读】)、
一个D/C#(数据/命令选择线【低电平表示命令,高电平表示数据】)、
E(总使能线)、
CS#(片选【低电平有效】)。
OLED驱动芯片SSD1306解读
(1)R/W# 线,给低电平信号表示向芯片写数据,给高电平表示从芯片读数据。
(2)D/C#线,给低电平表示命令的读或写,给高电平表示数据的读或写。
图标的含义:
(1)在E引脚的下降沿期间:CS#低电平表示芯片选中(选中芯片是读写的前提):
R/W# 低电平-----D/C#低电平表示:写命令
R/W# 低电平-----D/C#高电平表示:写数据
R/W# 高电平-----D/C#低电平表示:读命令
R/W# 高电平-----D/C#高电平表示:读数据

8080接口:

The parallel interface consists of 8 bi-directional data pins (D[7:0]), RD#, WR#, D/C# and CS#。
接口线:
8个双向数据端口、
RD#(读使能【低电平有效】)、
WR#(写使能【低电平有效】) 、
D/C# (数据/命令选择【高电平数据,低电平命令】)
CS#(片选【低电平有效】)。

时序解读:当cs#保持较低时,wr#输入的上升边作为数据/命令写锁存信号
OLED驱动芯片SSD1306解读
OLED驱动芯片SSD1306解读
OLED驱动芯片SSD1306解读
写命令:CS#为低电平,D/C#为低电平,WR#为低电平,RD#为高电平。
片选信号发出选择从机----->给一个命令信号或者数据信号并保持----->RD#读信号由高到低期间(制造一个下降沿)把要发送的数据或命令房嫂数据线上。


4线SPI:

The 4-wire serial interface consists of serial clock: SCLK, serial data: SDIN, D/C#, CS#. In 4-wire SPI mode
接口线:
SCLK:时钟线
SDIN:数据线
D/C#:数据或命令线(低电平命令线,高电平数据线)
CS#:片选线(低电平有效)
OLED驱动芯片SSD1306解读
OLED驱动芯片SSD1306解读
时序解读:
片选选中—>命令还是数据设置好---->设置时钟上升沿(SCLK拉低延时一段时间再拉高)期间把数据放到数据线上。

3线SPI:SCLK、SDIN、CS# 这三条线,而没有D/C# 线。 只允许写操作。时序操作与4线一样。

IIC接口:就是IIC时序 :通讯协议IIC解读

OLED简介:
OLED驱动芯片SSD1306解读
OLED分布图:
横向128个点,纵向64个点,纵向64个点又分成8页,每一页8个点。

OLED驱动芯片SSD1306解读

SSD1306有3种不同的内存寻址模式:页面寻址模式、水平寻址模式和垂直寻址模式。这个命令将内存寻址的方法设置为上述方法之一
三种模式
OLED驱动芯片SSD1306解读
在页面寻址模式中,在读取/写入显示RAM之后,列地址指针增加自动加1。如果列地址指针到达列结束地址,则列地址指针重置为列起始址和页地址指针不改变。用户必须设置新页面和列地址,以便访问下一页RAM内容页和移动的顺序页面寻址模式的列地址点如图10-1所示

在正常显示数据RAM的读或写和页寻址模式下,需要以下步骤定义启动RAM访问指针位置:
•通过命令B0h将目标显示位置的页面起始地址设置为B7h。
•通过命令00h~0Fh设置指针的较低起始列地址。
•通过命令10h~1Fh设置指针的上开始列地址。
例如,如果页面地址设置为B2h,低列地址为03h,高列地址为00h,
这意味着开始列是PAGE2的SEG3。RAM访问指针的位置如图所示:
OLED驱动芯片SSD1306解读

void OLED_Set_Pos(unsigned char x, unsigned char y) 
{ 
	OLED_WR_Byte(0xb0+y,OLED_CMD);   //设置页地址b0-b7  表示1-8页
	OLED_WR_Byte((((x)&0xf0)>>4)|0x10,OLED_CMD);    //通过命令10h~1Fh设置指针的上开始列地址
	OLED_WR_Byte(((x)&0x0f),OLED_CMD);   			//通过命令00h~0Fh设置指针的较低起始列地址
}  

关于此处的讲解可以看数据手册对照博主的文章:STM32学习笔记—OLED页寻址方式
OLED驱动芯片SSD1306解读

水平寻址方式(A[1:0]=00b)

在水平寻址模式下,读取/写入显示RAM后,列地址指针增加自动加1。如果列地址指针到达列结束地址,则列地址指针重置为列起始地址,页面地址指针增加1。水平寻址模式的页面和列地址点如图10-3所示。当页面地址指针到达结束地址时,指针被重置为列开始地址和页面开始地址
OLED驱动芯片SSD1306解读

垂直寻址方式:(A[1:0]=01b)

在垂直寻址模式下,读取/写入显示RAM后,页面地址指针增加自动加1。如果页面地址指针到达页面结束地址,页面地址指针将被重置页开始地址和列地址指针增加1。页面移动的顺序垂直寻址模式的列地址点如图10-4所示。当列和页同时地址指针到达结束地址时,指针被重置为列开始地址和页开始地址