C51_OLED

文章目录

  • 一、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、上机

相关推荐
lingzhilab1 天前
零知派——STM32驱动摇杆+PCA9685实现4路360°舵机线性速度控制与自动演示
stm32·单片机·嵌入式硬件
不脱发的程序猿1 天前
嵌入式软件工程师,怎么把 AI 工具用顺手?
人工智能·单片机·嵌入式硬件·嵌入式
平凡灵感码头1 天前
芯片合封是个嘛?
单片机·嵌入式硬件
gscsded1 天前
C2000 GPIO 配置笔记
单片机
Sakuyu434681 天前
STM32基础
stm32·单片机·嵌入式硬件
gscsded1 天前
C2000 CPU Timer 学习笔记
单片机
iCxhust1 天前
AD0808调试笔记
笔记·单片机·嵌入式硬件·操作系统·微机原理·8088单板机
木子单片机1 天前
基于51单片机的步进电机调速系统设计
单片机·嵌入式硬件·51单片机·keil
三易串口屏1 天前
实验10 物理按键实验
单片机·51单片机·串口屏·串口协议·uart 通信·嵌入式 ui
深圳光特通信豆子1 天前
10Mb/s TTL单模双纤光收发模块技术规格手册
单片机·嵌入式硬件