51单片机控制0.96寸OLED(IIC接口)

1. OLED初步认识

OLED(Organic Light-Emitting Diode),即有机发光二极管. OLED由于同时具备自发光,不需背光源,对比度高,厚度薄,视角广,反应速度快,可用于挠曲性面板,使用温度范围广,构造及制程简单等优异特性,被认为是下一代的平面显示器新兴应用技术。具有轻,薄,省电等特性,通信接口简单.

51单片机控制0.96寸OLED(IIC接口)_第1张图片

这里我们描述的是IIC接口的0.96寸OLED,其实对于其他接口的OLED,分析思路是一样的。前面讲了,显示模块我们就关心三个问题,显示模块初始化;在哪里显示;显示什么。对于OLED同样适用,相对于1602液晶模块,它只不过显示的地方比较多,显示内容更加丰富一点,但是思路基本相同。下面我们就从这个三个问题入手,简单讲述如何使用这款显示模块。

51单片机控制0.96寸OLED(IIC接口)_第2张图片

2. OLED初始化

关于OLED初始化,芯片手册上描述的非常清楚了,这没什么好讨论的,照做即可。

(1)Set MUX Ratio A8h, 3Fh  

(2)Set Display OffsetD3h, 00h

(3)Set Display StartLine 40h

(4)Set Segment re-mapA0h/A1h

(5)Set COM Output ScanDirection C0h/C8h

(6)Set COM Pinshardware configuration DAh,02h

(7)Set Contrast Control81h,7Fh

(8)Disable EntireDisplay On A4h

(9)Set Normal DisplayA6h

(10)Set Osc FrequencyD5h, 80h

(11)Enable charge pumpregulator 8Dh, 14h

(12)Display On AFh

3. 在哪里显示

与LCD1602的分析思路相同,要知道知道在哪里显示,就需要先知道哪些地方可能显示。oled模块的分辨率是128×64,也就是说一共能显示128×64这么多个“点”,下面我们用一个128列,64行的表格来描述更清晰一些,如下所示:

51单片机控制0.96寸OLED(IIC接口)_第3张图片

显示模块上的每一个点对应着这个表格的一个空格,假设你在某一个空格中放1表示这个‘点’亮,那么放0就表示这个‘点’暗。由于我们在写入数据时通常以字节为单位,那么现在把表格中的Col0这一列对应的Row0-Row7作为一个单位,一共8个空格,刚好对应一个字节。那么这个字节的高低位如何分配呢?最低位放到Row0-Col0对应的空格,最高位放到Row7-Col0对应的空格。这样当你写入一个字节的数据0x08时,对应的Col0-Row3这个‘点’就亮了,其他7个点为暗。那么这个数据0x08写到哪里去了?这个显示模块一定有个存储空间来存放这些写入的数据,暂且把它叫做PAGE0,PAGE1,...PAGE7. 这样每一个PAGE就对应着8行,比如PAGE0就对应着Row0-Row7.

经过以上分析,问题就变得简单了,就是如何访问PAGE0-PAGE7,然后往里面填数据就行了。这个就涉及到寻址模式了,一共三种,分别 是页寻址,水平寻址和垂直寻址模式。(叁议电子www.ppptalk.com)以下三幅图描述了这三种寻址模式

(1)页寻址模式

51单片机控制0.96寸OLED(IIC接口)_第4张图片

(2)水平寻址模式

51单片机控制0.96寸OLED(IIC接口)_第5张图片

(3)垂直寻址模式

51单片机控制0.96寸OLED(IIC接口)_第6张图片

下面就去查看OLED模块说明书的指令表确定其中任意一种寻址模式,然后根据需要显示的内容填数据就可以了。

4. 显示什么内容

(1)显示一个点

一幅图画是由各种线条构成的,一根线条是由很多点构成的,那么只要我们能在任意指定的位置显示一个点,从理论上讲,就能实现显示oled能力范围内的任何图形。现在我们来看看如何显示一个点。首先显示之前需要确定显示“点”的位置,这里我们以页寻址举例,先确定页地址。前面讲了,一共有8页,每一页对应显示模块的8行,也就是同一列的8个点。例如现在想在显示模块上显示一个点,坐标为(Row3, Col0),那么写入的数据为0x08(0b00001000)。注意写入数据字节的最高位和最低位对应显示模块的“点”。此后如果继续写入一个字节,那么col会自动加1,也就是会自动从Col0 跳到Col1,一直自动增加到Col127为止(注意这里设置的col end address为127)。如果此时继续写入数据,那么Col就会从Col127跳到Col0。那么现在想在Row8(也就是PAGE 1部分)写入数据怎么办呢?这个时候就需要重新设置page address了。

通过以上分析相信各位已经明白了如何在显示模块的任意位置显示一个“点”了。这样从理论上讲,就能实现显示任意形状了,比如字符,汉字,图片。但是很明显,这种方式非常复杂。以下提供的方法是借助“字模工具”来实现的。

(2)显示字符

打开“点阵取模”这个程序文件,并点击参数设置,主要配置两个方面,输入文字的大小(这里选择12号)和其他选项的配置。具体设置参考以下图片说明:

51单片机控制0.96寸OLED(IIC接口)_第7张图片
51单片机控制0.96寸OLED(IIC接口)_第8张图片
51单片机控制0.96寸OLED(IIC接口)_第9张图片
51单片机控制0.96寸OLED(IIC接口)_第10张图片
51单片机控制0.96寸OLED(IIC接口)_第11张图片

配置完毕后就可以输入字符了,如下图所示:

51单片机控制0.96寸OLED(IIC接口)_第12张图片
51单片机控制0.96寸OLED(IIC接口)_第13张图片

从以上内容可以看出,对于12号字体的字符,宽×高=8×16,表示一个字符占用8列,16行,也就是两个PAGE。这样很容易就能写出代码了,一定要注意,由于我们采用的是“页寻址模式”,在“写”完8列之后,一定要注意更换PAGE,否则它会自动将这16组数据写入同一个PAGE。

(3)显示汉字

显示一个汉字与字符的操作过程相同,在输入“字符”的时候,修改成输入“汉字”即可。“点阵生成区”产生的数据部分即为我们要写入的数据。

51单片机控制0.96寸OLED(IIC接口)_第14张图片


(4)显示一幅图片

显示一幅图与字符的操作过程基本类似。首先准备好一幅图,尺寸为128×64pix,注意保存为.bmp格式的文件。然后在字模工具中点击“打开图像图标”,之后生成数据并点击“点阵生成区”。生成的数据部分即为需要写入的数据

51单片机控制0.96寸OLED(IIC接口)_第15张图片
51单片机控制0.96寸OLED(IIC接口)_第16张图片

   

        考代码下载:

          链接:https://pan.baidu.com/s/1DqXNUDjyAKiApw-aAji8Ug 密码:lezb

         视频地址:OLED视频


你可能感兴趣的:(51单片机)