chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

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

電子發(fā)燒友論壇 ? 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) 寫數(shù)據(jù)
#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工具下載到開發(fā)板:

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


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

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

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

    關注

    121

    文章

    6313

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    谷歌AI模型點亮開發(fā)無限可能

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

    為FreeRTOS增加新的設備驅(qū)動程序

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

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

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

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

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

    NVIDIA 800V HVDC 架構賦能新一代AI數(shù)據(jù)中心 挑戰(zhàn)傳統(tǒng)機架電源系統(tǒng)極限

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

    UWB技術如何推動智能制造產(chǎn)業(yè)變革

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

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

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

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

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

    戶外通信機柜選購方法,服務的關鍵

    戶外通信機柜購買指南室外通信機柜簡介在設置室外電信系統(tǒng)時,最關鍵的決策之一是選擇合適的機柜。它不僅僅是一個盒子;它是您重要設備的第一道防線。選擇合適的機柜的意義選擇合適的戶外機柜不僅僅是一個技術問題
    的頭像 發(fā)表于 02-14 11:31 ?626次閱讀
    戶外通信機柜選購方法,服務的關鍵

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

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

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

    專家強調(diào),SAE J3400標準涵蓋的不僅僅是充電連接器,而是一整套充電系統(tǒng),而且其中整合了大量行業(yè)最佳實踐。
    的頭像 發(fā)表于 12-11 16:07 ?860次閱讀

    恩智浦助力打造靈活可擴展的電動汽車充電樁

    隨著電動汽車市場的發(fā)展,對于充電樁的需求也在持續(xù)增長。今天,電動汽車充電樁的建設和部署,不僅僅是電動汽車配套服務的一部分,也已經(jīng)成為未來能源基礎設施戰(zhàn)略中不可或缺的一環(huán)。
    的頭像 發(fā)表于 11-26 17:37 ?1134次閱讀

    凌蒙派OpenHarmony開源項目榮獲本期Gitee官方推薦

    近日,我司凌蒙派OpenHarmony開源項目榮獲本期Gitee官方推薦。本期Gitee官方推薦不僅是對凌蒙派OpenHarmony開源項目
    的頭像 發(fā)表于 11-20 01:04 ?1017次閱讀
    凌蒙派OpenHarmony<b class='flag-5'>開源</b><b class='flag-5'>項目</b>榮獲本期Gitee官方推薦

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

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