SSD1306 0.91英寸和0.96英寸OLED驱动区别
简短不看版:
本文将介绍两种不同尺寸的OLED显示屏:0.96寸和0.91寸。他们都是4引脚I2C接口的,如下图所示:

已知条件:
0.96寸分辨率是128*64
0.91寸分辨率是128*32
驱动芯片:SSD1306
接口:IIC
SSD1306 驱动的 0.91寸 和0.96寸 OLED屏 在编程上的主要区别体现在分辨率上。
实际差异代码如下:
void OLED_init(void)
{
//....
//驱动路数部分
OLED_WR_Byte(0xA8,OLED_CMD); // 设置驱动路数(16~64)
OLED_WR_Byte(0x1F,OLED_CMD); // 64duty 默认0X3f(1/64) 0x1f(1/32) 0.96":0X3f ;0.91":0x1f
//....
//分辨率部分:
OLED_WR_Byte(0xDA,OLED_CMD); // 设置 com pin configuartion
OLED_WR_Byte(0x12,OLED_CMD); // 使用默认值 0.96寸分辨率是128*64 ,设置12h;0.91寸分辨率是128*32 ,设置02h
//....
}
总结:
- 驱动路数(Duty):0.96寸屏默认设置为64路(Duty=3F),而0.91寸屏通常设置为32路(Duty=1F)。
- 地址配置:0.96寸屏通常使用地址0x3C(SA0=0),而0.91寸屏可能使用其他地址(如0x3D)。
正文:
0.96英寸OLED驱动程序
delay_ms(100); // 延迟(必须要有)
OLED_WR_Byte(0xAE,OLED_CMD); // 关闭显示
OLED_WR_Byte(0x00,OLED_CMD); // 设置低列地址
OLED_WR_Byte(0x10,OLED_CMD); // 设置高列地址
OLED_WR_Byte(0x40,OLED_CMD); // 设置起始行地址 【5:0】
OLED_WR_Byte(0xB0,OLED_CMD); // 设置页地址
OLED_WR_Byte(0x81,OLED_CMD); // 对比度设置,可设置亮度
OLED_WR_Byte(0xFF,OLED_CMD); // 1~255(亮度设置,越大越亮)
OLED_WR_Byte(0xA1,OLED_CMD); // 设置段(SEG)的起始映射地址 bit0:0,0->0;1,0->127;
OLED_WR_Byte(0xA6,OLED_CMD); // 正常显示;0xa7逆显示
OLED_WR_Byte(0xA8,OLED_CMD); // 设置驱动路数(16~64)
OLED_WR_Byte(0x3F,OLED_CMD); // 64duty 默认0X3f(1/64) 0x1f(1/32) 0.96:0X3f ;0.91寸:0x1f
OLED_WR_Byte(0xC8,OLED_CMD); // 重映射模式,COM[N-1]~COM0扫描
OLED_WR_Byte(0xD3,OLED_CMD); // 设置显示偏移
OLED_WR_Byte(0x00,OLED_CMD); // 无偏移
OLED_WR_Byte(0xD5,OLED_CMD); // 设置震荡器分频
OLED_WR_Byte(0x80,OLED_CMD); // 分频因子,使用默认值
OLED_WR_Byte(0xD9,OLED_CMD); // 设置 Pre-Charge Period 预充电周期
OLED_WR_Byte(0xF1,OLED_CMD); // 使用官方推荐值,[3:0],PHASE 1;[7:4],PHASE 2;
OLED_WR_Byte(0xDA,OLED_CMD); // 设置 com pin configuartion
OLED_WR_Byte(0x12,OLED_CMD); // 使用默认值 0.96寸分辨率是128*64 ,设置12h;0.91寸分辨率是128*32 ,设置02h
OLED_WR_Byte(0xDB,OLED_CMD); // 设置 Vcomh,电压倍率,可调节亮度(默认)
OLED_WR_Byte(0x40,OLED_CMD); // 使用官方推荐值 [6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
OLED_WR_Byte(0x8D,OLED_CMD); // 设置OLED电荷泵
OLED_WR_Byte(0x14,OLED_CMD); // 开显示
// OLED_WR_Byte(0x20,OLED_CMD);//设置内存地址模式
// OLED_WR_Byte(0x02,OLED_CMD);//[[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
// OLED_WR_Byte(0xA4,OLED_CMD);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
// OLED_WR_Byte(0xA6,OLED_CMD);//设置显示方式;bit0:1,反相显示;0,正常显示
// OLED_WR_Byte(0x2E,OLED_CMD);//停用滚动条
OLED_WR_Byte(0xAF,OLED_CMD); // 开启OLED面板显示
OLED_Clear(); // 清屏
OLED_Set_Pos(0,0); // 设置数据写入的起始行、列
0.91英寸OLED驱动程序
delay_ms(100); // 延迟(必须要有)
OLED_WR_Byte(0xAE,OLED_CMD); // 关闭显示
OLED_WR_Byte(0x00,OLED_CMD); // 设置低列地址
OLED_WR_Byte(0x10,OLED_CMD); // 设置高列地址
OLED_WR_Byte(0x40,OLED_CMD); // 设置起始行地址 【5:0】
OLED_WR_Byte(0xB0,OLED_CMD); // 设置页地址
OLED_WR_Byte(0x81,OLED_CMD); // 对比度设置,可设置亮度
OLED_WR_Byte(0xFF,OLED_CMD); // 1~255(亮度设置,越大越亮)
OLED_WR_Byte(0xA1,OLED_CMD); // 设置段(SEG)的起始映射地址 bit0:0,0->0;1,0->127;
OLED_WR_Byte(0xA6,OLED_CMD); // 正常显示;0xa7逆显示
OLED_WR_Byte(0xA8,OLED_CMD); // 设置驱动路数(16~64)
OLED_WR_Byte(0x1F,OLED_CMD); // 64duty 默认0X3f(1/64) 0x1f(1/32) 0.96:0X3f ;0.91寸:0x1f
OLED_WR_Byte(0xC8,OLED_CMD); // 重映射模式,COM[N-1]~COM0扫描
OLED_WR_Byte(0xD3,OLED_CMD); // 设置显示偏移
OLED_WR_Byte(0x00,OLED_CMD); // 无偏移
OLED_WR_Byte(0xD5,OLED_CMD); // 设置震荡器分频
OLED_WR_Byte(0x80,OLED_CMD); // 分频因子,使用默认值
OLED_WR_Byte(0xD9,OLED_CMD); // 设置 Pre-Charge Period 预充电周期
OLED_WR_Byte(0xF1,OLED_CMD); // 使用官方推荐值,[3:0],PHASE 1;[7:4],PHASE 2;
OLED_WR_Byte(0xDA,OLED_CMD); // 设置 com pin configuartion
OLED_WR_Byte(0x02,OLED_CMD); // 使用默认值 0.96寸分辨率是128*64 ,设置12h;0.91寸分辨率是128*32 ,设置02h
OLED_WR_Byte(0xDB,OLED_CMD); // 设置 Vcomh,电压倍率,可调节亮度(默认)
OLED_WR_Byte(0x40,OLED_CMD); // 使用官方推荐值 [6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
OLED_WR_Byte(0x8D,OLED_CMD); // 设置OLED电荷泵
OLED_WR_Byte(0x14,OLED_CMD); // 开显示
// OLED_WR_Byte(0x20,OLED_CMD);//设置内存地址模式
// OLED_WR_Byte(0x02,OLED_CMD);//[[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
// OLED_WR_Byte(0xA4,OLED_CMD);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
// OLED_WR_Byte(0xA6,OLED_CMD);//设置显示方式;bit0:1,反相显示;0,正常显示
// OLED_WR_Byte(0x2E,OLED_CMD);//停用滚动条
OLED_WR_Byte(0xAF,OLED_CMD); // 开启OLED面板显示
OLED_Clear(); // 清屏
OLED_Set_Pos(0,0); // 设置数据写入的起始行、列
扩展:0.96寸与0.91寸OLED显示屏参数详解
0.96英寸OLED基本参数
- 工作电压:3.3~5V(内置3.3V LDO,I2C通信接口电平是3.3V的)
- 像素点阵规模:128x64(128列,64行,共8192颗LED)
- 驱动IC:SSD1306
0.91英寸OLED基本参数
- 工作电压:3.3~5V(内置3.3V LDO,I2C通信接口电平是3.3V的)
- 像素点阵规模:128x32(128列,32行,共4096颗LED)
- 驱动IC:SSD1306
可以发现,0.91英寸的像素点规模只有0.96英寸的一半,除此之外其余参数基本相同。
接口定义
| 引脚名称 | 引脚说明 |
| VCC | 模块电源正,3.3~5V |
| GND | 模块电源地 |
| SCL | 模块I2C总线时钟信号 |
| SDA | 模块I2C总线数据信号 |
I2C通信接口
硬件设计
- 模块内置了一个3.3V的LDO,型号为662K,所以支持3.3~5V供电。
- 模块已经板载了SCL和SDA线的上拉电阻,且上拉到了3.3V。如果单片机是5V的,只要IO配置为开漏输出,则也是可以直接接入到模块的,因为开漏无法输出高电平。最主要的问题是3.3V能够被5V单片机识别为高电平,这个要看单片机数据手册。一般是没有问题的。
- 其他I2C从机挂接到同一个I2C总线时,无需再外接I2C总线的上拉电阻了。
- 模块的I2C从机地址为:0111 10 [SA0] [RW],SA0是硬件地址选择位,当SA0接高电平时,地址中的SA0就是1,当SA0接低电平时,地址中的SA0就是0。模块出厂的时候,一般SA0是接的低电平,用户可以自己动手修改模块后面的电阻来改变SA0为高电平。另外,这也意味着——同一个I2C总线最多支持挂接2个SSD1306 OLED模块。
参考文章:
1. https://blog.csdn.net/p1279030826/article/details/107234646
2. https://blog.csdn.net/luliplus/article/details/123869343
OLED显示屏I2C接口

浙公网安备 33010602011771号