目录
一:OLED使用原理
0.96寸----显示原理
OLED的显存分布情况。我们可以理解为:水平方向分布了128个像素点,垂直方向分布了64个像素点。而驱动芯片在点亮像素点的时候,是以8个像素点为单位的。官方的例程推荐的是垂直扫描的方式,也就是先画垂直方向的8个像素点(如下图所示),所以我们在画点的时候Y的取值为0-7,X的取值为0-127。页是芯片设计者为了方便将同一列的8个点阵编成一组,用一个8bit数表示,这样的8行128个数被称为1页。(一共8页,每页128个字节)
硬件部分
SSD1306框图及引脚定义
选择通信接口
设置相应的B0,B1,B2,可以选择我们不同的通信方式。
其他引脚在不同通信协议下的意义:
原理图
I2C:
可以看到B0,B1,B2.满足选择通信接口的要求
SPL接口原理图:
可以看到B0,B1,B2.满足选择通信接口的要求
软件部分
4线SPI的传输时序
串行传输只允许写,不允许读。因此,只有两个功能:写命令、写数据
E和R/W#时钟没用到,接低电平,CS#片选接低电平,表示始终选中此芯片
D/C#:高电平:数据,低电平:命令
D0:是串行时钟,在每个上升沿时,从机采样数据
D1:数据输入线,时钟线上升沿,数据维持稳定,从机采样数据。一个时钟,只发送一位
3线SPI的传输时序
D/C: D/C是借用SDIN引脚指定的,一个时钟,发送一位,但是在每个字节之前,先发送一个位,表示D/C之后,再跟8个位,传输一个字节。 每次传输的一个字节,都有9个位:第一个是D心,指定此字节是命令还是数据,剩下8个,才是真正的字节。
I2C的通信时序
串行传输只允许写,不允许读
Co(连续模式位):Co = 1,每发送一个字节数据前都加一个Control byte(命令和数据可以灵活切换)
Co = 0,在字节数据前只发送一个Control byte,之后全部都是字节数据
D/C#表示了我们选择写数据还是写命令。
D/C#=1-------写数据。
D/C#=0------写命令
执行逻辑框图
左上角:128*64bit像素的点阵显示屏,以左上角为原点,向右为x正轴(0~127),向下为y正轴(0~63)
左下角:128*8Byte的GDDRAM,x轴与点阵显示屏一样,y轴有所不同,8位一组分为一页,范围为PAGE0 ~ PAGE7,共8页。每传输一个字节数据,将其展开,纵向排列(LSB在上,MSB在下),一位控制一个像素点
每写完一个字节数据后,内部的地址指针自动向右移动一个单位。当写到页的最后一字节时,地址指针默认回到页的起始位置,也可以通过配置寻址模式实现自动换页,换到下一页的开头
如果想要实现Y坐标的任意指定,需要读取GGDRAM,但串行传输只允许写数据,那需要在程序中定义缓存数组来实现:先读写缓存数组,最后一起更新到屏幕的GDDRAM中