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

相关推荐
Bona Sun11 小时前
单片机手搓掌上游戏机(二十三)—esp32运行简单街机模拟器软硬件准备
c语言·c++·单片机
做一道光12 小时前
电机控制——电流采样(三电阻)
单片机·嵌入式硬件·学习·电机控制
d111111111d13 小时前
STM32外设学习-WDG看门狗-(学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习
点灯小铭14 小时前
基于51单片机的医院银行排队叫号系统设计与实现
单片机·嵌入式硬件·毕业设计·51单片机·课程设计·期末大作业
啊森要自信14 小时前
【STM32】USART串口通信
c语言·开发语言·stm32·单片机·嵌入式硬件
做一道光14 小时前
电机控制——电流采样(双电阻)
笔记·单片机·嵌入式硬件·电机控制
就是蠢啊16 小时前
51单片机——DS18B20(一)
单片机·嵌入式硬件·51单片机
影阴16 小时前
通用定时器 输入捕获 +hal实现检测pwm周期和频率
stm32·单片机·hal
贝塔实验室17 小时前
如何使用Altium Designer进行项目编译及验证
单片机·嵌入式硬件·mcu·射频工程·基带工程·嵌入式实时数据库·精益工程