原先用LiteOS點亮過OLED,這次用HarmonyOS點亮OLED
1、在applications/sample/wifi-iot/app下新建myshow文件夾,myshow文件夾下新建myshow.c、oled_ssd1306.c、oled_ssd1306.h、BUILD.gn四個文件。

oled_ssd1306.c為:
#include #include
#include "ohos_types.h"#include "iot_errno.h"#include "iot_i2c.h"
#include "oled_ssd1306.h"
/************************************6*8的點陣************************************/static unsigned char F6x8[][6] ={ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }, // horiz lines};
/****************************************8*16的點陣************************************/static const unsigned char F8X16[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,// 60 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94};/*---6*6 點陣*/static const unsigned char F6X6[]={ 0x00,0x1E,0x1E,0x1E,0x1E,0x00, //■};
/*---8*8 點陣*/static const unsigned char F8X8[]={ //0x00,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00, 0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00, //■};
#define OLED_I2C_IDX 0#define OLED_I2C_BAUDRATE (400*1000) // 400k#define OLED_I2C_ADDR 0x78 // 默認地址為 0x78#define OLED_I2C_CMD 0x00 // 0000 0000 寫命令#define OLED_I2C_DATA 0x40 // 0100 0000(0x40) 寫數據#define OLED_WIDTH (128)
#define SNAKE_CLEAR_BLOCK 0x00
static uint32 OledWriteByte(uint8 regAddr, uint8 byte){ // TODO: Check SSD1306 DataSheet if must write by byte.
uint8 buffer[] = {regAddr, byte};
return IoTI2cWrite(OLED_I2C_IDX, OLED_I2C_ADDR, buffer, ARRAY_SIZE(buffer));}
/** * [url=home.php?mod=space&uid=2666770]@Brief[/url] Write a command byte to OLED device. * * [url=home.php?mod=space&uid=3142012]@param[/url] cmd the commnad byte to be writen. * [url=home.php?mod=space&uid=1141835]@Return[/url] Returns {[url=home.php?mod=space&uid=41289]@Link[/url] WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. */static uint32 OledWriteCmd(uint8 cmd){ return OledWriteByte(OLED_I2C_CMD, cmd);}
/** * @brief Write a data byte to OLED device. * * @param cmd the data byte to be writen. * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. */static uint32 OledWriteData(uint8 data){ return OledWriteByte(OLED_I2C_DATA, data);}
/** * @brief ssd1306 OLED Initialize. */uint32 OledInit(void){ static const uint8 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 };
IoTI2cInit(OLED_I2C_IDX, OLED_I2C_BAUDRATE);
for (uint32 i = 0; i < ARRAY_SIZE(initCmds); i++) { uint32 status = OledWriteCmd(initCmds[i]); if (status != IOT_SUCCESS) { return status; } }
return IOT_SUCCESS;}
void OledSetPosition(uint8 x, uint8 y){ OledWriteCmd(0xb0 + y); OledWriteCmd(((x & 0xf0) >> 4) | 0x10); OledWriteCmd(x & 0x0f);}
void OledFillScreen(uint8 fillData){ uint8 m = 0; uint8 n = 0;
for (m=0; m < 8; m++) { OledWriteCmd(0xb0 + m); OledWriteCmd(0x00); OledWriteCmd(0x10);
for (n=0; n < 128; n++) { OledWriteData(fillData); } }}
/** * @brief 8*16 typeface * @param x: write positon start from x axis * @param y: write positon start from y axis * @param ch: write data * @param font: selected font */void OledShowChar(uint8 x, uint8 y, uint8 ch, Font font){ uint8 c = 0; uint8 i = 0;
c = ch - ' '; //得到偏移后的值 if (x > OLED_WIDTH - 1) { x = 0; y = y + 2; }
if (font == FONT8x16) { OledSetPosition(x, y); for (i = 0; i < 8; i++){ OledWriteData(F8X16[c*16 + i]); }
OledSetPosition(x, y+1); for (i = 0; i < 8; i++) { OledWriteData(F8X16[c*16 + i + 8]); } }else { OledSetPosition(x, y); for (i = 0; i < 6; i++) { OledWriteData(F6x8[c][i]); } }}
void OledShowString(uint8 x, uint8 y, const char* str, Font font){ uint8 j = 0; if (str == NULL) { printf("param is NULL,Please check!!!"); return; }
while (str[j]) { OledShowChar(x, y, str[j], font); x += 8; if (x > 120) { x = 0; y += 2; } j++; }}oled_ssd1306.h:
#ifndef OLED_SSD1306_H#define OLED_SSD1306_H
#include "ohos_types.h"
/** * @brief ssd1306 OLED Initialize. */uint32 OledInit(void);/** * @brief Set cursor position * * @param x the horizontal posistion of cursor * @param y the vertical position of cursor * @return Returns {@link WIFI_IOT_SUCCESS} if the operation is successful; * returns an error code defined in {@link wifiiot_errno.h} otherwise. */void OledSetPosition(uint8 x, uint8 y);
void OledFillScreen(uint8 fillData);
enum Font { FONT6x8 = 1, FONT8x16};typedef enum Font Font;
enum DisOnOff{ DISOFF, DISON};
typedef enum DisOnOff DisOnOff;
void OledShowChar(uint8 x, uint8 y, uint8 ch, Font font);void OledShowString(uint8 x, uint8 y, const char* str, Font font);
void PrintBlock(uint8 x0, uint8 y0);void DisplayBlock(uint8 x0, uint8 y0);
#endif // OLED_SSD1306_Hmyshow.c:
#include
#include
#include "ohos_init.h"#include "cmsis_os2.h"#include "iot_gpio.h"
#include "oled_ssd1306.h"
void mymain(void){
OledInit();
OledFillScreen(0x00); OledShowString(26, 2, "HELLO WORLD!", FONT8x16);}
SYS_RUN(mymain);myshow/BUILD.gn:
static_library("myshow") { sources = [ "oled_ssd1306.c", "myshow.c", ]
include_dirs = [ "http://utils/native/lite/include", "http://kernel/liteos_m/kal/cmsis", "http://base/iot_hardware/peripheral/interfaces/kits", ]}然后修改app/BUILD.gn:
import("http://build/lite/config/component/lite_component.gni")
lite_component("app") { features = [ # "demo_snake", "myshow:myshow", ] deps = []}保存后編譯:

然后把生成的Hi3861_wifiiot_app_allinone.bin用HiBurn工具下載到開發板:

下載完成后OLED顯示如下圖:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
OLED
+關注
關注
121文章
6358瀏覽量
233655
發布評論請先 登錄
相關推薦
熱點推薦
INDEMIND助力會暢科技旗下OLLOBOT機器人OlloNi亮相CES 2026
CES 2026,INDEMIND助力會暢科技旗下OLLOBOT,攜新一代賽博寵物OlloNi驚艷亮相。它不僅僅是一個機器人,更是一位能主動感知、深度共情的家庭伙伴。而這一創新智能體驗的背后,離不開INDEMIND ROBOMIND機器人物理AI大腦的全棧賦能。
從高速鏈路到基礎頻點:系統節奏如何被工程化地穩住?
CES 2026?還沒正式開幕,但三星已經提前亮出了一系列概念產品:AI OLED?機器人、情緒燈、磁帶式助手、OLED?唱盤,還有面向?XR?的?1.4?英寸?RGB OLEDoS?微顯示器。形態各異,未來感十足。走近這些產品,你會發現,它們
新思科技HAPS-200助力阿里巴巴達摩院加速玄鐵C930開發驗證
在AI驅動的時代,驗證不僅僅是功能正確,更要確保性能、功耗和軟件兼容性。HAPS-200的引入,助力達摩院玄鐵團隊能夠在設計早期完成系統級驗證,顯著縮短上市時間,降低風險,并推動RISC-V生態加速成熟,開啟RISC-V高性能新時代。
壹連科技CCS產品全球累計出貨量突破一億片
近日,壹連科技自主研發生產的CCS電芯連接組件全球累計出貨量正式突破100,000,000片!一億片不僅僅是一個數字,它是市場與客戶的信任見證,是壹連人用智慧和汗水鑄就的里程碑,更是壹連科技賦能新能源產業的生動注腳。
蜀瑞開關柜綜合監控裝置KO傳統智能操顯,為何可以替代傳統操顯
蜀瑞開關柜綜合監控裝置能夠替代傳統智能操顯設備,主要得益于它在技術理念、功能集成、智能化程度以及安全運維等多方面的顯著提升。它不僅僅是一個狀態指示設備,更是一個集成了監測、控制、診斷和管理的綜合平臺。
正方科技千乘動力智慧儲能解決方案賦能多元場景
當我們談論能源的未來時,儲能技術正成為改變游戲規則的關鍵力量。它不僅僅是能量的容器,更是能源管理的智慧大腦,讓電力在時間與空間上實現更高效的分配與利用。
谷歌AI模型點亮開發無限可能
在 2025 年的 Google 谷歌開發者大會上,AI 不是一門“技術”,更是一股徹底改變開發范式的“力量”,助力開發者們在海外市場更上一層樓。AI 已經不僅僅是生成幾行代碼,它正在全面提升整個開發過程。從模型突破到工具優化,從本地開發到全球落地,每一項更新,都在回應開發者最迫切的需求。
為FreeRTOS增加新的設備驅動程序
如果你正在使用FreeRTOS構建嵌入式系統,并且考慮添加新的設備驅動程序,那么這篇文章很適合你。高效的設備集成不僅僅是讓設備功能正常運行——更關乎模塊化、可靠性和安全性。
CYT2B93CAE怎樣才能接收特定 ID 的中斷?
你好,我正在使用 CYT2B93CAE
使用設備配置器 5.3,我選擇 RX 緩沖區來接受特定的 ID(例如,0x020)。然而,問題是我在總線上的所有幀上都收到了中斷,而不僅僅是專用 ID。
當其他所有 ID 均未發生中斷時,我怎樣才能接收特定 ID 的中斷?
發表于 07-15 07:09
隔離屏障的概念以及工作電壓和測試電壓之間的區別
電源中的電氣隔離不僅僅是關乎安全——它更是性能和可靠性的基石。本文將探討隔離屏障的概念以及工作電壓和測試電壓之間的區別。它還將討論標準為何重要?幫助工程師設計出滿足當今嚴苛法規和應用需求的穩健系統。
NVIDIA 800V HVDC 架構賦能新一代AI數據中心 挑戰傳統機架電源系統極限
800 V HVDC 不僅僅是當今的機架,而是面向未來的 AI 基礎設施。2027 年,800 V HVDC 數據中心將與 NVIDIA Kyber 機架級系統同步全面投產,確保為要求日益嚴苛的 AI 模型提供無縫可擴展性。
UWB技術如何推動智能制造產業變革
讓我們搭乘時光機,回到20世紀80年代的一家制造商;如果用那時的日常運營方式應對今天的競爭環境,它還能生存下來嗎?恐怕很難。當今的制造業早已不僅僅是傳統意義上的生產制造,而是邁向了智能制造的新時代。
芯科科技擴展Zephyr RTOS項目支持
在 Silicon Labs(芯科科技),我們對無線通信充滿熱情,致力于推動下一代物聯網設備的發展。當然,創新的無線解決方案不僅僅是擁有出色的藍牙或Wi-Fi 芯片—強大的軟件同樣必不可少。我們
解密電源與電機的魔法——電源的魔法:點亮智能家電的“能量之源”
家電的能量供給:電源技術知多少?如果說電機是家電的“心臟”,那么電源就是它們的“供氧機”,為整個系統提供源源不斷的“能量”。電源的作用不可小覷,它不僅僅是一個把交流電轉化為直流電的簡單裝置,還是一個能量調節和分配的高手。在家電的世界里,電源主要有兩種類型:開關電源和線性電源。開關電源是目
【開源項目】點亮OLED,不僅僅是LiteOS
評論