OpenHarmony鸿蒙硬件-OLED显示屏初始化命令解释

代码

/**
 * @brief ssd1306 OLED 初始化操作.
 */
uint32_t OledInit(void)
{
    // 初始化命令
    static const uint8_t initCmds[] = {
        0xAE, // --display off
        0x00, // ---set low column address
        0x10, // ---set high column address
        0x40, // --set start line address  
        0xB0, // --set page address
        0x81, // contract control
        0xFF, // --128   
        0xA1, // set segment remap 
        0xA6, // --normal / reverse
        0xA8, // --set multiplex ratio(1 to 64)
        0x3F, // --1/32 duty
        0xC8, // Com scan direction
        0xD3, // -set display offset
        0x00, // 
        0xD5, // set osc division
        0x80, // 
        0xD8, // set area color mode off
        0x05, // 
        0xD9, // Set Pre-Charge Period
        0xF1, // 
        0xDA, // set com pin configuartion
        0x12, // 
        0xDB, // set Vcomh
        0x30, // 
        0x8D, // set charge pump enable
        0x14, // 
        0xAF, // --turn on oled panel
    };
    // 设置 13 引脚为 SDA 总线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_13, WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA);
    // 设置 14 引脚为 SCL 时钟线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL);
    // 设置 I2C 波特率,能够与外部 I2C 设备(如 OLED 屏幕、传感器等)正常通信。
    I2cInit(WIFI_IOT_I2C_IDX_0, (400*1000)); // 400k
    // I2cSetBaudrate(WIFI_IOT_I2C_IDX_0, OLED_I2C_BAUDRATE);
    for (size_t i = 0; i < ARRAY_SIZE(initCmds); i++) {
        uint32_t status = Write(0x00,initCmds[i]);
        if (status != 0) {
            return status;
        }
    }
    return 0;
}

解释

每一条指令都有特定功能,用于配置屏幕的硬件参数和工作模式。

以下是逐行解析:

指令 含义说明
0xAE 关闭显示(Display Off)<br>初始化时先关闭屏幕,避免配置过程中出现乱码。
0x00 设置列地址低4位(Set Lower Column Address)<br>配合下一条指令,共同指定显示的起始列(低4位)。
0x10 设置列地址高4位(Set Higher Column Address)<br>与上一条指令组合,确定完整的起始列地址(0-127)。
0x40 设置起始行地址(Set Start Line Address)<br>指定屏幕从哪一行开始显示(默认从第0行开始)。
0xB0 设置页地址(Set Page Address)<br>OLED将屏幕分为8页(每页8行像素),此指令指定从第0页开始显示。
0x81 开启对比度控制(Contrast Control)<br>允许后续指令调节屏幕亮度。
0xFF 设置对比度值<br>0xFF表示最大对比度(亮度最高),值越小亮度越低。
0xA1 设置段重映射(Set Segment Re-map)<br>控制列的显示方向(0xA1表示列地址从右到左,0xA0则相反,用于调整屏幕左右镜像)。
0xA6 设置正常显示模式(Normal Display)<br>0xA6表示“1亮0灭”(正常显示),0xA7为反显(1灭0亮)。
0xA8 设置多路复用率(Set Multiplex Ratio)<br>配置屏幕的驱动路数,与屏幕高度相关。
0x3F 设置复用率参数<br>配合上一条指令,0x3F对应64行屏幕(0.96英寸OLED常见参数)。
0xC8 设置COM扫描方向(Com Output Scan Direction)<br>0xC8表示行地址从上到下扫描(0xC0则相反,用于调整屏幕上下翻转)。
0xD3 设置显示偏移(Set Display Offset)<br>控制屏幕整体上下偏移量(用于微调显示位置)。
0x00 显示偏移参数<br>0x00表示无偏移(偏移量为0)。
0xD5 设置时钟分频(Set Display Clock Divide Ratio)<br>配置内部振荡器频率,影响屏幕刷新速度。
0x80 时钟分频参数<br>默认值,平衡刷新速度和功耗。
0xD8 关闭区域颜色模式(Set Area Color Mode Off)<br>禁用特殊颜色模式(适用于单色OLED)。
0x05 区域颜色模式参数<br>配合上一条指令使用的默认值。
0xD9 设置预充电周期(Set Pre-Charge Period)<br>配置像素点亮前的充电时间,影响显示稳定性。
0xF1 预充电周期参数<br>针对3.3V供电的优化值。
0xDA 设置COM引脚配置(Set COM Pins Hardware Configuration)<br>根据屏幕硬件接线方式配置COM引脚(影响显示是否正常)。
0x12 COM引脚参数<br>适用于大多数64行OLED的默认配置。
0xDB 设置VCOMH电压(Set VCOMH Deselect Level)<br>配置COM引脚的电压水平,影响显示对比度和寿命。
0x30 VCOMH电压参数<br>3.3V供电下的推荐值。
0x8D 设置电荷泵使能(Set Charge Pump Enable)<br>控制内部电荷泵(为OLED提供工作电压)。
0x14 开启电荷泵<br>0x14表示启用电荷泵(必须开启,否则屏幕无法点亮)。
0xAF 开启显示(Display On)<br>初始化完成后开启屏幕,显示配置后的内容。

这些指令的作用是将OLED从断电状态配置为可正常工作的状态,包括:

  1. 关闭屏幕→设置行列地址→配置显示方向和亮度→初始化硬件参数→开启屏幕。
  2. 所有参数配置完成后,OLED才能正确接收和显示通过I2cWrite()发送的点阵数据。

不同品牌的OLED可能需要微调部分参数(如0xDA的引脚配置),但整体初始化逻辑一致。


原文出处:/show_1GW203MCayY7.html