esp8266_i2c_SH1103_OLED_基於安信可編譯器

關於控制芯片SH1106的說明:

12864OLED顯示屏是在某寶買的,以下圖片是某店鋪的說明:
在這裏插入圖片描述
在這裏插入圖片描述
內部電荷泵I2C接口:
在這裏插入圖片描述
在這裏插入圖片描述
SH1106既支持讀寫訪問。R/W位是從地址的一部分。在i2c總線上傳輸任何數據之前,應該先處理響應的設備。SH1106預留了兩個7位從地址(0111100和0111101)。通過將輸入SA0連接到邏輯0(VSS)或邏輯1 (VDD1)來設置從地址的最小有效位。i2c總線協議如圖7所示。該序列從I2C總線 主設備的開始條件開始,後面跟着從地址。具有相應地址的從設備應答,其他從機將忽略i2c總線傳輸。在確認之後,會有一個或多個命令來定義被尋址的從機的狀態。命令字由一個控制字節組成,它定義了Co和D/C (見note1),加上一個數據字節(見圖7)。最後一個控制字節被標記爲一個清除的最重要的位,延續位Co。D /C位的狀態定義了數據字節是被解釋爲命令還是被解釋爲RAM數據。控制字節和數據字節被總線上相應的從設備接收。在最後一個控制字節之後,根據D /C位設置的不同,數據分爲顯示數據字節或命令數據字節。如果將D/C位設置爲’ 1 ‘,這些顯示字節將存儲在SRAM中,其地址由數據指針指定。數據指針自動更新,數據被寫入到預定的SH1106設備。如果最後一個控制字節的D /C位被設置爲’ 0 ',這些命令字節將被解碼,設備的設置將根據接收到的命令改變。
每個字節之後的確認只由被尋址的從設備發出。在傳輸結束時,i2c總線主機發出一個停止條件§。如果R/ W位在從地址中被設置爲1,芯片將根據在上次寫訪問期間發送的D /C位的從地址立即輸出數據。如果在一個字節之後沒有非應答,從設備停止向主機傳送數據。
在這裏插入圖片描述
命令表:
注意:不要使用任何其他命令,否則可能導致系統故障
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
手冊裏提供了初始化的演示程序:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
以下部分可以參考程序自己寫:
在這裏插入圖片描述
這裏說一下,我買的模塊RST引腳已內置拉高。只有Vcc、Gnd、SDA、SCL這是個引腳。
下面說一下初始化命令的過程:

1.0xae 顯示關
2.0x02 設置低列地址
3.0x10 設置高列地址
4.0x40 設置開始顯示行
5.0xb0 設置頁地址
6.0x81 設置對比度寄存器
0xff 對比度數據(有0~255級對比度)
7.0xa1 設置段重新映射(屏幕左右顛倒))
8.0xa6 設置正常顯示
9.0xa8 多路分配模式設置
0x3f 多路複用率數據
10. 0xad 內置升壓電荷泵設置
0x8b 開啓內置電荷泵(驅動OLED需要比較高的電壓,我所買的模塊Vpp沒接出,所以要開啓內置的電荷泵)OLED工作電壓源:外部Vpp提供電壓6.4v-14.0V;內部Vpp發生器提供電壓6.4v-9.0V
0x33 設置Vpp爲9v(設置泵電壓值Vpp(30H:6.4V;31H:7.4V;32H:8.0V;33H:9.0V)
11.0xc8 設置COM輸出掃描方向(屏幕上下顛倒)
12.0xd3 顯示偏移模式設置(SH1106僅支持垂直滾動)指定顯示開始行到COM0-63之一的映射
0x00 無偏移
13.0xd5 分頻比/振盪器頻率模式設置(屏幕刷新頻率)
0x80 分頻比/振盪器頻率數據(0x80將時鐘設置爲100幀/秒)
14.0xd9 無充電/預充電週期模式設置
0x1f 無充電/預充電週期數據
15.0xda COM引腳硬件配置模式設置,此命令用於設置通用信號墊配置。
0x12 參考文檔,順序:02H,替代:12H)
16.0xdb 取消級別模式設置
0x40 VCOM=0.430VREF:00H, VCOM=0.770VREF:35H,VCOM=1*VREF:40H)
17. 0xaf 顯示開

注意:
本人買的的模塊RST是內部直接接高電平的,而官方給出的程序是有RST的,所以建議在開顯示之前先清屏一下,不然打開就是這個樣子。在這裏插入圖片描述
如果你買的模塊是有RST引腳的,就不用清屏,開始先讓模塊拉低一會就可以了
在這裏插入圖片描述

清屏函數: void i2c_SH1106_CLS(void);

先說下使用這塊OLED出現的問題,文檔提供的開始顯示的列是從0x02開始的,顯示也是從0x02開始的,所以寫程序的時候開始都是從0x02開始,寫 字符串i2c_SH1106_P8x16Str(0, 6,"abcdtfgWTF1234 ");和畫圖i2c_SH1106_DrawBMP(0,0,127,7,BMP);顯示正常,但寫i2c_SH1106_P6x8Str(0, 0,“0123456789”);這種小的字符串是,出現了亂碼,把開始的列改成0x01,問題解決,開始顯示的也是從第一個像素點開始的。我懷疑是我買的OLED有問題。

在發代碼之前先來幾張自己弄的XX圖片:
在這裏插入圖片描述
在這裏插入圖片描述
這兩張圖片都是128*64像素的,將格式轉成bmp的在取模就行了。
OLED顯示的圖片:(買的是藍屏的,效果不夠逼真,建議買白屏的)
我買的是藍屏的,不夠逼真
i2c_master.h和i2c_master.c部分可以看我另一篇文檔:
esp8266_I2C_master_修改-基於安信可編譯器

i2c_OLED_fonts.h

/*
 * i2c_OLED_fonts.h
 *
 *  Created on: 2018年12月20日
 *      Author: 王傑龍
 */


#ifndef APP_INCLUDE_DRIVER_I2C_OLED_FONTS_H_
#define APP_INCLUDE_DRIVER_I2C_OLED_FONTS_H_

/************************************(6*8的點陣)************************************/
const unsigned char F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp,0
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !,1
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// ",2
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #,3
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $,4
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %,5
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &,6
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ',7
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (,8
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的點陣)************************************/
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
};

#endif /* APP_INCLUDE_DRIVER_I2C_OLED_FONTS_H_ */

i2c_OLED_BMP.h

/*
 * i2c_OLED_BMP.h
 *
 *  Created on: 2018年12月20日
 *      Author: 王傑龍
 */

#ifndef APP_INCLUDE_DRIVER_I2C_OLED_BMP_H_
#define APP_INCLUDE_DRIVER_I2C_OLED_BMP_H_

const unsigned char BMP[]={
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0x3F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x07,0x07,0x07,0x0F,0x8F,0x9F,
		0xBF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x3F,0x3F,0x0F,0x07,0x03,
		0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF0,0xF8,0xFE,0xFF,0xFF,0xFD,0xFE,0xF6,
		0xF4,0xFF,0xFD,0xFC,0x4D,0x5B,0x5B,0x83,0xBF,0xBF,0xDF,0xDF,0xCF,0xCF,0xCF,0xEF,
		0xEF,0xEF,0xFF,0xF7,0xF7,0xF7,0xF7,0xFF,0xEF,0xCF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x01,0x01,0x00,0x20,0x65,0x6F,0xCC,0x18,0xB0,0x10,
		0x20,0x20,0xA0,0x80,0x88,0x9C,0x18,0x3B,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0x43,0xF9,0xFC,0xFF,0xFD,0xFD,0xCF,0xCF,0xCF,0xCF,0xCF,0xCF,0xDF,0xFB,0xDB,
		0xDF,0xFF,0xFF,0x7F,0x7F,0xBF,0x8F,0xCF,0x7F,0xBF,0xDF,0xE1,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xE0,0xE0,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,
		0x20,0x00,0x21,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x1F,
		0x5F,0x3C,0xB9,0xBB,0x13,0x87,0x87,0x63,0x73,0x65,0xB1,0xE3,0xFB,0xFB,0xFB,0xFB,
		0xFB,0xFB,0xFB,0xFC,0xFD,0xFD,0xFD,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x0E,0xFE,0xFE,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0x3E,0xBE,0x9E,
		0x3E,0xBC,0xBC,0x1C,0xD7,0xE3,0xF1,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
		0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};

#endif /* APP_INCLUDE_DRIVER_I2C_OLED_BMP_H_ */

i2c_SH1106_oled.h

/*
 * i2c_SH1106_oled.h
 *
 *  Created on: 2018年12月20日
 *      Author: 王傑龍
 */

#ifndef APP_INCLUDE_DRIVER_I2C_SH1106_OLED_H_
#define APP_INCLUDE_DRIVER_I2C_SH1106_OLED_H_

#define SH1106_address 0x78  // D/C->GND
//#define i2c_SH1106_address 0x7a // D/C->Vcc

#define Brightness 0x0f  //OLED亮度(0x00~0xff)


void i2c_SH1106_write(unsigned char Control,unsigned char Cmd_Da);//向顯示控制寄存器中寫命令command/寫數據data

void i2c_SH1106_Init(void);//OLED初始化相關操作,user_main文件中開始必須初始化一次

void i2c_SH1106_SetPos(unsigned char x, unsigned char y); //設置屏幕上的顯示位置

void i2c_SH1106_CLS(void);//清屏

void i2c_SH1106_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[]);

void i2c_SH1106_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize);

void i2c_SH1106_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[]);

void i2c_SH1106_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,const unsigned char BMP[]);//畫圖

#endif /* APP_INCLUDE_DRIVER_I2C_SH1106_OLED_H_ */

i2c_SH1106_oled.c

/*
 * i2c_SH1106_oled.c
 *
 *  Created on: 2018年12月20日
 *      Author: 王傑龍
 */

#include "osapi.h"
#include "driver/i2c_SH1106_oled.h"
#include "driver/i2c_OLED_fonts.h"
#include "driver/i2c_master.h"

/*
 * 功能:寫OLED命令或是顯示數據
 * 參數:Control=0x00,寫命令;Control=0x40,寫顯示數據
 * 返回:無
 */
void ICACHE_FLASH_ATTR
i2c_SH1106_write(unsigned char Control,unsigned char Cmd_Da){//向顯示控制寄存器中寫命令command/寫數據data
	 //啓動i2c總線
	  i2c_master_start();

	  i2c_master_writeByte(SH1106_address&0xfe);//OLED從地址寫模式
	  //檢查i2c從機應答
	  if(!i2c_master_checkAck()) {
		  i2c_master_stop();//如果從設備未應答,將設備停止
	    return;
	  }
	  //寫控制命令
	  i2c_master_writeByte(Control);
	  //檢查i2c從機應答
	  if(!i2c_master_checkAck()) {
		  i2c_master_stop();
	    return;
	  }
	  //寫數據到寄存器
	  i2c_master_writeByte(Cmd_Da);
	  //檢查i2c從機應答
	  if(!i2c_master_checkAck()) {
		  i2c_master_stop();
	    return;
	  }
	  //i2c停止
	  i2c_master_stop();
}

/*
 * 功能:初始化OLED參數
 * 入口參數:無
 * 返回:無
 */
void ICACHE_FLASH_ATTR
i2c_SH1106_Init(void){
	i2c_SH1106_write(0x00,0xae);//顯示關
/***************SH1106只有頁地址模式*********************/

/**********************	這裏可以不用初始化*************/
//	i2c_SH1106_write(0x00,0x02);//設置低列地址

//	i2c_SH1106_write(0x00,0x10);//設置高列地址

//	i2c_SH1106_write(0x00,0xb0);//設置頁地址
/***********************end*************/

	i2c_SH1106_write(0x00,0x40);//設置開始顯示行地址com0

	i2c_SH1106_write(0x00,0x81);//設置對比度控制寄存器
	i2c_SH1106_write(0x00,Brightness);//對比度(亮度)

	i2c_SH1106_write(0x00,0xa1);//設置段重新映射(ADC) 0 to 127屏幕左右顛倒)


	i2c_SH1106_write(0x00,0xa6);//設置正常顯示

	i2c_SH1106_write(0x00,0xa8);//多路分配模式設置(1 to 64)
	i2c_SH1106_write(0x00,0x3F);//

	i2c_SH1106_write(0x00,0xad);//直流-直流轉換器電源控制方式設置
	i2c_SH1106_write(0x00,0x8b);//內供Vcc
	i2c_SH1106_write(0x00,0x33);//set Vpp 9v

	i2c_SH1106_write(0x00,0xc8);//設置COM輸出掃描方向(屏幕上下顛倒)

	i2c_SH1106_write(0x00,0xd3);//顯示偏移模式設置
	i2c_SH1106_write(0x00,0x00);//無偏移

	i2c_SH1106_write(0x00,0xd5);//分頻比/振盪器頻率模式設置
	i2c_SH1106_write(0x00,0xf0);//分頻比/振盪器頻率數據設置

	i2c_SH1106_write(0x00,0xd9);//無充電/預充電週期模式設置
	i2c_SH1106_write(0x00,0x1f); //無充電/預充電週期數據設置

	i2c_SH1106_write(0x00,0xda);//COM引腳硬件配置模式設置
	i2c_SH1106_write(0x00,0x12);

	i2c_SH1106_write(0x00,0xdb);//--set vcomh
	i2c_SH1106_write(0x00,0x40);//

	i2c_SH1106_CLS();  //清屏

	i2c_SH1106_write(0x00,0xaf);//--開顯示
}

 /*
  * 功能:填充某個字符的數據到SRAM
  * 入口參數:fill_Data
  * 說明:內部使用函數
  * 返回:無
  * */
static void ICACHE_FLASH_ATTR
i2c_OLED_Fill(unsigned char fill_Data){//屏幕填充
	unsigned char m,n;
	for(m=0;m<8;m++)
	{
		i2c_SH1106_write(0x00,0x02);		//設置低列地址,從0x02開始
		i2c_SH1106_write(0x00,0x10);		//設置高列地址
		i2c_SH1106_write(0x00,0xb0+m);		//設置頁開始地址
		for(n=0;n<128;n++)
			{
			i2c_SH1106_write(0x40,fill_Data);
			}
	}
}
void ICACHE_FLASH_ATTR
i2c_SH1106_CLS(void){			//清屏
	i2c_OLED_Fill(0x00);
}

/*
 * 功能:設置顯示數據的位置
 * 入口參數:x取0~127,y取0~7,8頁,128列
 * 說明:買的1.2寸的OLED屏的顯示起始地址爲0x02,故不對之前的SRAM操作
 * 返回:無
  */
void ICACHE_FLASH_ATTR
i2c_SH1106_SetPos(unsigned char x, unsigned char y){ //設置屏幕上的顯示位置

	i2c_SH1106_write(0x00,(x&0x0f)+0x01);//設置低列地址,從0x01開始

	i2c_SH1106_write(0x00,((x&0xf0)>>4)|0x10);//設置高列地址

	i2c_SH1106_write(0x00,0xb0+y);//設置頁地址
}
/***************功能描述:顯示6*8一組標準ASCII字符串	顯示的座標(x,y),x範圍爲0~127,y爲頁範圍0~7****************/
void  ICACHE_FLASH_ATTR
i2c_SH1106_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[])
{
	unsigned char c=0,i=0,j=0;
	while (ch[j]!='\0')
	{
		c =ch[j]-32;
		if(x>126){x=0;y++;}
		i2c_SH1106_SetPos(x,y);
		for(i=0;i<6;i++)
			i2c_SH1106_write(0x40,F6x8[c][i]);
		x+=6;
		j++;
	}
}
/*******************功能描述:顯示8*16一組標準ASCII字符串	 顯示的座標(x,y),x範圍爲0~127,y爲頁範圍0~7****************/
void  ICACHE_FLASH_ATTR
i2c_SH1106_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
	unsigned char c=0,i=0,j=0;
	while (ch[j]!='\0')
	{
		c =ch[j]-32;
		if(x>120){x=0;y++;}
		i2c_SH1106_SetPos(x,y);
		for(i=0;i<8;i++)
		i2c_SH1106_write(0x40,F8X16[c*16+i]);
		i2c_SH1106_SetPos(x,y+1);
		for(i=0;i<8;i++)
		i2c_SH1106_write(0x40,F8X16[c*16+i+8]);
		x+=8;
		j++;
	}
}


//顯示字符串的位置與字符串的大小
void ICACHE_FLASH_ATTR
i2c_SH1106_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{
	unsigned char c = 0,i = 0,j = 0;
	switch(TextSize)
	{
		case 1://像素大小6x8
		{
			while(ch[j] != '\0')
			{
				c = ch[j] - 32;//比如空格的ASCII值爲32d,減去32剛好是F6x8[0][6]
				if(x > 126)//一行顯示不完,到下一行顯示
				{
					x = 0;
					y++;
				}
				i2c_SH1106_SetPos(x,y);
				for(i=0;i<6;i++)
					i2c_SH1106_write(0x40,F6x8[c][i]);
				x += 6;
				j++;
			}
		}break;
		case 2://像素大小8X16
		{
			while(ch[j] != '\0')
			{
				c = ch[j] - 32;
				if(x > 120) //一行顯示不完,到下一行顯示
				{
					x = 0;
					y+=2;
				}
				i2c_SH1106_SetPos(x,y);
				for(i=0;i<8;i++)
					i2c_SH1106_write(0x40,F8X16[c*16+i]);
				i2c_SH1106_SetPos(x,y+1);
				for(i=0;i<8;i++)
					i2c_SH1106_write(0x40,F8X16[c*16+i+8]);
				x += 8;
				j++;
			}
		}break;
	}
}

/*
 * 功能:在選定的位置畫圖
 * 入口參數:x取0~127,y取0~7,BMP[]所放圖片的字符數組
 * 返回:無
 * */
void ICACHE_FLASH_ATTR
i2c_SH1106_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,const unsigned char BMP[]){
	unsigned int j=0;
	unsigned char x,y;

	for(y=y0;y<=y1;y++)
	{
		i2c_SH1106_SetPos(x0+0x01,y);//從0x02開始
		for(x=x0;x<=x1;x++)
			i2c_SH1106_write(0x40,BMP[j++]);//寫顯示的數據,數據指針自動更新。
	}
}

user_main.c

#include "osapi.h"
#include "user_interface.h"
#include "driver/i2c_SH1106_oled.h"
#include "driver/i2c_OLED_BMP.h"
uint32 priv_param_start_sec;

/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR
user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            priv_param_start_sec = 0x3C;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            priv_param_start_sec = 0x7C;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
            rf_cal_sec = 512 - 5;
            priv_param_start_sec = 0x7C;
            break;
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            priv_param_start_sec = 0xFC;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
            rf_cal_sec = 1024 - 5;
            priv_param_start_sec = 0x7C;
            break;
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            priv_param_start_sec = 0xFC;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            priv_param_start_sec = 0xFC;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            priv_param_start_sec = 0xFC;
            break;
        default:
            rf_cal_sec = 0;
            priv_param_start_sec = 0;
            break;
    }

    return rf_cal_sec;
}



void ICACHE_FLASH_ATTR
user_rf_pre_init(void)
{
}

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{

	i2c_master_gpio_init();
	os_delay_us(60000);
	os_delay_us(60000);
	ds_SHT30_write(0x27,0x37);//寫命令
	i2c_SH1106_Init();

	i2c_SH1106_P6x8Str(0,1,"WTF? 23333");

	i2c_SH1106_P8x16Str(30, 3,"WTF? 23333");

	i2c_SH1106_ShowStr(121, 7, ".", 1);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	os_delay_us(60000);
	i2c_SH1106_DrawBMP(0,0,127,7,BMP);
}

顯示的字符串:
在這裏插入圖片描述

end!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章