STM32外设篇:OLED显示器

OLED模块简介

 OLED (Organic Light-Emitting Diode)即:有机发光二极管。

主流的OLED器件(模块)的规格如下:

尺寸0.96寸OLED显示屏(驱动芯片:SSD1306/SSD1315)
1.3寸OLED显示屏(驱动芯片:SH1106)
接口4针脚 I2C接口
7针脚 SPI接口
像素128*64像素
颜色颜色不限

对于其接口,如果购买的是OLED模块,而非裸屏,那么生产厂家通常已经配置好接口模式了,如下图所示,分别配置为I2C接口(左)和SPI接口(右):

OLED模块结构 :

模块是由一片真正的屏幕和一块PCB底板组成:PCB底板上就是一些最小系统电路,加底板的主要目的是方便我们插接电路;玻璃屏幕通过密集的软排线与底板焊接在一起,如下图所示:


驱动芯片SSD1306

对于OLED显示屏,点阵屏幕需要不断进行扫描刷新,但128*64的点阵屏直接用单片机驱动,显然无法完成(光从接线上看,就需要近200根线)。因此我们需要给它单独装一个负责扫描驱动的芯片,以SSD1306为例,如下所示:

SSD1306是一款OLED/PLED点阵显示屏的驱动芯片(控制器),可以嵌入在屏幕中,用于执行接受数据、显示存储、扫描刷新等任务。

-----引脚分布-----

芯片上面一排密密麻麻的SEG引脚,总共128个,直接接到了点阵屏的128列;左边和右边(包括左下和右下部分),每边32个COM引脚,分别接到了点阵屏的64行。


下面还有一排引脚,为电源、配置、通信引脚,我们想要显示什么就通过通信引脚告诉驱动芯片,驱动芯片接收到数据后,就会刷新显示到点阵屏上。

1、内置显示存储器(GDDRAM)用来存储所需显示内容的RAM存储器,容量为128*64bit(即1024字节),对应点阵屏的128*64的屏幕像素(1个bit对应一个像素点:bit写1—>像素点亮)。

2、供电:使用SSD1306,必须提供两个电源,如下表所示:

VDD供电VCC供电
1.65~3.3V7~15V
提供给IC逻辑电路(芯片内部逻辑电路、存储器等)主要用于面板驱动(即点亮像素点)

对于OLED模块,屏幕厂商为了方便我们使用,在屏幕内部已经集成了一个升压电路,只要开启升压电路,面板的7~15V驱动电源就有了。同时模块上有LDO降压芯片,即使外加5V,它也可以降到3.3V,给内部逻辑供电。

注意,LDO降压芯片位于PCB底板,只有加了底板,VCC才能接5V。如果单独买裸屏,VCC不能接5V。

3、通信接口:支持8位6800/8080并行接口、3/4线SPI接口、I2C接口,但一次只能使用一种。


SSD1306框图及引脚定义

1、芯片内部结构框图

MCU通信接口负责接收我们发送的字节,然后进行分流(发送一个字节后,可以指定这个字节是作为数据还是命令)。

-----数据与命令-----

对于命令,会进入下面的命令译码器,用于控制内部电路的执行,例如开启显示、关闭显示、设置对比度、设置显示起始位置等。芯片内有一个命令表,参考命令表就能知道这个命令是什么功能。


对于数据,会进入右边的图形显示数据RAM存储器(GDDRAM)被存储起来,定义为数据的字节就决定了屏幕上显示什么内容。将想显示的内容写入GDDRAM的对应位置,在屏幕上就会显示对应的内容。

显示控制器:负责读取GDDRAM,将里面的内容扫描刷新到屏幕上。

振荡器:用于提供刷新的时钟,CL是时钟输入脚、CLS是时钟源选择脚。SSD1306内部自带时钟,具体用法如下:

1、CLS接高电平2、CLS接低电平
选择内部时钟选择外部时钟
CL引脚不使用CL引脚接外部时钟源

电流控制与电压控制:V_comH是公共端的电压输出,一般在外面接个电源滤波电容即可;I_REF是驱动电流控制,在外面接个电阻,可以控制驱动屏幕的电流(不同厂商生产的屏幕所需驱动电流可能不同)。


2、引脚定义

BS0、BS1、BS2

用于选择通信接口,上文提到SSD1306支持 6800 /8080 /3线SPI /4线SPI /I2C,具体使用哪种,由这3个引脚来决定,具体如下:

I2C680080804线SPI3线SPI
BS000001
BS110100
BS201100

 D0~D7

作为数据传输线,在不同通信模式下,引脚功能也不同,如下表所示:

6800/8080D0~D7为:8位双向数据总线
3/4线SPID0为SCLK、D1为SDIN
I2CD0为SCL、D1为SDAin、D2为SDAout

值得注意的是,虽然I2C有SDAout,但实际上,在串行模式下(SPI、I2C),不支持读取芯片内的数据(即:只能写不能读)。


R/W#(WR#)

在6800模式下,为R/W#,指定读/写操作,其中写为低电平有效。在8080模式下,为WR#,即写使能。


E(RD#)

在6800模式下,为E,即读/写使能。在8080模式下,为RD#,即读使能。


D/C#

对于6800/8080/4线SPI,通过此引脚来选择传输的是数据还是命令;对于I2C,通过此引脚来指定从机地址最低位。(其数据、命令选择通过时序来选择)


各种模式下字节传输时序

1、I2C时序

首先需要主机发送一个起始位,起始后需要再发送一个字节(7位的从机地址+1位的读写位)寻址。如图,SSD1306的从机地址为011110x,x由SA0引脚配置,用于更改从机地址;最后一位是R/W#,表示读写,但串行模式只能写入,因此始终给0,表示写入。

寻址完后,就可以进行数据或命令的发送了。在我们发送一个Data byte之前,需要先发送一个Control byte,用于指定后面的字节是命令还是数据

Control byte的定义如上图右下角部分:其最高位是Co连续模式、次高位就是指定的D/C、剩下的没用,均为低电平。

Co连续模式如下:

Co=1表示每个Data byte前都要加Control byte(可以数据和命令交互发送,命令与数据可以灵活切换)
Co=0表示先发生一个Control byte,其后面的字节均为Data byte(指定了命令,则后面全是命令;数据同理)

2、3线SPI时序


3、4线SPI时序


OLED整体执行逻辑框图

对于GDDRAM,其Y轴每8个坐标为一组,进行分页。坐标范围为:PAGE0~PAGE7,总共分为8页。

如何写入数据:假如我们先设定页地址为PAGE0,列地址设定为8,那么就指定了起始坐标是上图中0x55所对应的位置;然后写入数据,每写完一个字节后,内部的地址指针会自动向右移一个单位;如果写完一页中最后一个字节,再继续写,默认会回到此页最开头

当然也可以配置自动换页,换到下一页的开头,通过配置寻址模式(写命令)来实现。


  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值