前面的一个帖子简单介绍了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个点为暗。
| | | 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的指令表就可以搞定了,指令表中描述的非常清楚了
更多回帖