色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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
    +關注

    關注

    119

    文章

    6214

    瀏覽量

    224550
收藏 人收藏

    評論

    相關推薦

    利用云主機快速開發MQTT客戶端仿真硬件上云IoTDA

    項目的目標不僅僅是為開發者提供一個調試工具,更重要的是通過仿真硬件的方式,使得開發者能夠從軟件層面全面體驗物聯網設備上云的全過程。
    的頭像 發表于 01-13 14:15 ?532次閱讀
    利用云主機快速開發MQTT客戶端仿真硬件上云IoTDA

    SAE J3400標準助力北美電動汽車充電未來

    專家強調,SAE J3400標準涵蓋的不僅僅是充電連接器,而是一整套充電系統,而且其中整合了大量行業最佳實踐。
    的頭像 發表于 12-11 16:07 ?216次閱讀

    注意!無線模塊不接天線不僅僅是影響傳輸距離

    無線模塊的有效通信距離通常依賴于其發射功率和信號的傳播能力。在沒有天線的情況下,信號無法正常輻射,這將直接導致通信距離的顯著降低。對于小功率模塊而言,其原本有限的有效通信距離幾乎會降為零;而對于大功率模塊,盡管其理論上可以覆蓋較大的范圍,但在無天線情況下,其信號覆蓋能力也會大打折扣。且數據傳輸可能會出現延遲、丟包等問題,嚴重影響用戶體驗。
    的頭像 發表于 11-14 14:55 ?654次閱讀
    注意!無線模塊不接天線<b class='flag-5'>不僅僅是</b>影響傳輸距離

    慧明DM16數字調音臺產品概述

    在數字調音臺里面,信號處理芯片(DSP)是它的心臟。在我們慧明的DM16數字調音臺里,它不僅僅是硬核,還是超級引擎!
    的頭像 發表于 09-06 10:24 ?903次閱讀

    數字車鑰匙市場規模及發展現狀

    數字車鑰匙的出現,不僅僅是物理鑰匙的替代,還可實現無線開關鎖、啟動車輛、智能感應、遠程控制、艙內監測、自動泊車等功能的集成。
    的頭像 發表于 08-30 09:32 ?1166次閱讀
    數字車鑰匙市場規模及發展現狀

    不僅僅是節能,AI商業照明解決方案為地下停車場帶來哪些想象空間?

    近日,國家發展改革委、市場監管總局、生態環境部等三部門聯合印發《關于進一步強化碳達峰碳中和標準計量體系建設行動方案(2024—2025年)》,緊扣節能降碳重點領域發力,明確提出:對標國際先進水平,修訂升級照明器具產品能效標準,擴大能效產品覆蓋范圍。如何將智能技術、綠色理念與建筑相結合,推動商業照明的可持續發展?如何減少商業空間的能耗浪費,提升能源利用效率,降
    的頭像 發表于 08-14 15:39 ?382次閱讀
    <b class='flag-5'>不僅僅是</b>節能,AI商業照明解決方案為地下停車場帶來哪些想象空間?

    五彩斑斕的芯片晶圓:不僅僅是科技的結晶

    在半導體行業中,芯片晶圓是核心組件,而在展示這些精密的科技產品時,人們常常會發現它們呈現出五彩斑斕的外觀。這一現象并非偶然,而是由多種因素共同作用的結果。下面,我們將深入探討為何芯片晶圓會展現出如此豐富的色彩。
    的頭像 發表于 08-12 09:46 ?1145次閱讀
    五彩斑斕的芯片晶圓:<b class='flag-5'>不僅僅是</b>科技的結晶

    電源設計:同步整流帶來的不僅僅是高效率

    您是否曾經應要求設計過一種輕負載狀態下具有良好負載瞬態響應的電源呢?如果是,并且您還允許電源非連續,那么您可能會發現控制環路的增益在輕負載狀態下急劇下降。這會導致較差的瞬態響應,并且需要大量的輸出濾波電容器。一種更簡單的方法是讓電源在所有負載狀態下都為連續。是一個簡單的同步降壓轉換器,用于演示輸出電感中連續和非連續電流的負載瞬態響應。在低至空載的負載狀態下,輸出電感電流都一直保持連續,因為同步整流器允許電感電流在輕負載狀態下反向流動。只需用一個二極管替換底部FET (Q2),電路便可轉為非連續。盡管本文介紹的是降壓拓撲結構的區別,但您會注意到所有電源拓撲都有類似的響應。 圖2 同步運行(左)具有zui佳瞬態響應非連續運行期間,瞬態響應較差的原因是環路特性急劇變化,如圖3所示。左邊的曲線顯示了連續運行期間的環路增益。控制環路具有50kHz的帶寬,相補角為60度。右邊的曲線為功率級轉為非連續時的響應情況。功率級從連續運行期間的一對復極,變為非連續運行期間的一個單低頻實極點。該極點的頻率由輸出電容器和負載電阻器決定。相比連續情況,您可以看到低頻率下低頻極點引起的相移過程。低頻率下,增益急劇下降,原因是極點導致更低的交叉頻率,從而降低了瞬態響應。總之,同步整流可提高效率,同時也能夠極大地幫助瞬態負載調節。它為電源預加載提供了一種高效的方法。另外,相比擺動電感,它還擁有更加穩定的控制環路特性。它提高了傳統降壓轉換器,以及所有其他能夠使用同步整流的拓撲結構的動態性。
    發表于 07-11 11:17

    一鍵掌控,4G紅外插座引領智能生活新潮流!

    當我們談及智能家居、智能辦公時,隨著物聯網的逐步發展,4G物聯網卡資費也是逐年下探,4G插座無疑是這場變革中的一顆耀眼明星。它不僅僅是一款智能插座,更是連接您與未來科技之間的橋梁;它不僅僅是簡單
    的頭像 發表于 06-17 16:11 ?414次閱讀
    一鍵掌控,4G紅外插座引領智能生活新潮流!

    求助,在CYW4373E上同時使用AP+IBSS時遇到的問題求解

    我 直接使用 Wifi,而不是 IBSS。IFX CYW4373E 的支持情況如何?芯片是否支持多車輛而不僅僅是點對點?
    發表于 05-30 07:52

    理想PLC程序的特征與標準

    一套完整的PLC程序,并不僅僅是使系統能夠運行起來這么簡單,它也需要完整的注釋、精良的架構、良好的可擴展性、完備的報警保護系統、運行前的模擬系統。
    發表于 04-24 11:31 ?375次閱讀
    理想PLC程序的特征與標準

    探索ChatGPT模型的人工智能語言模型

    最大的區別ChatGPT是通過對話數據進行預訓練,而不僅僅是通過單一的句子進行預訓練,這使得ChatGPT能夠更好地理解對話的上下文,并進行連貫的回復。
    發表于 04-24 10:19 ?724次閱讀
    探索ChatGPT模型的人工智能語言模型

    生成式AI開發者利用NVIDIA技術變革車內體驗

    未來的汽車將不僅僅是交通運輸方式,而是會成為智能伙伴,將技術和舒適性無縫結合,以提升駕駛體驗,并且從內到外都將以安全為本。
    的頭像 發表于 03-21 09:42 ?461次閱讀

    一個節電的叮咚門鈴電路

    這個電路不僅僅是一個簡單的雙音門鈴。相反,它利用包絡調制來產生真實的“叮咚”鈴聲。
    的頭像 發表于 02-25 14:28 ?1012次閱讀
    一個節電的叮咚門鈴電路

    思必馳智能車載投影儀,讓汽車秒變移動影院

    隨著自駕旅行、戶外露營的火熱,汽車已不僅僅是代步工具,更向著移動的“第三空間”演化,為用戶構建集消費、工作、娛樂于一體的“在路上的家”。
    的頭像 發表于 01-26 11:30 ?1888次閱讀
    主站蜘蛛池模板: 2021国产精品视频一区| 曰产无码久久久久久精品| 一个人的免费完整在线观看HD| 国产成人h在线视频| 日韩欧美 亚洲视频| 办公室激情在线观看| 日本女人水多| 国产AV天堂亚洲AV麻豆| 日韩欧美精品有码在线播放 | 小777论坛| 国产久爱青草视频在线观看| 天美传媒麻豆精品| 国产精品一区二区免费| 亚洲福利网站| 九九热精品视频在线观看| 亚洲中文无码亚洲人在线观看-| 九九夜夜妹子| 67194线在线精品观看| 欧美精品AV无码一区二区| 成人无码精品一区二区在线观看| 色欲AV人妻精品麻豆AV| 国产人妻人伦精品久久久| 亚洲伊人精品| 脔到她哭H粗话HWWW男男动漫| 97色伦久久视频在观看| 日本无码人妻丰满熟妇5G影院| 国产精品视频免费视频| 一本色道久久综合亚洲精品加| 蜜臀亚洲AV永久无码精品老司机| 成年人视频在线观看免费| 亚洲AV 中文字幕 国产 欧美 | 在线免费观看成年人视频| 奶头从情趣内衣下露了出来AV| 成人a视频片在线观看免费| 先锋影音av无码第1页| 久久精品热播在线看| BT7086福利二区最新| 亚洲.日韩.欧美另类| 男生脱美女内裤内衣动态图| 国产精品美女久久久网站动漫 | 伊人精品久久久大香线蕉99|