OpenHarmony鸿蒙硬件-OLED显示屏开发-显示字母A 作者:马育民 • 2025-10-10 22:09 • 阅读:10006 # 说明 通过二进制的 `01` 拼成字母 `A` ,如下图: [](https://www.malaoshi.top/upload/0/0/1GW219OPt91K.png) **通过上图可知:** - 二进制数据,低位显示在上面,高位显示在下面 - 字母 `A` 是 `5像素宽,8像素高` ### 关键代码 ``` Write(0x40,0b01111100); // 0x7c Write(0x40,0b00010010); // 0x12 Write(0x40,0b00010001); // 0x11 Write(0x40,0b00010010); // 0x12 Write(0x40,0b01111100); // 0x7c ``` # 完整代码 ``` #include #include #include "ohos_init.h" #include "cmsis_os2.h" #include "wifiiot_gpio.h" #include "wifiiot_gpio_ex.h" #include "wifiiot_i2c.h" #define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0]) /* cmdType:指令类型:0x00表示写指令,0x40表示写数据 data:数据。 当cmdType是0x00时,data表示指令内容 当cmdType是0x40时,data表示显示的内容 */ static uint32_t Write(uint8_t cmdType, uint8_t data) { uint8_t buffer[] = {cmdType, data}; WifiIotI2cData i2cData = {0}; i2cData.sendBuf = buffer; i2cData.sendLen = sizeof(buffer)/sizeof(buffer[0]); return I2cWrite(WIFI_IOT_I2C_IDX_0, 0x78, &i2cData); } /** * @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; } /*全屏填充*/ void OledFillScreen(uint8_t fillData) { uint8_t m = 0; uint8_t n = 0; for (m=0; m < 8; m++) { Write(0x00,0xb0 + m); // 设置起始行 // Write(0x00,0x00); // Write(0x00,0x10); for (n=0; n < 128; n++) { Write(0x40, fillData); // 显示到屏幕上 } } } // 显示字母 A static void OledDemo(void) { GpioInit(); OledInit(); OledFillScreen(0x00); Write(0x00,0xb0 + 1); Write(0x40,0b01111100); // 0x7c Write(0x40,0b00010010); // 0x12 Write(0x40,0b00010001); // 0x11 Write(0x40,0b00010010); // 0x12 Write(0x40,0b01111100); // 0x7c usleep(500000); } APP_FEATURE_INIT(OledDemo); ``` 原文出处:http://malaoshi.top/show_1GW219TN19hj.html