前面的一个帖子简单介绍了
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和'列'呢?这个就涉及到寻址模式了,看看下面的这个图就明白了
这个属于页寻址模式,当然还有其他寻址,为了描述的简洁性这里不列出来(加个ID叁议电子ppptalk),详细内容查看说明书应该不难理解。这样对这个表格位置的确定就转换成了如何确定寻址模式,如何确定PAGE,如何确定起止列。与LCD1602类似,去查看OLED的指令表就可以搞定了,指令表中描述的非常清楚了。
3.3 确定显示内容
显示位置确定后,以字节为单位写入数据就可以了,一个字节8位,对应8个led,让它亮就写1,让它灭就写0. 写完一个字节的数据,指针会按照寻址模式的方向自动加1。这样就能构造出各种形状了。当然在实际操作过程中我们需要借助字模工具,让设计过程更加便捷。
4. 显示模块小结:
以上只是简单的描述OLED显示模块操作的思路,忽略了很多具体的细节。但是了解了这个思路,然后去查看说明书就很容易了。
现在来小结一下,对于显示模块,其功能自然是显示作用,既然是显示,我们关心无非就是在哪里显示,显示什么内容。只不过对于不同的显示模块,有些显示的位置多些,有些显示的内容更加丰富一些,比如有些模块可以显示不同的颜色。整体来讲对于显示模块,我们只需要做一件事情就可以了,就是在显示画面的任意一个位置能显示一个点(白点,黑点或者红点等等)。因为任何一个形状都是由点构成的,所以你能在任意一个位置显示一个点,那么理论上讲你就能显示各种形状了。当然,在具体操作中我们会借助一些字模工具来完成。
5. OLED模块参考代码