OLED(OrganicElectroluminesence Display)有机发光显示器,与传统的显示器不同的是,传统的显示器需要背光,才能显示;而OLED则不需要,其自身就能够发光。
而OLED之所以能够自发光,主要是通过电场驱动:有机半导体材料和发光材料通过过载流子注入和复合后实现发光。从本质上来说,就是通过ITO玻璃透明电极作为器件阳极,金属电极作为阴极,通过电源驱动,将电子从阴极传输到电子传输层,空穴从阳极注入到空穴传输层,之后分迁移到发光层,二者相遇后产生激子,让发光分子激发,经过辐射后产生光源。简单来说,一块OLED屏幕,就是由百千万个“小灯泡”组成。
OLED不仅更轻薄、功耗低、亮度高、发光率好、可以显示纯黑色,并且还可以做到弯曲,如当今的曲屏电视和手机等。当今国际各大厂商都争相恐后的加强了对OLED技术的研发投入,使得OLED技术在当今电视、电脑(显示器)、手机、平板等领域灵应用愈加广泛。如下图所示为OLED显示屏模块实物图。
在本节中应用的到的SPI与飞控开发基础篇《SPI(六轴传感器数据获取)》一节不同,本节用的到的是通过GPIO模拟的SPI,而飞控开发基础篇《SPI(六轴传感器数据获取)》中应用的是STM32硬件SPI。而SPI协议相关知识可以参考飞控开发基础篇《SPI(六轴传感器数据获取)》。
根据原理图可知OLED屏的电气连接关系,如下图所示。
可知OLED的复位脚RES接在STM32的PB6、OLED的命令/数据选择脚DC接在STM32的PB7、OLED的时钟线接在STM32的PA5、OLED的数据输入接在STM32的PA7。这里的OLED模块没有CS片选脚,是因为模块内部已经默认接地了。OLED显示的整体代码编写思路如下。
代码思路
1
|
管脚配置
|
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体;
|
2
|
OLED时序的实现
|
1、写入数据/命令函数实现。
|
3
|
OLED的配置及功能性函数实现
|
- OLED初始化;
- OLED功能性函数实现(如刷屏、描点、清屏等)。
|
4
|
逻辑处理
|
1、显示逻辑。
|
根据OLED的驱动芯片SSD1306的手册可以得知控制时序,如下图所示。
根据时序就可以编写对应时序的代码了。如下图所示为OLED写时序的代码。
根据SSD1306手册可得知OLED的初始化流程,如下图所示。
OLED初始化代码实现如下图所示。
OLED的所有显示都是基于描点得来的,由点成线,再由线成面。OLED的描点函数代码实现如下图所示。
OLED显示单个字符的代码如下图所示。
显示字符需要对相应的字符取模,这里已经提供了两种取好模的字体,按照“阴码、逐列式、顺向”的取模方式,分别是12*6、16*8大小的字体,在oledfont.h里,如下图所示。
取模需要通过取模软件,这里使用的是“PCtoLCD2002”,该软件有两大功能,一种是字符取模,另一种是图片取模。这里我们用到的是字符取模,根据代码驱动的描点方向,生成的12*6字模的字模选项设置如下图所示。
这里以生成12*6的字符“1”做举例,按照上图设置好字模选项设置后,输入“1”,点击“生成字模”,即可生成对应的16进制字模代码,如下图所示。
本次是实验需要通过OLED显示“COCOFLY”以及“www.fengke.club”,具体实现代码如下。
保存编译下载,实现现象如下图。