1. 说明2.什么是OLED?3.OLED的技术特点4.实物赏析5.SSD13066.通信总线基本介绍7.操作原理8.实战操作8.1 硬件连接8.2 软件操作8.3 实验结果9.实验分析10.总结
作为显示设备,OLED的作用是为使用者提示信息,通过视觉进行感知,从而达到方便操作的目的。下面,我们通过对8266上OLED的使用,来进一步学习和了解OLED。
作为一种显示技术,OLED与普通的LCD的区别主要在于发光源。对于普通的LCD来说,需要提供背光灯才能看到LCD上的东西。而OLED是每个像素都独立发光。
由于这个特性,所以OLED可以做的很薄,并且可以做柔性屏。但是由于像素发光的时长不一样,也会导致有些像素长时间处于工作状态而出现烧屏的现象。
(1) OLED 器件的核心层厚度很薄,厚度可以小于 1mm,为液晶的 1/3。
(2) OLED 器件为全固态机构,无真空,液体物质,抗震性好,可以适应巨大的加速度,振动等恶劣环境。
(3)主动发光的特性使 OLED 几乎没有视角限制,视角一般可达到 170 度,具有较宽的视角,从侧面也不会失真。
(4) OLED 显示屏的响应时间超过 TFT—LCD 液晶屏。TFT—LCD 的响应时间大约使几十毫秒,现在做得最好的 TFT—LCD 响应时间也只有 12 毫秒。而 OLED 显示屏的响应时间大约是几微秒到几十微秒。
(5) OLED 低温特性好,在零下 40 摄氏度都能正常显示,目前航天服上也使用OLED 作为显示屏。而 TFT—LCD 的响应速度随温度发生变化,低温下,其响应速度变慢,因此,液晶在低温下显示效果不好。
(6) OLED 采用有机发光原理,所需材料很少,制作上比采用液体发光的液晶工序少,液晶显示屏少 3 道工序,成本大幅降低。
(7) OLED 采用的二极管会自行发光,因此不需要背面光源,发光转化效率高,能耗比液晶低,OLED 能够在不同材质的基板上制造,厂家甚至可以将电路印刷在弹性材料上——做成能弯曲的柔软显示器。
(8) 低电压直流驱动,5V 以下,用电池就能点亮。高亮度,可达 300 明流以上。
基本外观如图所示
基本的构成是由一块液晶+SSD1306控制器,程序中主要操作的就是这个SSD1306控制器。
在淘宝上购买的模块是下面这样子
拆封后可以看到实物
本次实验采用的是这块0.96寸的OLED,具备自发光,所以不需要背光灯,固定区域是固定的颜色,上面1/4为黄光,也就是黑底黄字,下面3/4为蓝光。也就是黑底蓝字。
本模块采用的驱动IC为0.96寸屏,驱动IC为SSD1306,具有内部升压的功能。由于SSD1306每页包含128字节,一共8页,也就是是128*64bit的点阵大小。
作为该屏的主要研究对象,这个控制器的使用方法先简单的介绍一下,具体的使用还需要认真研读使用手册。
该控制器一般是支持5种不同的协议传输数据
6800,8080, I2C, 三线SPI,四线SPI
具体的选择由BS引脚来决定
不同的BS组合会选择不同的通信总线
不同的通信总线上,数据线又有着不同的功能,就拿I2C来说D2表示SDAout,D1表示SDAin,同时时钟为SCL。
与此同时,硬件的连接如下所示
对于该款OLED,用的比较多的是SPI接口和I2C接口。
对比一下可以发现
速率
对于I2C总线来说,定义了三种速率
I2C协议v2.1规定了100K,400K和3.4M三种速率(bps)。
而SPI的速率很快,可以达到30MHz。
接口
SPI是一种串行外设接口,至少需要四根线,SCLK(时钟),MOSI(主机到从机),MISO(从机到主机),CS(片选)。是一种高速,全双工的通信总线。
I2C也是一种外设通信总线,两根线,是一种半双工的通信总线。由SCL与SDA两根线相连。
简单的说,I2C速率比SPI慢,但是用的引脚资源少。由于购买的模块属于I2C总线,所以先分析一下I2C对该模块的操作。
从机地址的选择
通过查看芯片手册,在芯片手册中,可以根据SA0引脚来确定从机地址,可以知道其基本的从机地址可由SA0引脚来决定。
最后一位表示读写,b0是1时,表示读,b0是0时,表示写。
SA0为0时,设备地址为0x3C,SA0为1时,设备地址为0x3D
下面再讲一下I2C的原理
无数据:SCL = 1 SDA = 0
开始位:当SCL为高电平时,SDA从高到低电平变化
停止位:当SCL为高电平是,SDA从低到高电平变化
应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0
否应答位(NACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=1
SSD1306有一个存储静态图片的数据的RAM,GDDRAM(Graphic Display Data RAM )。用于存储图片数据,这个RAM的大小为128x64bit。因为有8个页,每个页是128字节,所以一共是128X64个像素点可以被控制。
当我们需要操作其中的像素点时,直接操作这个GDDRAM即可,然后告知SSD1306去刷新SSD1306。整个过程总结起来,就是首先初始化GDDRAM,然后填充这128x64个像素点的信息,最后按照特定的方式将GDDRAM刷新到液晶上即可。
前面讲了许多关于这个屏的使用原理,其实实战操作起来非常的容易,因为很多库函数别人已经封装好了。我们不需要重复的造轮子。这个非常重要,拿来主义并不是什么坏事,要利用的好才是王道。下面来在8266上驱动这个模块。
目前还是采用我们的nodemcu模块,只是现在将引脚全部焊接上了。
接上电源与地线,同时接上SDA与CLK
第一步:新建一个8266工程
第二步:寻找相关的库函数
第三步:在工程中配置SSD1306的库
说明:由于下面的例子会用到Time相关的函数,所以需要时间库
第四步:添加例程
当我们将程序编译通过后,就可以下载到8266上进行功能验证了。
由于底层的原理是设置GDDRAM中的像素点,这样就会带来很多操作上的麻烦,比如显示ICON及文字,这时,就需要采用字模制作工具,将BMP图片及中文汉字转换成相应的二进制文件进行显示。这些操作可以通过通用函数来完成,操作实现的过程也并不难。
本次为8266加上了一个屏作为显示,瞬间觉得提示信息好多了。后期会对8266的使用做一个综合性的应用,也会用到这个屏来作为显示。现在先保证先用起来,然后弄清楚最基本的使用原理。这样才是最好的。后续文章也会持续讲述这个OLED的使用的,今天只写到这里。