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 = [
   "//utils/native/lite/include",
   "//kernel/liteos_m/kal/cmsis",
   "//base/iot_hardware/peripheral/interfaces/kits",
 ]
}

然后修改app/BUILD.gn:

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
  features = [
    # "demo_snake",
    "myshow:myshow",
  ]
  deps = []
}

保存后编译:

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

    文章

    6333

    浏览量

    232570
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新思科技HAPS-200助力阿里巴巴达摩院加速玄铁C930开发验证

    在AI驱动的时代,验证不仅仅是功能正确,更要确保性能、功耗和软件兼容性。HAPS-200的引入,助力达摩院玄铁团队能够在设计早期完成系统级验证,显著缩短上市时间,降低风险,并推动RISC-V生态加速成熟,开启RISC-V高性能新时代。
    的头像 发表于 11-18 11:12 589次阅读

    壹连科技CCS产品全球累计出货量突破一亿片

    近日,壹连科技自主研发生产的CCS电芯连接组件全球累计出货量正式突破100,000,000片!一亿片不仅仅是一个数字,它是市场与客户的信任见证,是壹连人用智慧和汗水铸就的里程碑,更是壹连科技赋能新能源产业的生动注脚。
    的头像 发表于 11-18 09:59 384次阅读

    蜀瑞开关柜综合监控装置KO传统智能操显,为何可以替代传统操显

    蜀瑞开关柜综合监控装置能够替代传统智能操显设备,主要得益于它在技术理念、功能集成、智能化程度以及安全运维等多方面的显著提升。它不仅仅是一个状态指示设备,更是一个集成了监测、控制、诊断和管理的综合平台。
    的头像 发表于 09-25 17:45 456次阅读
    蜀瑞开关柜综合监控装置KO传统智能操显,为何可以替代传统操显

    正方科技千乘动力智慧储能解决方案赋能多元场景

    当我们谈论能源的未来时,储能技术正成为改变游戏规则的关键力量。它不仅仅是能量的容器,更是能源管理的智慧大脑,让电力在时间与空间上实现更高效的分配与利用。
    的头像 发表于 09-16 16:33 926次阅读

    谷歌AI模型点亮开发无限可能

    在 2025 年的 Google 谷歌开发者大会上,AI 不是一门“技术”,更是一股彻底改变开发范式的“力量”,助力开发者们在海外市场更上一层楼。AI 已经不仅仅是生成几行代码,它正在全面提升整个开发过程。从模型突破到工具优化,从本地开发到全球落地,每一项更新,都在回应开发者最迫切的需求。
    的头像 发表于 08-29 09:29 884次阅读

    为FreeRTOS增加新的设备驱动程序

    如果你正在使用FreeRTOS构建嵌入式系统,并且考虑添加新的设备驱动程序,那么这篇文章很适合你。高效的设备集成不仅仅是让设备功能正常运行——更关乎模块化、可靠性和安全性。
    的头像 发表于 08-06 15:44 760次阅读
    为FreeRTOS增加新的设备驱动程序

    CYT2B93CAE怎样才能接收特定 ID 的中断?

    你好,我正在使用 CYT2B93CAE 使用设备配置器 5.3,我选择 RX 缓冲区来接受特定的 ID(例如,0x020)。然而,问题是我在总线上的所有帧上都收到了中断,而不仅仅是专用 ID。 当其他所有 ID 均未发生中断时,我怎样才能接收特定 ID 的中断?
    发表于 07-15 07:09

    隔离屏障的概念以及工作电压和测试电压之间的区别

    电源中的电气隔离不仅仅是关乎安全——它更是性能和可靠性的基石。本文将探讨隔离屏障的概念以及工作电压和测试电压之间的区别。它还将讨论标准为何重要?帮助工程师设计出满足当今严苛法规和应用需求的稳健系统。
    的头像 发表于 07-08 15:29 710次阅读

    NVIDIA 800V HVDC 架构赋能新一代AI数据中心 挑战传统机架电源系统极限

    800 V HVDC 不仅仅是当今的机架,而是面向未来的 AI 基础设施。2027 年,800 V HVDC 数据中心将与 NVIDIA Kyber 机架级系统同步全面投产,确保为要求日益严苛的 AI 模型提供无缝可扩展性。
    的头像 发表于 05-29 17:15 2896次阅读
    NVIDIA 800V HVDC 架构赋能新一代AI数据中心 挑战传统机架电源系统极限

    UWB技术如何推动智能制造产业变革

    让我们搭乘时光机,回到20世纪80年代的一家制造商;如果用那时的日常运营方式应对今天的竞争环境,它还能生存下来吗?恐怕很难。当今的制造业早已不仅仅是传统意义上的生产制造,而是迈向了智能制造的新时代。
    的头像 发表于 05-23 11:38 759次阅读

    芯科科技扩展Zephyr RTOS项目支持

    在 Silicon Labs(芯科科技),我们对无线通信充满热情,致力于推动下一代物联网设备的发展。当然,创新的无线解决方案不仅仅是拥有出色的蓝牙或Wi-Fi 芯片—强大的软件同样必不可少。我们
    的头像 发表于 03-19 10:44 1008次阅读

    解密电源与电机的魔法——电源的魔法:点亮智能家电的“能量之源”

    家电的能量供给:电源技术知多少?如果说电机是家电的“心脏”,那么电源就是它们的“供氧机”,为整个系统提供源源不断的“能量”。电源的作用不可小觑,它不仅仅是一个把交流电转化为直流电的简单装置,还是一个能量调节和分配的高手。在家电的世界里,电源主要有两种类型:开关电源和线性电源。开关电源是目
    的头像 发表于 03-15 08:34 1769次阅读
    解密电源与电机的魔法——电源的魔法:<b class='flag-5'>点亮</b>智能家电的“能量之源”

    户外通信机柜选购方法,服务的关键

    户外通信机柜购买指南室外通信机柜简介在设置室外电信系统时,最关键的决策之一是选择合适的机柜。它不仅仅是一个盒子;它是您重要设备的第一道防线。选择合适的机柜的意义选择合适的户外机柜不仅仅是一个技术问题
    的头像 发表于 02-14 11:31 686次阅读
    户外通信机柜选购方法,服务的关键

    利用云主机快速开发MQTT客户端仿真硬件上云IoTDA

    项目的目标不仅仅是为开发者提供一个调试工具,更重要的是通过仿真硬件的方式,使得开发者能够从软件层面全面体验物联网设备上云的全过程。
    的头像 发表于 01-13 14:15 2299次阅读
    利用云主机快速开发MQTT客户端仿真硬件上云IoTDA

    SAE J3400标准助力北美电动汽车充电未来

    专家强调,SAE J3400标准涵盖的不仅仅是充电连接器,而是一整套充电系统,而且其中整合了大量行业最佳实践。
    的头像 发表于 12-11 16:07 999次阅读