找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 32387|回复: 33
收起左侧

10分钟理解OLED显示模块

  [复制链接]
ID:304634 发表于 2018-4-10 22:16 | 显示全部楼层 |阅读模式
本帖最后由 ppptalk 于 2018-4-11 01:14 编辑



前面的一个帖子简单介绍了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.
1.png



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


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


3. 操作步骤

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


  1. (1)Set MUX Ratio A8h, 3Fh
  2. (2)Set Display Offset D3h, 00h
  3. (3)Set Display Start Line 40h
  4. (4)Set Segment re-map A0h/A1h
  5. (5)Set COM Output Scan Direction C0h/C8h
  6. (6)Set COM Pins hardware configuration DAh,02h
  7. (7)Set Contrast Control 81h,7Fh
  8. (8)Disable Entire Display On A4h
  9. (9)Set Normal Display A6h
  10. (10)Set Osc Frequency D5h, 80h
  11. (11)Enable charge pump regulator 8Dh, 14h
  12. (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和'列'呢?这个就涉及到寻址模式了,看看下面的这个图就明白了
4.png



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


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


2.png



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




5. OLED模块参考代码
OLED参考代码-51HEI分享.rar (39.66 KB, 下载次数: 520)

评分

参与人数 2黑币 +10 收起 理由
0..3 + 5 很给力!
join22life + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:324871 发表于 2018-6-8 12:22 | 显示全部楼层
刚买了一块,学习了,谢谢
回复

使用道具 举报

ID:313328 发表于 2018-6-8 21:03 | 显示全部楼层
学习了,感谢
回复

使用道具 举报

ID:198161 发表于 2018-6-11 09:24 来自手机 | 显示全部楼层
学习,但是没看懂为什么0x08 对应的是Col0-Row3?
回复

使用道具 举报

ID:304634 发表于 2018-6-11 11:27 | 显示全部楼层
yuki_ring 发表于 2018-6-11 09:24
学习,但是没看懂为什么0x08 对应的是Col0-Row3?

0x08二进制就是0001 0000,一共8位,最高位放到(Col0-Row0)对应的空格,最低位放到(Col0-Row7)对应的空格。这样Col0-Row3对应的空格就是1
回复

使用道具 举报

ID:66287 发表于 2018-7-19 16:14 | 显示全部楼层
很不错的讲解,谢谢!
回复

使用道具 举报

ID:383467 发表于 2018-8-6 15:41 | 显示全部楼层
很神奇啊
回复

使用道具 举报

ID:394452 发表于 2018-9-6 11:05 | 显示全部楼层
(๑ŐдŐ)b很厉害的讲解啊,谢谢楼主
回复

使用道具 举报

ID:227864 发表于 2018-9-13 11:38 | 显示全部楼层
正要买这个,学习了
回复

使用道具 举报

ID:185679 发表于 2018-9-14 15:58 | 显示全部楼层
留言备用学习
回复

使用道具 举报

ID:398134 发表于 2018-9-14 22:05 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:398134 发表于 2018-9-14 22:05 | 显示全部楼层
谢谢楼主,你讲的挺详细的
回复

使用道具 举报

ID:398134 发表于 2018-9-14 22:06 | 显示全部楼层
谢谢,你讲的挺详细的
回复

使用道具 举报

ID:64532 发表于 2018-9-29 23:30 | 显示全部楼层
很厉害的讲解,看懂了,谢谢楼主。
回复

使用道具 举报

ID:404454 发表于 2018-10-3 16:28 | 显示全部楼层
留言备用,买一片来学习。
回复

使用道具 举报

ID:494791 发表于 2019-5-22 07:36 | 显示全部楼层
确定显示位置那块不太懂,没想到你一笔带过了
回复

使用道具 举报

ID:637444 发表于 2019-11-7 14:38 | 显示全部楼层
这是用IIC的吗
回复

使用道具 举报

ID:653862 发表于 2019-12-3 16:47 | 显示全部楼层
为什么我下载了,但是程序编译有错误啊
就这个OLED我下载了各种程序但是屏幕就是不亮,怎么搞呀
回复

使用道具 举报

ID:663323 发表于 2020-3-7 15:44 | 显示全部楼层
谢谢楼主,你讲的挺好的
回复

使用道具 举报

ID:163501 发表于 2020-3-8 13:26 | 显示全部楼层
正准备学习这个。下来看看
回复

使用道具 举报

ID:706594 发表于 2020-3-11 23:13 | 显示全部楼层
很好,很详细。
回复

使用道具 举报

ID:253767 发表于 2020-3-21 07:14 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

ID:98926 发表于 2020-9-16 12:00 | 显示全部楼层
道理是明白了,程序还是不会写
回复

使用道具 举报

ID:592859 发表于 2020-9-17 09:05 | 显示全部楼层
这种OLED的坏处是没有字库,需要自己搞,然后程序会大不少,一个菜单界面估计得2K 以上。
回复

使用道具 举报

ID:637237 发表于 2020-9-17 15:45 | 显示全部楼层
现在OLED应该用的比较多了,学习学习
回复

使用道具 举报

ID:585455 发表于 2020-9-26 18:46 | 显示全部楼层
oled還沒測試過,找時間來測試,幫助非常大。
回复

使用道具 举报

ID:822598 发表于 2020-10-2 19:38 | 显示全部楼层
留言,备用
回复

使用道具 举报

ID:230742 发表于 2021-1-7 18:47 | 显示全部楼层
下载备用。感谢分享。
回复

使用道具 举报

ID:814956 发表于 2021-1-19 20:51 | 显示全部楼层
plez 发表于 2019-12-3 16:47
为什么我下载了,但是程序编译有错误啊
就这个OLED我下载了各种程序但是屏幕就是不亮,怎么搞呀

检查IO口配置,我试了一下,很完美
回复

使用道具 举报

ID:814956 发表于 2021-1-19 20:52 | 显示全部楼层
太妙了,终于成功了,感谢楼主
回复

使用道具 举报

ID:880987 发表于 2021-3-17 10:41 | 显示全部楼层
谢谢大佬的说明,值得参考
回复

使用道具 举报

ID:950769 发表于 2021-7-18 19:42 | 显示全部楼层
yuki_ring 发表于 2018-6-11 09:24
学习,但是没看懂为什么0x08 对应的是Col0-Row3?

二进制,8对应2的三次方
回复

使用道具 举报

ID:951500 发表于 2021-7-19 10:30 | 显示全部楼层
请问 是用什么软件进行数模提取的呢?
回复

使用道具 举报

ID:951500 发表于 2021-7-19 10:31 | 显示全部楼层
请问使用什么软件进行数模提取的呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表