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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

【開(kāi)源項(xiàng)目】點(diǎn)亮OLED,不僅僅是LiteOS

電子發(fā)燒友論壇 ? 2022-08-25 09:59 ? 次閱讀

原先用LiteOS點(diǎn)亮過(guò)OLED,這次用HarmonyOS點(diǎn)亮OLED

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

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的點(diǎn)陣************************************/
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的點(diǎn)陣************************************/
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 點(diǎn)陣*/
static const unsigned char F6X6[]=
{
  0x00,0x1E,0x1E,0x1E,0x1E,0x00, //■
};

/*---8*8 點(diǎn)陣*/
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    // 默認(rèn)地址為 0x78
#define OLED_I2C_CMD    0x00    // 0000 0000    寫(xiě)命令
#define OLED_I2C_DATA    0x40    // 0100 0000(0x40) 寫(xiě)數(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工具下載到開(kāi)發(fā)板:

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


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

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

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

    關(guān)注

    119

    文章

    6171

    瀏覽量

    223679
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    慧明DM16數(shù)字調(diào)音臺(tái)產(chǎn)品概述

    在數(shù)字調(diào)音臺(tái)里面,信號(hào)處理芯片(DSP)是它的心臟。在我們慧明的DM16數(shù)字調(diào)音臺(tái)里,它不僅僅是硬核,還是超級(jí)引擎!
    的頭像 發(fā)表于 09-06 10:24 ?566次閱讀

    數(shù)字車鑰匙市場(chǎng)規(guī)模及發(fā)展現(xiàn)狀

    數(shù)字車鑰匙的出現(xiàn),不僅僅是物理鑰匙的替代,還可實(shí)現(xiàn)無(wú)線開(kāi)關(guān)鎖、啟動(dòng)車輛、智能感應(yīng)、遠(yuǎn)程控制、艙內(nèi)監(jiān)測(cè)、自動(dòng)泊車等功能的集成。
    的頭像 發(fā)表于 08-30 09:32 ?819次閱讀
    數(shù)字車鑰匙市場(chǎng)規(guī)模及發(fā)展現(xiàn)狀

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

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

    電源設(shè)計(jì):同步整流帶來(lái)的不僅僅是高效率

    您是否曾經(jīng)應(yīng)要求設(shè)計(jì)過(guò)一種輕負(fù)載狀態(tài)下具有良好負(fù)載瞬態(tài)響應(yīng)的電源呢?如果是,并且您還允許電源非連續(xù),那么您可能會(huì)發(fā)現(xiàn)控制環(huán)路的增益在輕負(fù)載狀態(tài)下急劇下降。這會(huì)導(dǎo)致較差的瞬態(tài)響應(yīng),并且需要大量的輸出濾波電容器。一種更簡(jiǎn)單的方法是讓電源在所有負(fù)載狀態(tài)下都為連續(xù)。是一個(gè)簡(jiǎn)單的同步降壓轉(zhuǎn)換器,用于演示輸出電感中連續(xù)和非連續(xù)電流的負(fù)載瞬態(tài)響應(yīng)。在低至空載的負(fù)載狀態(tài)下,輸出電感電流都一直保持連續(xù),因?yàn)橥秸髌髟试S電感電流在輕負(fù)載狀態(tài)下反向流動(dòng)。只需用一個(gè)二極管替換底部FET (Q2),電路便可轉(zhuǎn)為非連續(xù)。盡管本文介紹的是降壓拓?fù)浣Y(jié)構(gòu)的區(qū)別,但您會(huì)注意到所有電源拓?fù)涠加蓄愃频捻憫?yīng)。 圖2 同步運(yùn)行(左)具有zui佳瞬態(tài)響應(yīng)非連續(xù)運(yùn)行期間,瞬態(tài)響應(yīng)較差的原因是環(huán)路特性急劇變化,如圖3所示。左邊的曲線顯示了連續(xù)運(yùn)行期間的環(huán)路增益。控制環(huán)路具有50kHz的帶寬,相補(bǔ)角為60度。右邊的曲線為功率級(jí)轉(zhuǎn)為非連續(xù)時(shí)的響應(yīng)情況。功率級(jí)從連續(xù)運(yùn)行期間的一對(duì)復(fù)極,變?yōu)榉沁B續(xù)運(yùn)行期間的一個(gè)單低頻實(shí)極點(diǎn)。該極點(diǎn)的頻率由輸出電容器和負(fù)載電阻器決定。相比連續(xù)情況,您可以看到低頻率下低頻極點(diǎn)引起的相移過(guò)程。低頻率下,增益急劇下降,原因是極點(diǎn)導(dǎo)致更低的交叉頻率,從而降低了瞬態(tài)響應(yīng)??傊?,同步整流可提高效率,同時(shí)也能夠極大地幫助瞬態(tài)負(fù)載調(diào)節(jié)。它為電源預(yù)加載提供了一種高效的方法。另外,相比擺動(dòng)電感,它還擁有更加穩(wěn)定的控制環(huán)路特性。它提高了傳統(tǒng)降壓轉(zhuǎn)換器,以及所有其他能夠使用同步整流的拓?fù)浣Y(jié)構(gòu)的動(dòng)態(tài)性。
    發(fā)表于 07-11 11:17

    求助,在CYW4373E上同時(shí)使用AP+IBSS時(shí)遇到的問(wèn)題求解

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

    理想PLC程序的特征與標(biāo)準(zhǔn)

    一套完整的PLC程序,并不僅僅是使系統(tǒng)能夠運(yùn)行起來(lái)這么簡(jiǎn)單,它也需要完整的注釋、精良的架構(gòu)、良好的可擴(kuò)展性、完備的報(bào)警保護(hù)系統(tǒng)、運(yùn)行前的模擬系統(tǒng)。
    發(fā)表于 04-24 11:31 ?290次閱讀
    理想PLC程序的特征與標(biāo)準(zhǔn)

    探索ChatGPT模型的人工智能語(yǔ)言模型

    最大的區(qū)別ChatGPT是通過(guò)對(duì)話數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練,而不僅僅是通過(guò)單一的句子進(jìn)行預(yù)訓(xùn)練,這使得ChatGPT能夠更好地理解對(duì)話的上下文,并進(jìn)行連貫的回復(fù)。
    發(fā)表于 04-24 10:19 ?633次閱讀
    探索ChatGPT模型的人工智能語(yǔ)言模型

    生成式AI開(kāi)發(fā)者利用NVIDIA技術(shù)變革車內(nèi)體驗(yàn)

    未來(lái)的汽車將不僅僅是交通運(yùn)輸方式,而是會(huì)成為智能伙伴,將技術(shù)和舒適性無(wú)縫結(jié)合,以提升駕駛體驗(yàn),并且從內(nèi)到外都將以安全為本。
    的頭像 發(fā)表于 03-21 09:42 ?392次閱讀

    一個(gè)節(jié)電的叮咚門(mén)鈴電路

    這個(gè)電路不僅僅是一個(gè)簡(jiǎn)單的雙音門(mén)鈴。相反,它利用包絡(luò)調(diào)制來(lái)產(chǎn)生真實(shí)的“叮咚”鈴聲。
    的頭像 發(fā)表于 02-25 14:28 ?811次閱讀
    一個(gè)節(jié)電的叮咚門(mén)鈴電路

    思必馳智能車載投影儀,讓汽車秒變移動(dòng)影院

    隨著自駕旅行、戶外露營(yíng)的火熱,汽車已不僅僅是代步工具,更向著移動(dòng)的“第三空間”演化,為用戶構(gòu)建集消費(fèi)、工作、娛樂(lè)于一體的“在路上的家”。
    的頭像 發(fā)表于 01-26 11:30 ?1695次閱讀

    硬件產(chǎn)品升級(jí)時(shí)的兼容性問(wèn)題

    越來(lái)越多的硬件產(chǎn)品,硬件構(gòu)成不僅僅是集成在一塊板子上,而是多塊控制板協(xié)同工作。
    的頭像 發(fā)表于 01-12 11:08 ?416次閱讀
    硬件產(chǎn)品升級(jí)時(shí)的兼容性問(wèn)題

    e203 rom啟動(dòng)僅僅是引導(dǎo)到itcm執(zhí)行指令嗎?flash啟動(dòng)就是加載指令到itcm中嗎?

    e203 rom啟動(dòng)僅僅是引導(dǎo)到itcm執(zhí)行指令嗎?flash啟動(dòng)就是加載指令到itcm中嗎? rom代碼不是存儲(chǔ)器形式:(能否解釋一下哎)
    發(fā)表于 01-10 07:05

    關(guān)于PLC編程規(guī)范及建議

    一套完整的PLC程序,并不僅僅是使系統(tǒng)能夠運(yùn)行起來(lái)這么簡(jiǎn)單,它也需要完整的注釋、精良的架構(gòu)、良好的可擴(kuò)展性、完備的報(bào)警保護(hù)系統(tǒng)、運(yùn)行前的模擬系統(tǒng)。
    發(fā)表于 12-19 09:58 ?446次閱讀

    Redis 不僅僅是內(nèi)存數(shù)據(jù)庫(kù)

    除了用作緩存與主數(shù)據(jù)庫(kù)之外,Redis還能夠提供大量其他的底層技術(shù)用于解決業(yè)務(wù)問(wèn)題,包括實(shí)時(shí)分析驅(qū)動(dòng)決策、高性能、關(guān)鍵數(shù)據(jù)的故障轉(zhuǎn)移和高速的數(shù)字支付等。文章速覽:基于實(shí)時(shí)分析和庫(kù)存管理做出更明智的決策實(shí)現(xiàn)數(shù)據(jù)和視頻的流暢播放提供關(guān)鍵數(shù)據(jù)的故障轉(zhuǎn)移服務(wù)實(shí)時(shí)批準(zhǔn)數(shù)字支付加速數(shù)據(jù)庫(kù)搜索緩存、數(shù)據(jù)庫(kù)或是其他Redis用作緩存與主數(shù)據(jù)庫(kù)的價(jià)值,是全球開(kāi)發(fā)者一致認(rèn)可的。
    的頭像 發(fā)表于 11-26 08:05 ?317次閱讀
    Redis <b class='flag-5'>不僅僅是</b>內(nèi)存數(shù)據(jù)庫(kù)

    華為新品發(fā)布會(huì)首曝:全新MatePad、暢享60s來(lái)了

    日前,華為智選車第一輛轎車智界s7宣布將于11月28日正式發(fā)布。從目前掌握的信息來(lái)看,當(dāng)天推出的新產(chǎn)品不僅僅是汽車。
    的頭像 發(fā)表于 11-13 10:57 ?2250次閱讀