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

按照驱动方式划分,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 基本工作原理

- 工作流程

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

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


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


说明:
MCU向SSD1315发送的数据可分为两类 -- Controlbyte和Data byte。
Data byte: 数据字节,其内容可能是Data(显示数据),也可能是Command(控制命令)。Control byte: 控制字节,在Data byte之前发送,用于声明后续Data byte内容的类型和格式,该字节只有高2位有效,其余6位均为0;D/C#(Data/Command): 用于声明后续的Data byte是Data还是Command,1表示Data,0表示Command。Co(Contination Bit): 用于声明后内容是否连续。0表示连续。此时后边可以连续发送多个Data bvte;1表示不连续,此时后边只能发送一个Data byte。需要注意的是,当
Co设置0时,本次通信中后续所有的字节都会被视作Databyte,co位的具体用法如下:






1.2.3 GDDRAM
GDDRAM的作用是存储显示数据,其容量是128×64 bit,每个bit对应着屏幕上的一个像素,该bit的值就能决定该像素的亮灭。
1.2.3.1 内存组织结构
分为8页,每一页128x8个字节:

每一页的结构

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

1.2.3.2 内存寻址
在了解了内存组织结构之后,我们还需掌握内存的寻址方式,这样才能在我们指定的位置写入指定的内容。
向GDDRAM写入数据时是以byte为单位的,按照上述的内存组织结构, 定位一个byte,至少需要明确两点,分别是第几页(Page Address,页地址)和第几列(Column Address,列地址)。因此GDDRAM内部设有两个指针, Page Address Pointer和Column Address Pointer,分别指向当前要写入的页和列。为方便连续写入多个字节,每当成功写入一个字节后,Page Address Pointer或者Column Address Pointer会自动递增,指向下一个要写入的位置。
根据指针递增逻辑的不同,GDFRAM提供了三种不同的寻址方式,分别是页寻址,水平寻址和垂直寻址,具体使用哪种模式,可以通过向SSD1315发送控制命令进行选择,具体命令如下:

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

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

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

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

设置列地址范围的命令如下
如:00100001 00000001 00000011 为1-3列

垂直寻址
这种寻址方式下,用户需要先向
SSD1315发送控制命令,设置一个写入区域,具体来讲就是分别指定页的起始地址和结束地址(例如Page1~Page5)以及列的起始地址和结束地址(例如COL2~COL125)。此时Page Address Pointer和Column Address Pointer会指向该区域的左上角。之后便可开始连续发送数据,每成功写入一个字节,Page Address Pointer会自动+1,当到达目标区域的底部边界时,Column Address Pointer便会自动+1。当写到目标区域的右下角时,两个指针会再次回到左上角。如下图所示:
1.2.3.3 内存bit与屏幕像素映射关系
GDDRAM中的每个bit都对应着屏幕上的一个像素,但具体哪个bit对应着哪个像素,目前仍是不明确的,最理想的方式当然是每个bit和每个像素的位置完全对应,但默认情况下并非如此。
bit和像素之间的对应关系受两个环节的影响,第一个环节是GDDRAM和SSD1315输出引脚(64个COM和128个SEG)的对应关系,第二个环节是SSD1315的输出引脚和OLED屏幕的连线方式。下面逐一分析。
GDDRAM和SSD1315输出引脚对应关系,默认映射关系如下:一一对应

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

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

映射过后,GDDRAM行的0对应oled屏幕行的0,GDDRAM列的0对应oled屏幕的列0,我们让左上角的二极管亮,只需要将SEG0和COM0定位的二极管亮即可;
设置Segment重映射的命令如下:
设置1即可让127映射为SEG0,从左到右127到0

设置Common重映射的命令如下:
X3设置为1即可从上到下为63到0

Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1