SSD1306 0.91英寸和0.96英寸OLED驱动区别

简短不看版:

本文将介绍两种不同尺寸的OLED显示屏:0.96寸和0.91寸。他们都是4引脚I2C接口的,如下图所示:

image

已知条件:

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接口

posted @ 2025-08-19 00:12  FBshark  阅读(196)  评论(0)    收藏  举报