sunsili 发表于 2022-8-20 10:52:12

【开源项目】OpenHarmony点亮OLED,不仅仅是LiteOS

【开源项目】OpenHarmony点亮OLED,不仅仅是LiteOS
原先用LiteOS点亮过OLED,这次用OpenHarmonyOS点亮OLED
1、在applications/sample/wifi-iot/app下新建myshow文件夹,myshow文件夹下新建myshow.c、oled_ssd1306.c、oled_ssd1306.h、BUILD.gn四个文件。

oled_ssd1306.c为:

[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
#include <stdio.h>#include <unistd.h>
#include "ohos_types.h"#include "iot_errno.h"#include "iot_i2c.h"

#include "oled_ssd1306.h"
/************************************6*8的点阵************************************/static unsigned char F6x8[] ={    { 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_BLOCK0x00

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));}
/** * @Brief Write a command byte to OLED device. * * @param cmd the commnad 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 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);      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);      }
      OledSetPosition(x, y+1);      for (i = 0; i < 8; i++) {            OledWriteData(F8X16);      }    }else {      OledSetPosition(x, y);      for (i = 0; i < 6; i++) {            OledWriteData(F6x8);      }    }}

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) {      OledShowChar(x, y, str, 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_H
myshow.c:

[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
#include <stdio.h>
#include <unistd.h>
#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 = [      "//utils/native/lite/include",      "//kernel/liteos_m/kal/cmsis",      "//base/iot_hardware/peripheral/interfaces/kits",]}
然后修改app/BUILD.gn:

[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {    features = [      # "demo_snake",      "myshow:myshow",    ]    deps = []}
保存后编译:

然后把生成的Hi3861_wifiiot_app_allinone.bin用HiBurn工具下载到开发板:

下载完成后OLED显示如下图:



页: [1]
查看完整版本: 【开源项目】OpenHarmony点亮OLED,不仅仅是LiteOS