国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【開源項目】點亮OLED,不僅僅是LiteOS

電子發燒友論壇 ? 2022-08-25 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

原先用LiteOS點亮過OLED,這次用HarmonyOS點亮OLED

1、在applications/sample/wifi-iot/app下新建myshow文件夾,myshow文件夾下新建myshow.c、oled_ssd1306.c、oled_ssd1306.h、BUILD.gn四個文件。

4353f314-22cd-11ed-9ade-dac502259ad0.png


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_H

myshow.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 = []
}

保存后編譯:

4369854e-22cd-11ed-9ade-dac502259ad0.png


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

438630ae-22cd-11ed-9ade-dac502259ad0.png


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

4395774e-22cd-11ed-9ade-dac502259ad0.jpg

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OLED
    +關注

    關注

    121

    文章

    6358

    瀏覽量

    233655
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    INDEMIND助力會暢科技旗下OLLOBOT機器人OlloNi亮相CES 2026

    CES 2026,INDEMIND助力會暢科技旗下OLLOBOT,攜新一代賽博寵物OlloNi驚艷亮相。它不僅僅是一個機器人,更是一位能主動感知、深度共情的家庭伙伴。而這一創新智能體驗的背后,離不開INDEMIND ROBOMIND機器人物理AI大腦的全棧賦能。
    的頭像 發表于 01-16 09:12 ?965次閱讀

    從高速鏈路到基礎頻點:系統節奏如何被工程化地穩住?

    CES 2026?還沒正式開幕,但三星已經提前亮出了一系列概念產品:AI OLED?機器人、情緒燈、磁帶式助手、OLED?唱盤,還有面向?XR?的?1.4?英寸?RGB OLEDoS?微顯示器。形態各異,未來感十足。走近這些產品,你會發現,它們
    的頭像 發表于 01-09 17:14 ?190次閱讀
    從高速鏈路到基礎頻點:系統節奏如何被工程化地穩住?

    深圳光量子工廠啟示:PCI 加速卡為何偏向 25MHz 2016 有源晶振?

    在 PCI?加速卡項目中,工程師使用SJK 2016?系列有源晶振?25MHZ。原因不僅僅是規格匹配,更在于系統復雜度。
    的頭像 發表于 12-12 16:43 ?1206次閱讀
    深圳光量子工廠啟示:PCI 加速卡為何偏向 25MHz 2016 有源晶振?

    新思科技HAPS-200助力阿里巴巴達摩院加速玄鐵C930開發驗證

    在AI驅動的時代,驗證不僅僅是功能正確,更要確保性能、功耗和軟件兼容性。HAPS-200的引入,助力達摩院玄鐵團隊能夠在設計早期完成系統級驗證,顯著縮短上市時間,降低風險,并推動RISC-V生態加速成熟,開啟RISC-V高性能新時代。
    的頭像 發表于 11-18 11:12 ?905次閱讀

    壹連科技CCS產品全球累計出貨量突破一億片

    近日,壹連科技自主研發生產的CCS電芯連接組件全球累計出貨量正式突破100,000,000片!一億片不僅僅是一個數字,它是市場與客戶的信任見證,是壹連人用智慧和汗水鑄就的里程碑,更是壹連科技賦能新能源產業的生動注腳。
    的頭像 發表于 11-18 09:59 ?672次閱讀

    蜀瑞開關柜綜合監控裝置KO傳統智能操顯,為何可以替代傳統操顯

    蜀瑞開關柜綜合監控裝置能夠替代傳統智能操顯設備,主要得益于它在技術理念、功能集成、智能化程度以及安全運維等多方面的顯著提升。它不僅僅是一個狀態指示設備,更是一個集成了監測、控制、診斷和管理的綜合平臺。
    的頭像 發表于 09-25 17:45 ?678次閱讀
    蜀瑞開關柜綜合監控裝置KO傳統智能操顯,為何可以替代傳統操顯

    正方科技千乘動力智慧儲能解決方案賦能多元場景

    當我們談論能源的未來時,儲能技術正成為改變游戲規則的關鍵力量。它不僅僅是能量的容器,更是能源管理的智慧大腦,讓電力在時間與空間上實現更高效的分配與利用。
    的頭像 發表于 09-16 16:33 ?1106次閱讀

    谷歌AI模型點亮開發無限可能

    在 2025 年的 Google 谷歌開發者大會上,AI 不是一門“技術”,更是一股徹底改變開發范式的“力量”,助力開發者們在海外市場更上一層樓。AI 已經不僅僅是生成幾行代碼,它正在全面提升整個開發過程。從模型突破到工具優化,從本地開發到全球落地,每一項更新,都在回應開發者最迫切的需求。
    的頭像 發表于 08-29 09:29 ?1139次閱讀

    為FreeRTOS增加新的設備驅動程序

    如果你正在使用FreeRTOS構建嵌入式系統,并且考慮添加新的設備驅動程序,那么這篇文章很適合你。高效的設備集成不僅僅是讓設備功能正常運行——更關乎模塊化、可靠性和安全性。
    的頭像 發表于 08-06 15:44 ?989次閱讀
    為FreeRTOS增加新的設備驅動程序

    CYT2B93CAE怎樣才能接收特定 ID 的中斷?

    你好,我正在使用 CYT2B93CAE 使用設備配置器 5.3,我選擇 RX 緩沖區來接受特定的 ID(例如,0x020)。然而,問題是我在總線上的所有幀上都收到了中斷,而不僅僅是專用 ID。 當其他所有 ID 均未發生中斷時,我怎樣才能接收特定 ID 的中斷?
    發表于 07-15 07:09

    隔離屏障的概念以及工作電壓和測試電壓之間的區別

    電源中的電氣隔離不僅僅是關乎安全——它更是性能和可靠性的基石。本文將探討隔離屏障的概念以及工作電壓和測試電壓之間的區別。它還將討論標準為何重要?幫助工程師設計出滿足當今嚴苛法規和應用需求的穩健系統。
    的頭像 發表于 07-08 15:29 ?937次閱讀

    NVIDIA 800V HVDC 架構賦能新一代AI數據中心 挑戰傳統機架電源系統極限

    800 V HVDC 不僅僅是當今的機架,而是面向未來的 AI 基礎設施。2027 年,800 V HVDC 數據中心將與 NVIDIA Kyber 機架級系統同步全面投產,確保為要求日益嚴苛的 AI 模型提供無縫可擴展性。
    的頭像 發表于 05-29 17:15 ?3708次閱讀
    NVIDIA 800V HVDC 架構賦能新一代AI數據中心 挑戰傳統機架電源系統極限

    UWB技術如何推動智能制造產業變革

    讓我們搭乘時光機,回到20世紀80年代的一家制造商;如果用那時的日常運營方式應對今天的競爭環境,它還能生存下來嗎?恐怕很難。當今的制造業早已不僅僅是傳統意義上的生產制造,而是邁向了智能制造的新時代。
    的頭像 發表于 05-23 11:38 ?926次閱讀

    芯科科技擴展Zephyr RTOS項目支持

    在 Silicon Labs(芯科科技),我們對無線通信充滿熱情,致力于推動下一代物聯網設備的發展。當然,創新的無線解決方案不僅僅是擁有出色的藍牙或Wi-Fi 芯片—強大的軟件同樣必不可少。我們
    的頭像 發表于 03-19 10:44 ?1403次閱讀

    解密電源與電機的魔法——電源的魔法:點亮智能家電的“能量之源”

    家電的能量供給:電源技術知多少?如果說電機是家電的“心臟”,那么電源就是它們的“供氧機”,為整個系統提供源源不斷的“能量”。電源的作用不可小覷,它不僅僅是一個把交流電轉化為直流電的簡單裝置,還是一個能量調節和分配的高手。在家電的世界里,電源主要有兩種類型:開關電源和線性電源。開關電源是目
    的頭像 發表于 03-15 08:34 ?2032次閱讀
    解密電源與電機的魔法——電源的魔法:<b class='flag-5'>點亮</b>智能家電的“能量之源”