OpenHarmony鸿蒙硬件-OLED显示屏初始化命令解释 作者:马育民 • 2025-10-07 23:12 • 阅读:10006 # 代码 ``` /** * @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)初始化时先关闭屏幕,避免配置过程中出现乱码。 | | `0x00` | **设置列地址低4位**(Set Lower Column Address)配合下一条指令,共同指定显示的起始列(低4位)。 | | `0x10` | **设置列地址高4位**(Set Higher Column Address)与上一条指令组合,确定完整的起始列地址(0-127)。 | | `0x40` | **设置起始行地址**(Set Start Line Address)指定屏幕从哪一行开始显示(默认从第0行开始)。 | | `0xB0` | **设置页地址**(Set Page Address)OLED将屏幕分为8页(每页8行像素),此指令指定从第0页开始显示。 | | `0x81` | **开启对比度控制**(Contrast Control)允许后续指令调节屏幕亮度。 | | `0xFF` | **设置对比度值**`0xFF`表示最大对比度(亮度最高),值越小亮度越低。 | | `0xA1` | **设置段重映射**(Set Segment Re-map)控制列的显示方向(0xA1表示列地址从右到左,0xA0则相反,用于调整屏幕左右镜像)。 | | `0xA6` | **设置正常显示模式**(Normal Display)`0xA6`表示“1亮0灭”(正常显示),`0xA7`为反显(1灭0亮)。 | | `0xA8` | **设置多路复用率**(Set Multiplex Ratio)配置屏幕的驱动路数,与屏幕高度相关。 | | `0x3F` | **设置复用率参数**配合上一条指令,`0x3F`对应64行屏幕(0.96英寸OLED常见参数)。 | | `0xC8` | **设置COM扫描方向**(Com Output Scan Direction)`0xC8`表示行地址从上到下扫描(0xC0则相反,用于调整屏幕上下翻转)。 | | `0xD3` | **设置显示偏移**(Set Display Offset)控制屏幕整体上下偏移量(用于微调显示位置)。 | | `0x00` | **显示偏移参数**`0x00`表示无偏移(偏移量为0)。 | | `0xD5` | **设置时钟分频**(Set Display Clock Divide Ratio)配置内部振荡器频率,影响屏幕刷新速度。 | | `0x80` | **时钟分频参数**默认值,平衡刷新速度和功耗。 | | `0xD8` | **关闭区域颜色模式**(Set Area Color Mode Off)禁用特殊颜色模式(适用于单色OLED)。 | | `0x05` | **区域颜色模式参数**配合上一条指令使用的默认值。 | | `0xD9` | **设置预充电周期**(Set Pre-Charge Period)配置像素点亮前的充电时间,影响显示稳定性。 | | `0xF1` | **预充电周期参数**针对3.3V供电的优化值。 | | `0xDA` | **设置COM引脚配置**(Set COM Pins Hardware Configuration)根据屏幕硬件接线方式配置COM引脚(影响显示是否正常)。 | | `0x12` | **COM引脚参数**适用于大多数64行OLED的默认配置。 | | `0xDB` | **设置VCOMH电压**(Set VCOMH Deselect Level)配置COM引脚的电压水平,影响显示对比度和寿命。 | | `0x30` | **VCOMH电压参数**3.3V供电下的推荐值。 | | `0x8D` | **设置电荷泵使能**(Set Charge Pump Enable)控制内部电荷泵(为OLED提供工作电压)。 | | `0x14` | **开启电荷泵**`0x14`表示启用电荷泵(必须开启,否则屏幕无法点亮)。 | | `0xAF` | **开启显示**(Display On)初始化完成后开启屏幕,显示配置后的内容。 | 这些指令的作用是**将OLED从断电状态配置为可正常工作的状态**,包括: 1. 关闭屏幕→设置行列地址→配置显示方向和亮度→初始化硬件参数→开启屏幕。 2. 所有参数配置完成后,OLED才能正确接收和显示通过`I2cWrite()`发送的点阵数据。 不同品牌的OLED可能需要微调部分参数(如`0xDA`的引脚配置),但整体初始化逻辑一致。 原文出处:http://malaoshi.top/show_1GW203MCayY7.html