打印
[MCU]

10分钟理解OLED显示模块

[复制链接]
1553|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ppptalk|  楼主 | 2018-4-11 14:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前面的一个帖子简单介绍了LCD1602如何显示字符,同时整理出了一个思路:初始化,确定显示位置,确定显示内容。OLED模块也是一个显示模块,我们关心的仍然是两点内容,在哪里显示,显示什么内容。所以上面的这个思路对于OLED模块同样适用。只不过OLED模块显示的位置更多一点罢了。
LCD1602模块每行16个空格,共2行,也就是一共有32个空格。我们在LCD1602自定义字符这一个帖子中,是从这32个空格中提取出一个空格来看成8×8的点阵(64个led),然后通过控制这64个led从而实现自定义字符。现在把这8×8的点阵放大成128×64的点阵就是OLED模块了。
可见只要把LCD1602如何显示字符和1602如何构造字符结合起来就很容易搞定OLED了。

1. 初识OLED模块
OLED(Organic Light-Emitting Diode),即有机发光二极管,其实物图如下所示. OLED由于同时具备自发光,不需背光源,对比度高,厚度薄,视角广,反应速度快,可用于挠曲性面板,使用温度范围广,构造及制程简单等优异特性,被认为是下一代的平面显示器新兴应用技术。具有轻,薄,省电等特性,工作电压宽度高,从2.2V到5.5V.





以上关于OLED的介绍简单看看就可以了,只需要知道它是128×64的点阵就行(当然也有其他尺寸的)。

2. 思路分析
前面已经讲了,就是三步曲,
(1) 初始化
(2)确定显示位置
(3)确定显示内容


3. 操作步骤

3.1 初始化

初始化过程说明书讲的很详细了,想都不用想,照做即可


(1)Set MUX Ratio A8h, 3Fh
(2)Set Display Offset D3h, 00h
(3)Set Display Start Line 40h
(4)Set Segment re-map A0h/A1h
(5)Set COM Output Scan Direction C0h/C8h
(6)Set COM Pins hardware configuration DAh,02h
(7)Set Contrast Control 81h,7Fh
(8)Disable Entire Display On A4h
(9)Set Normal Display A6h
(10)Set Osc Frequency D5h, 80h
(11)Enable charge pump regulator 8Dh, 14h
(12)Display On AFh


3.2 确定显示位置

与LCD1602的分析思路相同,要知道知道在哪里显示,就需要先知道哪些地方能显示。这里我们使用的oled模块的分辨率是128×64,也就是说一共128×64个led,下面用一个128列,64行的表格来描述更清晰一些,如下表所示。显示模块上的每一个点就对应着这个表格的一个空格,假设你在某一个空格中放1表示这个‘点‘亮,那么放0就表示这个’点‘暗。现在我们把这个表格的每8行叫做一个PAGE,这样一共就有8个PAGE(PAGE0~PAGE7). 由于我们在写如数据时通常以字节为单位,那么现在把表格中的Col0这一列的Row0-Row7作为一个单位,一共8个空格,刚好对应一个字节。那么这个字节的高低位如何分配呢?最低位放到Row0-Col0对应的空格(bit0),最高位放到Row7-Col0对应的空格(bit7)。这样当你写入一个字节的数据0x08时,对应的坐标(Col0-Row3)这个’点‘就亮了,其他7个点为暗。


那么现在对OLED模块的控制这个问题就转换成了如何向以下这个表格写入数据了。所谓确定显示屏的位置就是确定这个表格的位置,而确定表格的位置就是确定第几行,第几列。注意到我们这里是把表格中的每8行看成一个基本单位,因此确定表格的位置就是确定第几个PAGE,第几列。


  
  
  
  
  
  
  Col 0
  
  Col 1
  
  Col 2
  
  Col 3
  
  Col 4
  
  
  
  Col 125
  
  Col 126
  
  Col 127
  
  
PAGE 0
  
  bit 0
  
  Row 0
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 1
  
  Row 1
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 2
  
  Row 2
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 3
  
  Row 3
  
  1
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 4
  
  Row 4
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 5
  
  Row 5
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 6
  
  Row 6
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 7
  
  Row 7
  
  0
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 1
  
  bit 0
  
  Row 8
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 1
  
  Row 9
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 2
  
  Row 10
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 3
  
  Row 11
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 4
  
  Row 12
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 5
  
  Row 13
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 6
  
  Row 14
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  bit 7
  
  Row 15
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 2
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 3
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 4
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 5
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 6
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  PAGE 7
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  


那么如何确定PAGE和'列'呢?这个就涉及到寻址模式了,看看下面的这个图就明白了


这个属于页寻址模式,当然还有其他寻址,为了描述的简洁性这里不列出,详细内容查看说明书应该不难理解。这样对这个表格位置的确定就转换成了如何确定寻址模式,如何确定PAGE,如何确定起止列。与LCD1602类似,去查看OLED的指令表就可以搞定了,指令表中描述的非常清楚了。


3.3 确定显示内容


显示位置确定后,以字节为单位写入数据就可以了,一个字节8位,对应8个led,让它亮就写1,让它灭就写0. 写完一个字节的数据,指针会按照寻址模式的方向自动加1。这样就能构造出各种形状了。当然在实际操作过程中我们需要借助字模工具,让设计过程更加便捷。




4. 显示模块小结:


以上只是简单的描述OLED显示模块操作的思路,忽略了很多具体的细节。但是了解了这个思路,然后去查看说明书就很容易了。
现在来小结一下,对于显示模块,其功能自然是显示作用,既然是显示,我们关心无非就是在哪里显示,显示什么内容。只不过对于不同的显示模块,有些显示的位置多些,有些显示的内容更加丰富一些,比如有些模块可以显示不同的颜色。整体来讲对于显示模块,我们只需要做一件事情就可以了,就是在显示画面的任意一个位置能显示一个点(白点,黑点或者红点等等)。因为任何一个形状都是由点构成的,所以你能在任意一个位置显示一个点,那么理论上讲你就能显示各种形状了。当然,在具体操作中我们会借助一些字模工具来完成。


5. 0.96寸OLED(128×64)模块参考代码

0.96寸OLED显示模块参考代码.rar (39.66 KB)

上一篇:
10分钟理解LCD1602液晶模块
10分钟理解LCD1602如何自定义字符

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝