一、OLED操作原理
cmd::0xAB: A为命令码,B为参数
1、程序对SSD1306的操作:
初始化SSD1306,把数据写进显存
- 初始化:主设备写寄存器,写各种命令,把命令发给主控芯片
- 写数据:就可以把数据发给图像显示寄存器(GDDRAM显存)
2、问题:如何分辨发出的是命令还是显存中 的数据
参考《OLED芯片手册中》的IIC接口章节
Control byte的D/C位就是为了分辨后面的Data byte到底是命令还是数据
D/C位也就是bit6为0,则后面的是命令;为1则后面的Data byte是数据
3、问题:显存中的数据与像素的关系
假设已经初始化了SSD1306,怎么写显存?显存和像素是什么关系?
- 显存中的bit0对应屏幕中第一列的前八个像素;显存中的bit1对应屏幕中第2列的前八个像素
- 显存的行用page0/1/2/3...来表示
要往 GDDRAM 里写入数据,需要指定地址。如果每写一个数据都要先指定地址,效率太低。高效的方法是:先指定起始行、列地址后,每写一个数据,地址就自动增加。
3 种地址模式:
① 页地址模式(Page Addressing Mode):
每写一个数据,列地址增加 1;当列地址到达最右边后:又从第 0 列开始,行地址不变。
② 行地址模式(Horizontal Addressing Mode):
每写一个数据,列地址增加 1;当列地址到达最右边后:又从第 0 列开始,页地址加 1。当列地址、页地址都到达最大值后,又从起始列地址、起始页地址开始。
③ 列地址模式(Vertical Addressing Mode):
每写一个数据,页地址增加 1;当页地址到达最底边后:又从第 0 页开始,列地址也加 1。当列地址、页地址都到达最大值后,又从起始列地址、起始页地址开始。程序里使用页地址模式。
4、OLED的初始化
1、OLED初始化函数代码
1、设置地址模式函数代码![](https://i-blog.csdnimg.cn/direct/18ceb070d8224edd87f4d55678f8e46d.png)
参考数据手册得知20是模式设置
1、参考命令表,得到20的使用方式
2、发命令 控制字节;代码;
PS:写多个字节
2、写显存数据
设置地址模式,设置地址,写入数据
1、清屏为例
位置设置 及页地址
A来源
位置设置及列地址
二、在OLED显示文字
1、显示原理,如0x00000010
2、字符矩阵
3、显示汉字
依次显示每个汉字,每个汉字占据16个字节(16pixel*16/8),所以每次写16个字节,也就是上面的一行