文章目录
- 一、OLED
- 二、SSD1306驱动
- 三、OLED操作指南
-
- [ 1、内部存储结构](# 1、内部存储结构)
- [ 2、寻址模式](# 2、寻址模式)
-
- [ 1)、页地址模式](# 1)、页地址模式)
- [ 2)、水平地址模式](# 2)、水平地址模式)
- [ 3)、垂直地址模式](# 3)、垂直地址模式)
- [ 3、IIC时序](# 3、IIC时序)
-
- [ 1、开始信号](# 1、开始信号)
- [ 2、从机地址](# 2、从机地址)
- [ 3、应答](# 3、应答)
- [ 4、写入数数](# 4、写入数数)
- [ 5、应答](# 5、应答)
- [ 6、写入指令/数据](# 6、写入指令/数据)
- [ 7、应答](# 7、应答)
- [ 8、终止信号](# 8、终止信号)
- 四、OLED封装代码
-
- [ 1、Display_Font.h存放字符库](# 1、Display_Font.h存放字符库)
- [ 2、Display_Bmp.h存放图形库](# 2、Display_Bmp.h存放图形库)
- [ 3、oled.h](# 3、oled.h)
- [ 4、oled.c](# 4、oled.c)
- 五、OLED实例
-
- [ 1、main.c](# 1、main.c)
- [ 2、上机](# 2、上机)
一、OLED
OLED: Organic Light-Emitting Display,有机发光显示。
OLED属于一种电流型的有机发光器件,是通过载流子的注入和复合而致发光的现象,发光强度与注入的电流成正比。
OLED具备自发光、厚度薄、视角广、功耗低、对比度高、响应速度快等优点。
OLED的尺寸还难以大型化,但是分辨率却可以做得很高。
OLED 显示屏不同于 LCD,OLED 上电是没有反应的需要程序驱动才会有显示!

二、SSD1306驱动
SSD1306是一款单片CMOSOLED/PLED驱动器与控制器,用于有机/聚合物发光二极管点阵图形显示系统。.
它由128个段和64个公共部分组成。这个IC是为普通阴极型OLED面板设计。
SSD1306内置对比度控制、显示RAM和振荡器,减少了外部组件和功耗。
它有256级亮度控制。
数据/命令的发送有三种接口可选择:6800/8000并行接口、I2C接口、SPI接口。
它适用于许多紧凑型便携式应用程序,例如手机副显示屏、MP3播放器、计算器等。
阴极OLED。这个是由芯片限制了OLED的极性。
128段和64公共地----->横向128个点纵向64个点,即分辨率12864
三、OLED操作指南
1、内部存储结构
列:0-127(128),行:0-63(64)。
64行分为8个Page,每个Page8行。

每次写入都以单列8行为一个字节。

1个数据字节写入GDDRAM时,当前列(col)同一页PAGE)的所有行(COM)图像数据都被填充,即由列地址指针指向的整列(8位)被填充。
数据位D0写入顶行,数据位D7写入底行。(由上到下,由低到高)。
2、寻址模式
1)、页地址模式
页寻址模式:是器件默认选择的GDDRAM寻址模式。
写20H为02H命令设置寻址模式为页寻址。
页寻址模式下,寻址只在一页(PAGEn)内进行,地址指针不会跳到其他页。
每次向GDDRAM写入1byte显示数据后,列指针会自动+1。
当128列都寻址完之后,列指针会重新指向COL0而页指针仍然保持不变。
通过页寻地模式我们可以方便地对一个小区域内数据进行修改。

2)、水平地址模式
写20H为00H命令设置寻址模式为水平寻址。
水平寻址模式下,每次向GDDRAM写入1byte数据后,列地址指针自动+1。
列指针到达结束列之后会被重置到起始行,而页指针将会+1。
页地址指针达到结束页之后,将会自动重置到起始页。
水平寻址模式适用于大面积数据写入,例如一帧画面刷新。

3)、垂直地址模式
写20H为01H命令设置寻址模式为垂直寻址。
垂直寻址模式下,每次向GDDRAM写入1byte数据之后,页地址指针将会自动+1。
页指针到达结束页之后会被重置到0,而列指针将会+1。
列地址指针达到结束页之后,将会自动重置到起始列。

3、IIC时序

1、开始信号
S
2、从机地址

从机地址 根据说明书可以为b0111100或b0111101,当R\W为0时为写模式。
所以可以选择从地址:01111000,即0x78。
3、应答
ACK
4、写入数数

一个控制字节主要由Co和D/C#位组成,后面6个"0"。
co:"0"表示此后只接数据字节。
cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据。
5、应答
ACK
6、写入指令/数据
Data byte
7、应答
ACK
8、终止信号
P
四、OLED封装代码
1、Display_Font.h存放字符库
c
#ifndef __DIS_FONT_H__
#define __DIS_FONT_H__
/****************************************16*16的点阵************************************/
/**********************************
汉字取模 阴码、列行式、逆向、C51
**********************************/
code typFNT_GBK16 F16x16[] = {
"采", 0x00,0x00,0x04,0x14,0x64,0x04,0x0C,0xB4,0x02,0x02,0x42,0x33,0x02,0x00,0x00,0x00,
0x40,0x41,0x21,0x11,0x09,0x05,0x03,0xFF,0x03,0x05,0x09,0x11,0x21,0x41,0x40,0x00,/*"采",0*/
"菊", 0x04,0x84,0x44,0xB4,0x24,0x2F,0xE4,0x24,0x24,0xAF,0x24,0x24,0x24,0xE4,0x04,0x00,
0x01,0x44,0x44,0x24,0x15,0x0C,0xFF,0x0C,0x15,0x24,0x04,0x44,0x80,0x7F,0x00,0x00,/*"菊",1*/
"东", 0x00,0x08,0x88,0x48,0x28,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x20,0x11,0x09,0x05,0x41,0x81,0x7F,0x01,0x01,0x05,0x09,0x11,0x20,0x00,0x00,/*"东",2*/
"篱", 0x28,0x24,0x23,0xA2,0x26,0x6A,0xA2,0xAA,0xB4,0x63,0x22,0xA6,0x2A,0x22,0x22,0x00,
0x00,0xF8,0x08,0x0B,0x2A,0x7B,0x2A,0x2E,0x2A,0x3B,0x6A,0x0B,0x88,0xF8,0x00,0x00,/*"篱",3*/
"下", 0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x42,0x82,0x02,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,/*"下",4*/
"悠", 0x10,0x08,0xFC,0x03,0x00,0x7C,0x00,0x10,0x08,0xB7,0x44,0xA4,0x9C,0x04,0x04,0x00,
0x40,0x30,0x03,0x00,0x38,0x40,0x42,0x46,0x59,0x40,0x40,0x70,0x00,0x09,0x31,0x00,/*"悠",6*/
"然", 0x40,0x20,0x58,0x97,0x24,0xC4,0x3C,0x10,0x10,0xD0,0x3F,0xD0,0x12,0x14,0x10,0x00,
0x80,0x68,0x04,0x02,0x21,0xC0,0x08,0x04,0x23,0xC0,0x00,0x00,0x23,0xC4,0x08,0x00,/*"然",7*/
"见", 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x80,0x80,0x40,0x47,0x20,0x18,0x06,0x01,0x7E,0x80,0x80,0x87,0x80,0x80,0xE0,0x00,/*"见",8*/
"南", 0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F,0x24,0xA4,0x64,0x24,0x24,0xE4,0x04,0x00,
0x00,0xFF,0x00,0x08,0x09,0x09,0x09,0x7F,0x09,0x09,0x09,0x48,0x80,0x7F,0x00,0x00,/*"南",9*/
"山", 0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,
0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x7F,0x00,0x00,0x00,/*"山",10*/
"气", 0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x04,0x04,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00,/*"气",13*/
"日", 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"日",14*/
"夕", 0x00,0x00,0x00,0x80,0x40,0x30,0x1F,0x10,0x10,0x10,0x10,0x90,0x70,0x00,0x00,0x00,
0x00,0x82,0x81,0x80,0x40,0x41,0x22,0x14,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,/*"夕",15*/
"佳", 0x00,0x80,0x60,0xF8,0x47,0x40,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
0x01,0x00,0x00,0xFF,0x40,0x40,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,/*"佳",16*/
"飞", 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x40,0xA0,0x10,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x21,0x42,0xF0,0x00,/*"飞",18*/
"鸟", 0x00,0x00,0x00,0xFC,0x04,0x04,0x16,0x65,0x04,0x44,0x84,0x7C,0x00,0x00,0x00,0x00,
0x00,0x10,0x10,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x52,0x82,0x42,0x3E,0x00,0x00,/*"鸟",19*/
"相", 0x10,0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,/*"相",20*/
"与", 0x00,0x00,0xE0,0x9F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x08,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x80,0x40,0x3F,0x00,0x00,0x00,/*"与",21*/
"还", 0x40,0x40,0x42,0xCC,0x00,0x00,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x00,0x00,
0x00,0x40,0x20,0x1F,0x20,0x42,0x41,0x40,0x40,0x5F,0x40,0x40,0x40,0x43,0x40,0x00,/*"还",22*/
};
/****************************************8*16的点阵************************************/
/**********************************
字符取模 阴码、列行式、逆向、C51
**********************************/
code typFNT_GBK8 F8X16[]=
{
'0',0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/
'1',0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*"1",1*/
'2',0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/
'3',0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*"3",3*/
'4',0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*"4",4*/
'5',0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/
'6',0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/
'7',0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*"7",7*/
'8',0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
'9',0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/
'x',0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,/*"x",0*/
'=',0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*"=",0*/
':',0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",0*/
' ',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,0x00,0x00,0x00,0x00,/*"!",0*/
'Q',0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,/*"Q",0*/
'_',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/*"_",0*/
'c',0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",1*/
'o',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",2*/
'd',0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",3*/
'e',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",4*/
'%',0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*"%",0*/
'h',0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",0*/
'e',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,/*"e",1*/
'l',0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",2*/
'l',0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",3*/
'o',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",4*/
'w',0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,/*"w",5*/
'o',0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",6*/
'r',0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",7*/
'l',0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",8*/
'd',0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"d",9*/
};
/************************************6*8的点阵************************************/
/**********************************
字符取模 阴码、列行式、逆向、C51
**********************************/
code typFNT_GBK8 F6x8[]=
{
'0',0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
'1',0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
'2',0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
'3',0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
'4',0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
'5',0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
'6',0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
'7',0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
'8',0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
'9',0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
};
#endif
2、Display_Bmp.h存放图形库
c
#ifndef __BMP_H
#define __BMP_H
code unsigned char BMP1[] =
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x03,0x03,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x83,0xC3,0xE3,0xE3,0xE3,0xE3,0xF3,0xF1,0xF9,0xF9,0xF9,0xFD,0xFD,0xFD,0xFD,
0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xF9,0xF9,0xF9,0xF9,0xF9,
0xF3,0xF3,0xE3,0xE3,0xC3,0xC3,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0x07,0x1F,0xFF,0xFF,0xFF,
0xFF,0xFF,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,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
0x7F,0x3F,0x3F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x0F,
0x0F,0x0F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x9F,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x7F,0xFE,0xF8,0xE0,0xC0,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xFE,0xFC,0xF8,0xF8,
0xF0,0xE0,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0xFF,0x3F,0x1F,0x1F,0x9F,0x9F,
0x1F,0x1F,0x3F,0xFF,0xFF,0xE3,0x01,0x01,0x00,0xF8,0xF8,0x00,0x00,0x08,0x18,0x18,
0x1C,0x8C,0x88,0xD8,0xF8,0xF8,0xF8,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF3,0xE3,0xE3,0xE3,0xC3,0xE3,0xE3,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7E,0x1C,0x80,0xC1,0xFF,0xFF,0xFF,0xFE,0xFC,
0xF8,0xE0,0x80,0x00,0x00,0x00,0xF0,0xF8,0xF8,0xF8,0xFC,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,
0x3F,0x03,0x00,0xE0,0xFC,0xFF,0x7F,0x7F,0x7F,0xFF,0xFF,0xE0,0x80,0x03,0x1F,0x7F,
0xFF,0xFC,0xE0,0x80,0x03,0x07,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFE,0xFF,
0xFF,0x7F,0x3F,0x3F,0x1F,0x9F,0x9F,0x9F,0x9F,0x9F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,
0x3F,0x3F,0x3F,0x3F,0x1F,0x1F,0x9F,0xFF,0xFF,0xCF,0xCF,0xCF,0xDF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x80,0x0C,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x0F,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,0x0F,0x07,0x03,0x03,0x03,0x01,
0x00,0x00,0x7F,0xFF,0xFF,0xF0,0xE0,0xC0,0x0C,0x1C,0x3C,0x79,0xF1,0xF0,0xE0,0xC0,
0xC1,0x87,0x0F,0x1F,0x3E,0x78,0xF8,0xFC,0xFF,0xFF,0xFF,0xFE,0xE0,0xE0,0xF0,0xF8,
0x0C,0x06,0x02,0xA3,0xB3,0x31,0x31,0x31,0x31,0x33,0x33,0x23,0x02,0x00,0x00,0x00,
0x80,0x8C,0x8E,0x0E,0x0F,0x07,0x47,0x47,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0C,0x80,0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0F,0x3F,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,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x03,0x07,0x1F,0x1F,0x3F,0x7E,0x7E,0xFC,0xF8,0x70,0x01,0x01,
0x83,0xE3,0xFF,0xFE,0xFE,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF8,0xF8,0x70,0x21,0x63,0x67,0x67,0x67,0x67,0x63,0x71,0x70,0x38,0x3C,0x00,0x80,
0xC0,0xF1,0xE1,0xE3,0xE3,0xE6,0xC6,0xCC,0xCC,0x8C,0x98,0x99,0x19,0x31,0x33,0x63,
0x67,0x67,0x07,0x07,0xC7,0xE3,0xF9,0xFC,0xFE,0xFF,0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,
0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x01,0x03,0x07,0x07,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,
0x03,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x07,
0x07,0x07,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,
0x02,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xCC,0x8F,0x9F,0x9F,
0x9F,0xBF,0x3F,0x3F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x3F,0x1F,0x07,0x00,0x80,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
code unsigned char BMP2[] =
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x0F,
0x07,0x07,0x07,0x03,0x83,0xC3,0x43,0x23,0x31,0x19,0x0D,0x04,0x05,0x06,0x03,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x03,0x06,0x04,0x08,0x10,0x20,0x20,0x40,0x80,0x00,0x01,0x02,0x04,0x00,0x00,
0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x01,0x03,0x03,0x03,0x07,0x07,0x07,0x07,
0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x1F,0x3F,0x3F,0x3F,0x1F,0x1F,0x3F,0xBF,0xFF,
0x7F,0x7F,0x7F,0xBF,0xFF,0xFF,0xFF,0xFF,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,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x20,0x10,0x08,
0x04,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x20,0x30,0x10,0x10,0x08,0x08,0x08,
0x0C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x01,0x08,0x0C,0xC8,0xF8,0xF0,
0xE0,0x80,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0x08,
0x04,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x07,0x07,
0x07,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0xC0,0x40,0x20,0x18,0x04,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,
0x80,0x00,0xE0,0x38,0x0E,0x03,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xD0,0xE0,0xF0,0xFC,0x7E,0x1F,0x1F,0x07,0x0F,
0x1F,0x3F,0x3F,0x7E,0xF9,0xF3,0xE6,0xDC,0xF0,0xC0,0x20,0x70,0xD0,0xC0,0xC0,0x60,
0x00,0x60,0xF0,0xE0,0x60,0x00,0x00,0x80,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0x00,0x00,0x00,0x00,0x01,
0x01,0x03,0x1F,0x77,0xC7,0x07,0x07,0x07,0x07,0x07,0x3E,0x9E,0xFE,0xFE,0xFE,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0x7E,0x1F,0x0F,0x07,0x01,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,
0xFC,0xF8,0xE0,0xC0,0x80,0x03,0x07,0x0F,0x1F,0x7E,0xF8,0xF0,0xE0,0x80,0x02,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x02,
0x02,0x06,0x06,0x02,0x33,0x0F,0x1C,0x7C,0x7C,0x38,0xB8,0xFF,0xFF,0xFC,0xFF,0x3F,
0x1F,0x0F,0x03,0x01,0x80,0xE0,0xF0,0xF8,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF0,0xC0,0x80,0x01,0x07,0x0F,0x1F,0x7E,
0xFE,0xF2,0xE0,0xD0,0x02,0x86,0x04,0x04,0x4D,0x88,0x18,0x10,0x20,0x40,0x80,0x00,
0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x8C,0x08,0x10,0x20,0x60,0x40,0x84,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFF,0xDF,0xCF,0xC3,0x81,0xC0,0xC0,
0xB0,0xB0,0xAE,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x9F,
0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0x8F,0xCF,0x8F,0xCF,0xCF,0xCC,0xC8,0xC0,0xC0,
0xD0,0xF9,0xCF,0xCF,0xFF,0xFE,0xFD,0xFA,0xE0,0xD0,0xA0,0x04,0x08,0x10,0x01,0xEF,
0xFC,0x00,0x00,0x00,0x02,0x04,0x08,0x08,0x10,0x20,0x00,0x40,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x20,0x20,0x10,0x08,0x88,0x88,0xCC,0x64,0x62,
0xFF,0xFF,0xFE,0xFE,0xFC,0xFC,0xF8,0xF9,0xFB,0xF2,0xE4,0xEC,0xD8,0xD0,0xB0,0xE0,
0xC0,0xC0,0x88,0x00,0x10,0x20,0x40,0xC0,0x80,0x00,0x80,0x80,0x40,0x20,0x10,0x00,
0x88,0x84,0x40,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x07,
0x07,0x07,0x0F,0x0F,0x3F,0x3F,0x1F,0x1F,0x1F,0x2F,0x6F,0x87,0xF7,0xFF,0xEF,0xE7,
0xB7,0x97,0x87,0x9F,0x8F,0xCF,0xC7,0x57,0x67,0x67,0x37,0x16,0x0E,0x0C,0x1F,0x19,
0x0C,0x04,0x00,0x10,0x20,0x40,0xB0,0x30,0x80,0x40,0x60,0x20,0x10,0x11,0x8B,0x86,
0xC4,0x4E,0x7B,0xB1,0x30,0x78,0xCC,0x84,0xF6,0x73,0xF9,0xF9,0xFC,0xFC,0xFE,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFE,0xFC,0xFE,0xFA,0xFB,
0xF9,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x60,0xB0,
0xD0,0xD8,0xAC,0xC4,0xC6,0xEA,0xF1,0xF3,0xDC,0xD8,0xFC,0xE6,0xF6,0xFB,0xFD,0xFD,
0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
code unsigned char BMP3[] =
{
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,
0xE0,0xE0,0xE0,0xF0,0xF0,0x70,0x70,0xB8,0xB8,0xB8,0xBC,0xBC,0xDC,0x5C,0x1C,0x1C,
0x0E,0x6E,0x6E,0x6E,0x0E,0x0E,0x07,0x07,0x07,0x17,0x07,0x17,0x17,0x13,0x0B,0x0B,
0x0B,0x0B,0x0B,0x4B,0x8B,0x8B,0x8B,0x83,0x8B,0x03,0x83,0x03,0x0B,0x0B,0x0B,0x0B,
0x0B,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x87,0x4F,0xEE,0xEE,0xEE,0xEE,0xCE,0x1C,
0x9C,0x3C,0xBC,0x38,0x78,0xF8,0xF4,0xF4,0xE0,0xE0,0x80,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x90,0xE0,0xF0,0xF8,0xFC,0xFC,0x3E,0x9F,0xCF,0x07,0x03,0x0B,0x0D,
0x0D,0x0E,0x0E,0x02,0x02,0x03,0x03,0x01,0x01,0x01,0x01,0x00,0x01,0x00,0x00,0x00,
0x00,0x40,0x70,0x30,0x70,0x70,0x70,0x70,0x70,0x70,0x30,0x30,0x38,0x38,0x38,0x38,
0x38,0x38,0xB8,0xBA,0xB9,0xB9,0xB9,0xB9,0x39,0x3A,0x3B,0x3A,0xB8,0xB8,0xB8,0x78,
0xF8,0xF8,0xFC,0xDC,0xDC,0x1C,0x5C,0x1C,0x1C,0x1C,0x5C,0x5C,0x5C,0x5D,0x5D,0x5D,
0x5D,0x5C,0x5E,0x5E,0x4E,0x6E,0x6E,0x6F,0x1F,0x7F,0xFF,0xF3,0xE4,0xE6,0xC0,0xC0,
0xC0,0xC0,0xC0,0xC0,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,
0xFC,0xFE,0xFF,0x7F,0x4F,0x63,0x7F,0x7D,0x2E,0x03,0x01,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,
0x01,0x07,0x8F,0x7F,0xFF,0xFF,0xFD,0xF8,0xE0,0x90,0x00,0x00,0x00,0x80,0x80,0x80,
0xC0,0xC0,0xE0,0xE0,0xE0,0xF0,0x70,0x78,0x38,0x3E,0x1F,0x5F,0x1F,0x1F,0x1F,0x0F,
0x0F,0x0F,0x2F,0x2F,0x3F,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF0,0xF8,0xFF,0xFF,0xFF,
0x0F,0xE7,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0D,0x1E,0x1E,0x3E,0x7E,0x7C,0xF2,0xE6,0xE8,0xC0,0xC0,0xC0,0xC0,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,
0x70,0x70,0x71,0x3A,0xB8,0xBF,0xBF,0x7F,0xFF,0xFF,0xFF,0xEF,0x9F,0x7F,0xFF,0xFB,
0xE3,0x83,0x01,0x01,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xC1,
0x16,0xFF,0xFA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x31,0x31,0x0D,0x09,0x09,0x0B,
0x0B,0x0B,0x03,0x0B,0x0B,0x03,0x0B,0x03,0x0B,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x0B,0x0B,0x0B,0x0B,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,
0x01,0x01,0x01,0x01,0x00,0x00,0xE2,0x00,0x9F,0xFF,0xFF,0xFF,0xFF,0xE0,0xF9,0xFF,
0x7F,0x3F,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,
0xE0,0x21,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x3F,0xFF,0xFF,0xFF,0xFF,0xFC,
0x16,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x81,0x81,0x8B,0x8D,
0x8D,0x8F,0x8F,0x8F,0x8E,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x81,0x83,0x87,0x87,0x87,
0x87,0x8C,0x8F,0x8F,0x8F,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
};
#endif
3、oled.h
c
/*******************************************************************
@本.c.h代码使用说明:
//OLED屏幕初始化
OLED_Init();
//清屏
OLED_Clear();
//显示函数
OLED_Show_CNStr(0,0," 易佳电子设计 ");
OLED_Show_CNStr(0,2,"微信:code_51_32 ");
OLED_Show_CNStr(0,4,"QQ :3393617216 ");
OLED_Show_CNStr(0,6," hello world! ");
//sprintf运用
sprintf(Oled_Dis," %03d℃",(uint)Temp_h);
OLED_Show_CNStr(0,4,Oled_Dis);
//图片显示
OLED_DrawBMP(0,0,127,8,BMP1);
//关闭显示
OLED_Display_Off();
//开启显示
OLED_Display_On();
******************************************************************/
#include <reg52.h>
#include <intrins.h> // _nop_();
#ifndef __OLED_H
#define __OLED_H
#define uchar unsigned char
#define uint unsigned int
#define OLED_CMD 0 // 写命令
#define OLED_DATA 1 // 写数据
sbit OLED_SCL = P2 ^ 2; // 时钟 D0(SCLK
sbit OLED_SDA = P2 ^ 3; // D1(MOSI) 数据
#define SIZE 16
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xff
#define X_WIDTH 128
#define Y_WIDTH 64
typedef struct // 汉字字模结构体
{
uchar Index[2];
uchar Msk[32];
} typFNT_GBK16;
typedef struct // 字符字模结构体
{
uchar Index[1];
uchar Msk[16];
} typFNT_GBK8;
// OLED主要函数
// 开启显示
void OLED_Display_On(void);
// 关闭显示
void OLED_Display_Off(void);
// OLED屏幕初始化
void OLED_Init(void);
// 清屏
void OLED_Clear(void);
/*================================================================
【名 称】OLED_DrawBMP
【功 能】指定位置显示图片
【参 数】x0 y0 图片左上角坐标 范围 0~128
x1 y1 图片右下角坐标 范围 0~8
BMP[] 带入图片的数组名
【备 注】用多大的图片就设置多大的坐标范围 如果设置不好会造成图片扭曲
================================================================*/
void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[]);
/*================================================================
【名 称】OLED_Show_CNStr
【功 能】混合显示汉字英文数字
【参 数】x X轴坐标 第几个像素 中文宽度 16像素 英文宽度 8像素 所以要 x * 16(or8)
y Y轴坐标 第几个像素 中文英文数字都是16像素 所以要 y * 2 OLED每次竖直的画像素点是8个像素所以是成2
【备 注】如果写入长度超过会从当前行的第一个开始覆盖
================================================================*/
void OLED_Show_CNStr(uchar x, uchar y, uchar *s);
#endif
4、oled.c
c
#include "oled.h"
#include "Display_Font.h"
/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{
OLED_SCL=1;
OLED_SDA=1;
OLED_SDA=0;
OLED_SCL=0;
}
/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
OLED_SCL=1;
OLED_SDA=0;
OLED_SDA=1;
}
void IIC_Wait_Ack()
{
OLED_SCL=1;
OLED_SCL=0;
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
OLED_SCL=0;
for(i=0;i<8;i++)
{
m=da;
m=m&0x80;
if(m==0x80)
{
OLED_SDA=1;
}
else
OLED_SDA=0;
da=da<<1;
OLED_SCL=1;
OLED_SCL=0;
}
}
/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
IIC_Start();
Write_IIC_Byte(0x78); //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x00); //write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Command);
IIC_Wait_Ack();
IIC_Stop();
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78); //D/C#=0; R/W#=0
IIC_Wait_Ack();
Write_IIC_Byte(0x40); //write data
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Data);
IIC_Wait_Ack();
IIC_Stop();
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
if(cmd)
{
Write_IIC_Data(dat);
}
else
{
Write_IIC_Command(dat);
}
}
//坐标设置
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f),OLED_CMD);
}
//开启OLED显示
void OLED_Display_On(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
}
//关闭OLED显示
void OLED_Display_Off(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令
OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
}
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{
uchar i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置---列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置---列高地址
for(n=0;n<128;n++)
OLED_WR_Byte(0,OLED_DATA);
} //更新显示
}
/*================================================================
【名 称】OLED_Show_CNStr
【功 能】混合显示汉字英文数字
【参 数】x X轴坐标 第几个像素 中文宽度 16像素 英文宽度 8像素 所以要 x * 16(or8)
y Y轴坐标 第几个像素 中文英文数字都是16像素 所以要 y * 16
【备 注】如果写入长度超过会从当前行的第一个开始覆盖
================================================================*/
void OLED_Show_CNStr(uchar x,uchar y,uchar *s)
{
unsigned char i,k;
unsigned int HZnum;
unsigned int EZnum;
HZnum=sizeof(F16x16)/sizeof(typFNT_GBK16);
EZnum=sizeof(F8X16)/sizeof(typFNT_GBK8);
while(*s)
{
if((*s) >= 128)
{
for (k=0;k<HZnum;k++)
{
if ((F16x16[k].Index[0]==*(s))&&(F16x16[k].Index[1]==*(s+1)))
{
OLED_Set_Pos(x , y);
for(i=0;i<16;i++) //控制16列的数据输出
{
OLED_WR_Byte(F16x16[k].Msk[i],OLED_DATA); //i+32*number汉字的前16个数据输出
}
OLED_Set_Pos(x,y+1);
for(i=0;i<16;i++) //控制16列的数据输出
{
OLED_WR_Byte(F16x16[k].Msk[i+16],OLED_DATA); //i+32*number+16汉字的后16个数据输出
}
break;
}
}
s+=2;
x +=16;
}
else
{
for(k=0;k<EZnum;k++)
{
if(F8X16[k].Index[0]==*(s))
{
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[k].Msk[i],OLED_DATA);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[k].Msk[i+8],OLED_DATA);
break;
}
}
s+=1;x +=8;
}
}
}
/*================================================================
【名 称】OLED_DrawBMP
【功 能】指定位置显示图片
【参 数】x0 y0 图片左上角坐标 范围 0~128
x1 y1 图片右下角坐标 范围 0~8
BMP[] 带入图片的数组名
【备 注】用多大的图片就设置多大的坐标范围 如果设置不好会造成图片扭曲
================================================================*/
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0)
y=y1/8;
else
y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_WR_Byte(BMP[j++],OLED_DATA);
}
}
}
//初始化SSD1306
void OLED_Init(void)
{
OLED_WR_Byte(0xAE,OLED_CMD);//--display off
OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
OLED_WR_Byte(0x81,OLED_CMD); // contract control
OLED_WR_Byte(Brightness,OLED_CMD);//--128
OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
OLED_WR_Byte(0x00,OLED_CMD);//
OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
OLED_WR_Byte(0x80,OLED_CMD);//
OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
OLED_WR_Byte(0x05,OLED_CMD);//
OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
OLED_WR_Byte(0xF1,OLED_CMD);//
OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
OLED_WR_Byte(0x12,OLED_CMD);//
OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
OLED_WR_Byte(0x30,OLED_CMD);//
OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
OLED_WR_Byte(0x14,OLED_CMD);//
OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
}
五、OLED实例
1、main.c
c
#include "delay.h"
#include "oled.h"
#include "Display_Bmp.h"
//sprintf()函数需要声明的头文件
#include "stdio.h"
void main()
{
delay_ms(100);
OLED_Init();
while(1)
{
OLED_Clear();
OLED_DrawBMP(0,0,128,8,BMP1);
delay_ms(3000);
OLED_Clear();
OLED_DrawBMP(0,0,128,8,BMP2);
delay_ms(3000);
OLED_Clear();
OLED_DrawBMP(0,0,128,8,BMP3);
delay_ms(3000);
OLED_Clear();
OLED_Show_CNStr(0,0,"采菊东篱下");
OLED_Show_CNStr(0,2,"悠然见南山");
OLED_Show_CNStr(0,4,"山气日夕佳");
OLED_Show_CNStr(0,6,"飞鸟相与还");
delay_ms(3000);
}
}
2、上机
