SH1106

SH1106是一种单色OLED显示屏控制器,主要用于显示文字和图形。本文档详细介绍SH1106的技术规格、引脚定义和使用方法。

目录

  1. 基本规格
  2. 绝对最大额定值
  3. 光学和电气特性
  4. 功能规格
  5. 可靠性
  6. 出厂质量控制规格
  7. 包装规格
  8. 使用注意事项

1. 基本规格

1.1 显示规格

  • 显示模式: 被动矩阵
  • 显示颜色: 单色(白色)
  • 驱动占空比: 1/64

1.2 机械规格

  • 像素数量: 128 × 64
  • 面板尺寸: 34.5 × 23.0 × 1.4 (mm)
  • 有效显示区域: 29.42 × 14.7 (mm)
  • 像素间距: 0.23 × 0.23 (mm)
  • 像素尺寸: 0.21 × 0.21 (mm)
  • 重量: 2.18 (g)

1.3 有效区域/内存映射和像素结构

1.4 机械图纸

1.5 引脚定义

电源引脚

引脚号符号类型功能描述
9VDDP逻辑电路电源
逻辑电路电压供应引脚,必须连接外部电源
8VSSP逻辑电路地
逻辑电路地引脚,作为逻辑引脚的参考地,必须连接外部地
28VCCPOLED面板电源
芯片最高正电压供应引脚。使用转换器时,此引脚与VSS之间应连接稳定电容
29VLSSP模拟电路地
模拟地引脚,外部应连接到VSS

驱动引脚

引脚号符号类型功能描述
26IREFI亮度调节电流参考
段电流参考引脚,此引脚与VSS之间应连接电阻,最大电流设置为12.5μA
27VCOMHOCOM信号高电平电压输出
COM信号高电平电压输出引脚,此引脚与VSS之间应连接电容

DC/DC转换器引脚

引脚号符号类型功能描述
6VBATPDC/DC转换器电路电源
内部DC/DC电压转换器缓冲器的电源引脚
4/5, 2/3C1P/C1N, C2P/C2NI飞跨反相电容正/负端
升压电容正/负端
端子之间需要电荷泵电容

接口引脚

引脚号符号类型功能描述
10-12BS0-BS2I通信协议选择
MCU接口选择输入引脚
14RES#I控制器和驱动器电源复位
复位信号输入引脚,低电平时执行芯片初始化
13CS#I片选
片选输入引脚,仅当CS#为低电平时芯片才启用MCU通信
15D/C#I数据/命令控制
数据/命令控制引脚,高电平时D7-D0输入作为显示数据,低电平时作为命令寄存器
17E/RD#I读/写使能或读
MCU接口输入引脚
16R/W#I读/写选择或写
MCU接口输入引脚
18-25D0-D7I/O主机数据输入/输出总线
8位双向数据总线

保留引脚

引脚号符号类型功能描述
7N.C.-保留引脚
功能引脚之间的N.C.引脚保留用于兼容性和灵活设计
1,30N.C.(GND)-保留引脚(支撑引脚)
支撑引脚可减少功能引脚上的应力影响

2. 绝对最大额定值

参数符号最小值最大值单位备注
逻辑电源电压VDD-0.34V1,2
显示电源电压VCC014V1,2
DC/DC电源电压VBAT-0.35V1,2
工作温度TOP-4085°C
存储温度TSTG-4085°C3
寿命(120cd/m²)10,000-小时4
寿命(80cd/m²)30,000-小时4
寿命(60cd/m²)50,000-小时4

备注说明:

  1. 所有电压均基于"VSS=0V"
  2. 超过绝对最大额定值可能导致模块永久损坏
  3. 定义的温度范围不包括偏光片,偏光片最高耐受温度应为80°C
  4. 寿命测试条件:VCC=12.0V, Ta=25°C, 50%棋盘格图案

3. 功能规格

3.1 命令集

请参考SH1106技术手册

3.2 电源关断和开启序列

为了保护OLED面板并延长面板寿命,驱动器IC的电源开启/关断程序应在高压和低压电源之间包含延迟期。

3.2.1 电源开启序列

  1. 开启VDD
  2. 发送显示关闭命令
  3. 初始化
  4. 清屏
  5. 开启VCC/VBAT
  6. 延迟100ms(当VCC稳定时)
  7. 发送显示开启命令

3.2.2 电源关断序列

  1. 发送显示关闭命令
  2. 关断VCC/VBAT
  3. 延迟100ms(当VCC/VBAT达到0且面板完全放电时)
  4. 关断VDD

3.3 复位电路

当RES#输入为低电平时,芯片以以下状态初始化:

  1. 显示关闭
  2. 128×64显示模式
  3. 正常段和显示数据列行地址映射
  4. 串行接口移位寄存器数据清除
  5. 显示起始行设置在显示RAM地址0
  6. 列地址计数器设置为0
  7. COM输出的正常扫描方向
  8. 对比度控制寄存器设置为7Fh
  9. 正常显示模式

3.4 实际应用示例

3.4.1 外部VCC供电

电源开启序列:

电源关断序列:

进入睡眠模式:

退出睡眠模式:

外部设置代码:

{
    RES=1;
    delay(1000);
    RES=0;
    delay(1000);
    RES=1;
    delay(1000);
    write_i(0xAE); /*显示关闭*/
    write_i(0x02); /*设置低列地址*/
    write_i(0x10); /*设置高列地址*/
    write_i(0x40); /*设置显示起始行*/
    write_i(0xB0); /*设置页地址*/
    write_i(0x81); /*对比度控制*/
    write_i(0xBF); /*128*/
    write_i(0xA1); /*设置段重映射*/
    write_i(0xA6); /*正常/反向*/
    write_i(0xA8); /*多路复用比*/
    write_i(0x3F); /*占空比=1/64*/
    write_i(0xad); /*设置电荷泵使能*/
    write_i(0x8a); /*0x8a 外部VCC*/
    write_i(0x32); /*0X30---0X33 设置VPP 8V*/
    write_i(0xC8); /*COM扫描方向*/
    write_i(0xD3); /*设置显示偏移*/
    write_i(0x00); /*0x20*/
    write_i(0xD5); /*设置振荡器分频*/
    write_i(0x80);
    write_i(0xD9); /*设置预充电周期*/
    write_i(0x22); /*0x22*/
    write_i(0xDA); /*设置COM引脚*/
    write_i(0x12);
    write_i(0xdb); /*设置vcomh*/
    write_i(0x40);
    write_i(0xAF); /*显示开启*/
}

void write_i(unsigned char ins)
{
    DC=0;
    CS=0;
    WR=1;
    P1=ins; /*指令*/
    WR=0;
    WR=1;
    CS=1;
}

void write_d(unsigned char dat)
{
    DC=1;
    CS=0;
    WR=1;
    P1=dat; /*数据*/
    WR=0;
    WR=1;
    CS=1;
}

void delay(unsigned int i)
{
    while(i>0)
    {
        i--;
    }
}

3.4.2 内部DC/DC电路生成VCC

电源开启序列:

电源关断序列:

进入睡眠模式:

退出睡眠模式:

内部设置代码(电荷泵):

{
    RES=1;
    delay(1000);
    RES=0;
    delay(1000);
    RES=1;
    delay(1000);
    write_i(0xAE); /*显示关闭*/
    write_i(0x02); /*设置低列地址*/
    write_i(0x10); /*设置高列地址*/
    write_i(0x40); /*设置显示起始行*/
    write_i(0xB0); /*设置页地址*/
    write_i(0x81); /*对比度控制*/
    write_i(0xff); /*128*/
    write_i(0xA1); /*设置段重映射*/
    write_i(0xA6); /*正常/反向*/
    write_i(0xA8); /*多路复用比*/
    write_i(0x3F); /*占空比=1/64*/
    write_i(0xad); /*设置电荷泵使能*/
    write_i(0x8b); /*0x8B 内部VCC*/
    write_i(0x33); /*0X30---0X33 设置VPP 9V*/
    write_i(0xC8); /*COM扫描方向*/
    write_i(0xD3); /*设置显示偏移*/
    write_i(0x00); /*0x20*/
    write_i(0xD5); /*设置振荡器分频*/
    write_i(0x80);
    write_i(0xD9); /*设置预充电周期*/
    write_i(0x1f); /*0x22*/
    write_i(0xDA); /*设置COM引脚*/
    write_i(0x12);
    write_i(0xdb); /*设置vcomh*/
    write_i(0x40);
    write_i(0xAF); /*显示开启*/
}

void write_i(unsigned char ins)
{
    DC=0;
    CS=0;
    WR=1;
    P1=ins; /*指令*/
    WR=0;
    WR=1;
    CS=1;
}

void write_d(unsigned char dat)
{
    DC=1;
    CS=0;
    WR=1;
    P1=dat; /*数据*/
    WR=0;
    WR=1;
    CS=1;
}

void delay(unsigned int i)
{
    while(i>0)
    {
        i--;
    }
}