STM32F103硬件SPI控制0.96寸OLED显示屏(6针/7针)详解

目录

  • OLED介绍
  • 取字模
  • 程序
  • main.c
  • oled.c
  • oled.h
  • spi2.c
  • spi2.h
  • oledfont.h
  • 效果
  • 源码
  • 模拟SPI控制方式
  • OLED介绍

    OLED主要参数
    1、高分辨率:12864(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多)。
    2、广可视角度:大于160°。
    3、低功耗:正常显示时0.04W。
    4、宽供电范围:直流3.3V-5V。
    5、工业级:工作温度范围-30°℃~70°℃。
    6、体积小:28.8mm
    28.5mm。
    7、通信方式:lIC、SPI。
    8、亮度、对比度可以通过程序指令控制。
    9、OLED屏幕内部驱动芯片:SSD1306。

    6针OLED如下图所示

    引脚定义分别为

    引脚 定义
    GND 电源负
    VCC 电源正3.3V-5V
    SCL 时钟信号线
    SDA 双向数据线
    RES 复位
    D/C 数据或命令切换

    7针OLED如下图所示

    引脚定义分别为

    引脚 定义
    GND 电源负
    VCC 电源正3.3V-5V
    D0 SPI接口为SPI时钟线
    D1 SPI接口为SPI数据线
    RES 复位
    DC 数据或命令切换
    CS 片选信号

    本质上6针与7针都可以使用SPI控制,6针使用SPI通信时,默认片选引脚为选中状态,SCL为SPI时钟线,SDA为SPI数据线。

    SPI相对于4针IIC通讯有着无可替代的优势,就是在显示中文字符时不需要通过输入数字的方式引导去查表,先将要显示的中文字符编码存放到一个数组当中,需要显示中文时直接打入要显示的中文即可,省去了IIC查表的麻烦。

    取字模

    一、使用OLED之前先对所需要显示的内容取字模,取字模使用三贝计算器

    选项类型 选择内容
    输出格式 C51
    数据排列 从左到右从上到下
    取模方式 横向8点左高位
    黑白取反 正常
    字体种类 自选
    强制全角 ASCII自动转全角


    二、PCtoLCD2002
    请添加图片描述

    程序

    main.c

    
    
    #include	"system.h"
    #include	"delay.h"
    #include	"oled.h"
    
    
    
    int main(void)
    {
    	delay_init();
    	SPI2_Init();
    	OLED_Init();//初始化OLED
    	OLED_Clear(0);//清屏(全黑)
    	
    	while(1)
    	{
    		OLED_Test_MainPage();         //主界面显示测试
    		OLED_Clear(0);
    		OLED_Test_Color();            //刷屏测试
    		OLED_Clear(0);
    		OLED_Test_Rectangular();      //矩形绘制测试
    		OLED_Clear(0);
    		OLED_Test_Circle();           //圆形绘制测试
    		OLED_Clear(0);
    		OLED_Test_Triangle();         //三角形绘制测试
    		OLED_Clear(0);
    		
    		OLED_TEST_English();          //英文显示测试
    		OLED_Clear(0);
    		OLED_TEST_Number_Character(); //数字和符号显示测试
    		OLED_Clear(0);
    		
    		OLED_Test_Chinese();          //中文显示测试
    		OLED_Clear(0);
    		OLED_Test_BMP();              //BMP单色图片显示测试
    		OLED_Clear(0);
    		OLED_Test_Menu1();            //菜单1显示测试
    		OLED_Clear(0);
    		OLED_Test_Menu2();            //菜单2显示测试
    		OLED_Clear(0);
    	}
    }
    
    
    

    oled.c

    
    
    #include "oled.h"
    #include "oledfont.h"
    
    
    //OLED显存总共分为8页
    //每页8行,一行128个像素点
    //OLED的显存
    //存放格式如下.
    //[0]0 1 2 3 ... 127 (0~7)行
    //[1]0 1 2 3 ... 127 (8~15)行
    //[2]0 1 2 3 ... 127 (16~23)行
    //[3]0 1 2 3 ... 127 (24~31)行
    //[4]0 1 2 3 ... 127 (32~39)行
    //[5]0 1 2 3 ... 127 (40~47)行
    //[6]0 1 2 3 ... 127 (48~55)行
    //[7]0 1 2 3 ... 127 (56~63)行
    
    
    //数组每个bit存储OLED每个像素点的颜色值(1-亮(白色),0-灭(黑色))
    //每个数组元素表示1列8个像素点,一共128列
    static unsigned char OLED_buffer[1024] = 
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    
    
    /*******************************************************************
     * @name       :void OLED_Write_Byte(unsigned dat,unsigned cmd)
     * @date       :2022-06-22
     * @function   :将一个字节的内容写入OLED屏幕
     * @parameters :dat:要编写的内容
                    cmd:0-写入命令
    								    1-写入数据
     * @retvalue   :无
    ********************************************************************/
    void OLED_Write_Byte(unsigned dat,unsigned cmd)
    {
    	if(cmd)
    	{
    		OLED_DC_PIN_Set();
    	}
    	else
    	{
    		OLED_DC_PIN_Clr();
    	}
    	OLED_CS_PIN_Clr();
    	SPI_WriteByte(SPI2, dat);
    	OLED_CS_PIN_Set();
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Display_On(void)
     * @date       :2022-06-22
     * @function   :打开OLED显示
     * @parameters :无
     * @retvalue   :无
    ********************************************************************/ 	  
    void OLED_Display_On(void)
    {
    	OLED_Write_Byte(0X8D,OLED_CMD);		//SET DCDC命令
    	OLED_Write_Byte(0X14,OLED_CMD);		//DCDC ON
    	OLED_Write_Byte(0XAF,OLED_CMD);		//DISPLAY ON
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Display_Off(void)
     * @date       :2022-06-22
     * @function   :关闭OLED显示
     * @parameters :无
     * @retvalue   :无
    ********************************************************************/    
    void OLED_Display_Off(void)
    {
    	OLED_Write_Byte(0X8D,OLED_CMD);		//SET DCDC命令
    	OLED_Write_Byte(0X10,OLED_CMD);		//DCDC OFF
    	OLED_Write_Byte(0XAE,OLED_CMD);		//DISPLAY OFF
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Set_Pos(unsigned char x, unsigned char y)
     * @date       :2022-06-22
     * @function   :在OLED屏幕中设置坐标
     * @parameters :x:x坐标
                    y:y坐标
     * @retvalue   :无
    ********************************************************************/
    void OLED_Set_Pos(unsigned char x, unsigned char y)
    {
     	OLED_Write_Byte(YLevel+y/PAGE_SIZE,OLED_CMD);
    	OLED_Write_Byte((((x+2)&0xf0)>>4)|0x10,OLED_CMD);
    	OLED_Write_Byte(((x+2)&0x0f),OLED_CMD);
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Reset(void)
     * @date       :2022-06-22
     * @function   :重置OLED屏幕显示
     * @parameters :dat:0-显示全黑
                        1-显示全白
     * @retvalue   :无
    ********************************************************************/ 
    void OLED_Reset(void)
    {
    	OLED_RST_PIN_Set();
    	delay_ms(100);
    	OLED_RST_PIN_Clr();
    	delay_ms(100);
    	OLED_RST_PIN_Set();
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
     * @date       :2022-06-22
     * @function   :将像素值设置为RAM
     * @parameters :x:像素的x坐标
                    y:像素的y坐标
    								color:像素点的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ********************************************************************/ 
    void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
    {
    	if(color)
    	{
    		OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]|= (1<<(y%PAGE_SIZE))&0xff;
    	}
    	else
    	{
    		OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]&= ~((1<<(y%PAGE_SIZE))&0xff);
    	}
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Display(void)
     * @date       :2022-06-22
     * @function   :在OLED屏幕中显示
     * @parameters :无
     * @retvalue   :无
    ********************************************************************/  
    void OLED_Display(void)
    {
    	u8 i,n;
    	for(i=0;i<PAGE_SIZE;i++)  
    	{  
    		OLED_Write_Byte (YLevel+i,OLED_CMD);			//设置页地址(0~7)
    		OLED_Write_Byte (XLevelL,OLED_CMD);				//设置显示位置—列低地址
    		OLED_Write_Byte (XLevelH,OLED_CMD);				//设置显示位置—列高地址
    		for(n=0;n<WIDTH;n++)
    		{
    			OLED_Write_Byte(OLED_buffer[i*WIDTH+n],OLED_DATA);
    		}
    	}		//更新显示
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Clear(unsigned dat)
     * @date       :2022-06-22
     * @function   :清除OLED屏幕显示
     * @parameters :dat:0-显示全黑
                        1-显示全白
     * @retvalue   :无
    ********************************************************************/
    void OLED_Clear(unsigned dat)
    {
    	if(dat)
    	{
    		memset(OLED_buffer,0xff,sizeof(OLED_buffer));
    	}
    	else
    	{
    		memset(OLED_buffer,0,sizeof(OLED_buffer));
    	}
    	OLED_Display();
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Init_GPIO(void)
     * @date       :2022-06-22
     * @function   :OLED引脚初始化
     * @parameters :无
     * @retvalue   :无
    ********************************************************************/ 
    void OLED_Init_GPIO(void)
    {
    	GPIO_InitTypeDef  GPIO_InitStructure;
    	
    	RCC_APB2PeriphClockCmd(OLED_RST_CLK,ENABLE);				//使能端口时钟
    	GPIO_InitStructure.GPIO_Pin = OLED_RST_PIN;
     	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//速度50MHz
     	GPIO_Init(OLED_RST_PORT, &GPIO_InitStructure);
     	GPIO_SetBits(OLED_RST_PORT,OLED_RST_PIN);
    	
    	RCC_APB2PeriphClockCmd(OLED_DC_CLK,ENABLE);					//使能端口时钟
    	GPIO_InitStructure.GPIO_Pin = OLED_DC_PIN;
     	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//速度50MHz
     	GPIO_Init(OLED_DC_PORT, &GPIO_InitStructure);
     	GPIO_SetBits(OLED_DC_PORT,OLED_DC_PIN);
    	
    	RCC_APB2PeriphClockCmd(OLED_CS_CLK,ENABLE);					//使能端口时钟
    	GPIO_InitStructure.GPIO_Pin = OLED_CS_PIN;
     	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//速度50MHz
     	GPIO_Init(OLED_CS_PORT, &GPIO_InitStructure);
     	GPIO_SetBits(OLED_CS_PORT,OLED_CS_PIN);
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Init(void)
     * @date       :2022-06-22
     * @function   :初始化OLED SSD1306控制IC
     * @parameters :无
     * @retvalue   :无
    ********************************************************************/ 				    
    void OLED_Init(void)
    {
     	OLED_Init_GPIO();		//初始化GPIO
    	
     	delay_ms(200);
    	OLED_Reset();				//复位OLED
    	
    	/**************初始化SSD1306*****************/
    	OLED_Write_Byte(0xAE,OLED_CMD);	/*display off*/
    	OLED_Write_Byte(0x00,OLED_CMD);	/*set lower column address*/
    	OLED_Write_Byte(0x10,OLED_CMD);	/*set higher column address*/
    	OLED_Write_Byte(0x40,OLED_CMD);	/*set display start line*/
    	OLED_Write_Byte(0xB0,OLED_CMD);	/*set page address*/
    	OLED_Write_Byte(0x81,OLED_CMD);	/*contract control*/
    	OLED_Write_Byte(0xFF,OLED_CMD);	/*128*/
    	OLED_Write_Byte(0xA1,OLED_CMD);	/*set segment remap*/
    	OLED_Write_Byte(0xA6,OLED_CMD);	/*normal / reverse*/
    	OLED_Write_Byte(0xA8,OLED_CMD);	/*multiplex ratio*/
    	OLED_Write_Byte(0x3F,OLED_CMD);	/*duty = 1/64*/
    	OLED_Write_Byte(0xC8,OLED_CMD);	/*Com scan direction*/
    	OLED_Write_Byte(0xD3,OLED_CMD);	/*set display offset*/
    	OLED_Write_Byte(0x00,OLED_CMD);
    	OLED_Write_Byte(0xD5,OLED_CMD);	/*set osc division*/
    	OLED_Write_Byte(0x80,OLED_CMD);
    	OLED_Write_Byte(0xD9,OLED_CMD);	/*set pre-charge period*/
    	OLED_Write_Byte(0XF1,OLED_CMD);
    	OLED_Write_Byte(0xDA,OLED_CMD);	/*set COM pins*/
    	OLED_Write_Byte(0x12,OLED_CMD);
    	OLED_Write_Byte(0xDB,OLED_CMD);	/*set vcomh*/
    	OLED_Write_Byte(0x30,OLED_CMD);
    	OLED_Write_Byte(0x8D,OLED_CMD);	/*set charge pump disable*/
    	OLED_Write_Byte(0x14,OLED_CMD);
    	OLED_Write_Byte(0xAF,OLED_CMD);	/*display ON*/
    }
    
    
    /*******************************************************************
     * @name       :void OLED_DrawPoint(u8 x,u8 y,u8 color)
     * @date       :2022-06-22
     * @function   :在OLED屏幕中绘制点
     * @parameters :x:点的x坐标
                    y:点的y坐标
    								color:点的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ********************************************************************/
    void OLED_DrawPoint(u8 x,u8 y,u8 color)
    {
    	OLED_Set_Pixel(x,y,color);
    	OLED_Display();
    }
    
    
    /*******************************************************************
     * @name       :void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color)
     * @date       :2022-06-22
     * @function   :填充指定区域
     * @parameters :sx:指定填充区域的起始x坐标
                    sy:指定填充区域的起始y坐标
    								ex:指定填充区域的结束x坐标
    								ey:指定填充区域的结束y坐标
    								color:指定区域的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ********************************************************************/
    void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color)
    {
    	u8 i,j;
    	u8 width=ex-sx+1;			//得到填充的宽度
    	u8 height=ey-sy+1;		//高度
    	for(i=0;i<height;i++)
    	{
    		for(j=0;j<width;j++)
    		{
    				OLED_Set_Pixel(sx+j, sy+i,color);
    		}
    	}
    	OLED_Display();
    }
    
    
    /*******************************************************************
     * @name       :void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
     * @date       :2022-06-22
     * @function   :在两点之间画一条线
     * @parameters :x1:线的起始x点坐标
                    y1:线的起始y点坐标
    								x2:线的结束x点坐标
    								y2:线的结束y点坐标
    								color:线条的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ********************************************************************/
    void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
    {
    	u16 t;
    	int xerr=0,yerr=0,delta_x,delta_y,distance;
    	int incx,incy,uRow,uCol;
    	
    	delta_x=x2-x1; //计算坐标增量
    	delta_y=y2-y1;
    	uRow=x1;
    	uCol=y1;
    	if(delta_x>0)incx=1; //设置单步方向
    	else if(delta_x==0)incx=0;//垂直线
    	else {incx=-1;delta_x=-delta_x;}
    	if(delta_y>0)incy=1;
    	else if(delta_y==0)incy=0;//水平线
    	else{incy=-1;delta_y=-delta_y;}
    	if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴
    	else distance=delta_y;
    	for(t=0;t<=distance+1;t++ )//画线输出
    	{
    		OLED_Set_Pixel(uRow,uCol,color);
    		xerr+=delta_x ;
    		yerr+=delta_y ;
    		if(xerr>distance)
    		{
    			xerr-=distance;
    			uRow+=incx;
    		}
    		if(yerr>distance)
    		{
    			yerr-=distance;
    			uCol+=incy;
    		}
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
     * @date       :2022-06-22
     * @function   :绘制矩形
     * @parameters :x1:矩形的起始x坐标
                    y1:矩形的起始y坐标
    								x2:矩形的结束x坐标
    								y2:矩形的结束y坐标
    								color:线条的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
    {
    	OLED_DrawLine(x1,y1,x2,y1,color);
    	OLED_DrawLine(x1,y1,x1,y2,color);
    	OLED_DrawLine(x1,y2,x2,y2,color);
    	OLED_DrawLine(x2,y1,x2,y2,color);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
     * @date       :2022-06-22
     * @function   :填充矩形
     * @parameters :x1:填充矩形的起始x坐标
                    y1:填充矩形的起始y坐标
    								x2:填充矩形的结束x坐标
    								y2:填充矩形的结束y坐标
    								color:矩形的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/  
    void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
    {
    	OLED_Fill(x1,y1,x2,y2,color);
    }
    
     
    /*****************************************************************************
     * @name       :static void _draw_circle_8(u8 xc, u8 yc, u8 x, u8 y, u8 color)
     * @date       :2022-06-22
     * @function   :对称圆绘制算法(内部调用)
     * @parameters :xc:圆心的x坐标
                    yc:圆心的y坐标
    								x:相对于圆心的x坐标
    								y:相对于圆心的y坐标
    								color:圆的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    static void _draw_circle_8(u8 xc, u8 yc, u8 x, u8 y, u8 color)
    {
    	OLED_Set_Pixel(xc + x, yc + y, color);
    	OLED_Set_Pixel(xc - x, yc + y, color);
    	OLED_Set_Pixel(xc + x, yc - y, color);
    	OLED_Set_Pixel(xc - x, yc - y, color);
    	OLED_Set_Pixel(xc + y, yc + x, color);
    	OLED_Set_Pixel(xc - y, yc + x, color);
    	OLED_Set_Pixel(xc + y, yc - x, color);
    	OLED_Set_Pixel(xc - y, yc - x, color);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r)
     * @date       :2022-06-22
     * @function   :在指定位置绘制指定大小的圆
     * @parameters :xc:圆心的x坐标
                    yc:圆心的y坐标
    								r:圆形半径
    								color:圆的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r)
    {
    	int x = 0, y = r,d;
    	d = 3 - 2 * r;
    	while (x <= y)
    	{
    		_draw_circle_8(xc, yc, x, y, color);
    		if (d < 0)
    		{
    				d = d + 4 * x + 6;
    		}
    		else
    		{
    				d = d + 4 * (x - y) + 10;
    				y--;
    		}
    		x++;
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r)
     * @date       :2022-06-22
     * @function   :在指定位置填充指定大小的圆
     * @parameters :xc:圆心的x坐标
                    yc:圆心的y坐标
    								r:圆形半径
    								color:圆的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r)
    {
    	int x = 0, y = r, yi, d;
    	d = 3 - 2 * r;
    	while (x <= y)
    	{
    			for (yi = x; yi <= y; yi++)
    			{
    				_draw_circle_8(xc, yc, x, yi, color);
    			}
    			if (d < 0)
    			{
    				d = d + 4 * x + 6;
    			}
    			else
    			{
    				d = d + 4 * (x - y) + 10;
    				y--;
    			}
    			x++;
    	}
    	OLED_Display();
    }
    
    
    /**********************************************************************************
     * @name       :void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
     * @date       :2022-06-22 
     * @function   :在指定位置绘制三角形
     * @parameters :x0:三角形的第一点x坐标
                    y0:三角形的第一点y坐标
    								x1:三角形的第二点x坐标
    								y1:三角形的第二点y坐标
    								x2:三角形的第三点x坐标
    								y2:三角形的第三点y坐标
    								color:三角形的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ***********************************************************************************/
    void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
    {
    	OLED_DrawLine(x0,y0,x1,y1,color);
    	OLED_DrawLine(x1,y1,x2,y2,color);
    	OLED_DrawLine(x2,y2,x0,y0,color);
    }
    
    
    
    /*****************************************************************************
     * @name       :static void _swap(u8 *a, u8 *b)
     * @date       :2022-06-22
     * @function   :交换两个号码(内部通话)
     * @parameters :a:第一个号码的地址
    								b:第二个号码的地址
     * @retvalue   :无
    ******************************************************************************/
    static void _swap(u8 *a, u8 *b)
    {
    	u16 tmp;
      tmp = *a;
    	*a = *b;
    	*b = tmp;
    }
    
    
    /*****************************************************************************
     * @name       :static void _draw_h_line(u8 x0,u8 x1,u8 y,u8 color)
     * @date       :2022-06-22
     * @function   :在显示屏中画一条水平线(内部调用)
     * @parameters :x0:水平线的起始x坐标
                    x1:水平线的结束x坐标
    								y:水平线的y坐标
    								color:线的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    static void _draw_h_line(u8 x0,u8 x1,u8 y,u8 color)
    {
    	u8 i=0;
    	for(i=x0;i<=x1;i++)
    	{
    		OLED_Set_Pixel(i, y, color);
    	}
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
     * @date       :2022-06-22
     * @function   :在指定位置填充三角形
     * @parameters :x0:三角形的第一点x坐标
                    y0:三角形的第一点y坐标
    								x1:三角形的第二点x坐标
    								y1:三角形的第二点y坐标
    								x2:三角形的第三点x坐标
    								y2:三角形的第三点y坐标
    								color:三角形的颜色值
    								      1-白色
    											0-黑色
     * @retvalue   :无
    ******************************************************************************/
    void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
    {
    	u8 a, b, y, last;
    	int dx01, dy01, dx02, dy02, dx12, dy12;
    	long sa = 0;
    	long sb = 0;
     	if (y0 > y1)
    	{
        _swap(&y0,&y1);
    		_swap(&x0,&x1);
     	}
     	if (y1 > y2)
    	{
        _swap(&y2,&y1);
    		_swap(&x2,&x1);
     	}
      if (y0 > y1)
    	{
        _swap(&y0,&y1);
    		_swap(&x0,&x1);
      }
    	if(y0 == y2)
    	{
    		a = b = x0;
    		if(x1 < a)
        {
    			a = x1;
        }
        else if(x1 > b)
        {
    			b = x1;
        }
        if(x2 < a)
        {
    			a = x2;
        }
    		else if(x2 > b)
        {
    			b = x2;
        }
    		_draw_h_line(a,b,y0,color);
        return;
    	}
    	dx01 = x1 - x0;
    	dy01 = y1 - y0;
    	dx02 = x2 - x0;
    	dy02 = y2 - y0;
    	dx12 = x2 - x1;
    	dy12 = y2 - y1;
    	
    	if(y1 == y2)
    	{
    		last = y1;
    	}
      else
    	{
    		last = y1-1;
    	}
    	for(y=y0; y<=last; y++)
    	{
    		a = x0 + sa / dy01;
    		b = x0 + sb / dy02;
    		sa += dx01;
        sb += dx02;
        if(a > b)
        {
    			_swap(&a,&b);
    		}
    		_draw_h_line(a,b,y,color);
    	}
    	sa = dx12 * (y - y1);
    	sb = dx02 * (y - y0);
    	for(; y<=y2; y++)
    	{
    		a = x1 + sa / dy12;
    		b = x0 + sb / dy02;
    		sa += dx12;
    		sb += dx02;
    		if(a > b)
    		{
    			_swap(&a,&b);
    		}
    		_draw_h_line(a,b,y,color);
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode)
     * @date       :2022-06-22
     * @function   :显示单个英文字符
     * @parameters :x:字符显示位置的起始x坐标
                    y:字符显示位置的起始y坐标
    								chr:显示字符的ascii码(0~94)
    								Char_Size:显示字符的大小(8,16)
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode)
    {
    	unsigned char c=0,i=0,tmp,j=0;
    	c=chr-' ';											//得到偏移后的值
    	if(x>WIDTH-1){x=0;y=y+2;}
    	if(Char_Size ==16)
    	{
    		for(i=0;i<16;i++)
    		{
    			if(mode)
    			{
    				tmp = F8X16[c*16+i];
    			}
    			else
    			{
    				tmp = ~(F8X16[c*16+i]);
    			}
    			for(j=0;j<8;j++)
    			{
    				if(tmp&(0x80>>j))
    				{
    					OLED_Set_Pixel(x+j, y+i,1);
    				}
    				else
    				{
    					OLED_Set_Pixel(x+j, y+i,0);
    				}
    			}
    		}
    	}
    	else if(Char_Size==8)
    	{
    		for(i=0;i<8;i++)
    		{
    			if(mode)
    			{
    				tmp = F6x8[c][i];
    			}
    			else
    			{
    				tmp = ~(F6x8[c][i]);
    			}
    			for(j=0;j<8;j++)
    			{
    				if(tmp&(0x80>>j))
    				{
    					OLED_Set_Pixel(x+j, y+i,1);
    				}
    				else
    				{
    					OLED_Set_Pixel(x+j, y+i,0);
    				}
    			}
    		}
    	}
    	else
    	{
    		return;
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode)
     * @date       :2022-06-22 
     * @function   :显示英文字符串
     * @parameters :x:英语字符串的起始x坐标
                    y:英语字符串的起始y坐标
    								chr:英文字符串的起始地址
    								Char_Size:显示字符的大小
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode)
    {
    	unsigned char j=0,csize;
    	if(Char_Size == 16)
      {
    	  csize = Char_Size/2;
    	}
      else if(Char_Size == 8)
      {
    	  csize = Char_Size/2+2;
    	}
    	else
    	{
    		return;
    	}
    	while (chr[j]!='\0')
    	{
    		OLED_ShowChar(x,y,chr[j],Char_Size,mode);
    		x+=csize;
    		if(x>120)
    		{
    			x=0;
    			y+=Char_Size;
    		}
    		j++;
    	}
    }
    
    
    /*****************************************************************************
     * @name       :u32 mypow(u8 m,u8 n)
     * @date       :2022-06-22 
     * @function   :获取m的n次方(内部调用)
     * @parameters :m:the multiplier
                    n:the power
     * @retvalue   :m的n次方
    ******************************************************************************/
    static u32 mypow(u8 m,u8 n)
    {
    	u32 result=1;
    	while(n--)result*=m;
    	return result;
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode)
     * @date       :2022-06-22 
     * @function   :显示数字
     * @parameters :x:数字的起始x坐标
                    y:数字的起始y坐标
    								num:数字(0~4294967295)
    								len:显示数字的长度
    								Size:显示数字的大小
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode)
    {
    	u8 t,temp;
    	u8 enshow=0,csize;
      if(Size == 16)
      {
    	  csize = Size/2;
    	}
      else if(Size == 8)
      {
    	  csize = Size/2+2;
    	}
    	else
    	{
    		return;
    	}
    	for(t=0;t<len;t++)
    	{
    		temp=(num/mypow(10,len-t-1))%10;
    		if(enshow==0&&t<(len-1))
    		{
    			if(temp==0)
    			{
    				OLED_ShowChar(x+csize*t,y,' ',Size,mode);
    				continue;
    			}else enshow=1;
    			
    		}
    	 	OLED_ShowChar(x+csize*t,y,temp+'0',Size,mode);
    	}
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode)
     * @date       :2022-06-22
     * @function   :显示单个16x16汉字
     * @parameters :x:汉字的起始x坐标
                    y:汉字的起始y坐标
    								s:汉字的起始地址
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/ 
    void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode)
    {
    	u8 i,j,k,tmp;
    	u16 num;
    	num = sizeof(cfont16)/sizeof(typFNT_GB16);
      for(i=0;i<num;i++)
    	{
    		if((cfont16[i].Index[0] == *s) && (cfont16[i].Index[1] == *(s+1)))
    		{
    			for(j=0;j<32;j++)
    			{
    				if(mode)
    				{
    					tmp = cfont16[i].Msk[j];
    				}
    				else
    				{
    					tmp = ~(cfont16[i].Msk[j]);
    				}
    				for(k=0;k<8;k++)
    				{
    					if(tmp&(0x80>>k))
    					{
    						OLED_Set_Pixel(x+(j%2)*8+k, y+j/2,1);
    					}
    					else
    					{
    						OLED_Set_Pixel(x+(j%2)*8+k, y+j/2,0);
    					}
    				}
    			}	
    			break;
    		}	
    	}
    	OLED_Display();
    }
    
    /*****************************************************************************
     * @name       :void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode)
     * @date       :2022-06-22
     * @function   :显示单个24x24汉字
     * @parameters :x:汉字的起始x坐标
                    y:汉字的起始y坐标
    								s:汉字的起始地址
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/ 
    void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode)
    {
    	u8 i,j,k,tmp;
    	u16 num;
    	num = sizeof(cfont24)/sizeof(typFNT_GB24);
      for(i=0;i<num;i++)
    	{
    		if((cfont24[i].Index[0] == *s) && (cfont24[i].Index[1] == *(s+1)))
    		{
    			for(j=0;j<72;j++)
    			{
    				if(mode)
    				{
    					tmp = cfont24[i].Msk[j];
    				}
    				else
    				{
    					tmp = ~(cfont24[i].Msk[j]);
    				}
    				for(k=0;k<8;k++)
    				{
    					if(tmp&(0x80>>k))
    					{
    						OLED_Set_Pixel(x+(j%3)*8+k, y+j/3,1);
    					}
    					else
    					{
    						OLED_Set_Pixel(x+(j%3)*8+k, y+j/3,0);
    					}
    				}
    			}	
    			break;
    		}	
    	}
    	OLED_Display();
    }
    
    /*****************************************************************************
     * @name       :void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode)
     * @date       :2022-06-22
     * @function   :显示单个32x32汉字
     * @parameters :x:汉字的起始x坐标
                    y:汉字的起始y坐标
    								s:汉字的起始地址
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode)
    {
    	u8 i,j,k,tmp;
    	u16 num;
    	num = sizeof(cfont32)/sizeof(typFNT_GB32);
      for(i=0;i<num;i++)
    	{
    		if((cfont32[i].Index[0] == *s) && (cfont32[i].Index[1] == *(s+1)))
    		{
    			for(j=0;j<128;j++)
    			{
    				if(mode)
    				{
    					tmp = cfont32[i].Msk[j];
    				}
    				else
    				{
    					tmp = ~(cfont32[i].Msk[j]);
    				}
    				for(k=0;k<8;k++)
    				{
    					if(tmp&(0x80>>k))
    					{
    						OLED_Set_Pixel(x+(j%4)*8+k, y+j/4,1);
    					}
    					else
    					{
    						OLED_Set_Pixel(x+(j%4)*8+k, y+j/4,0);
    					}
    				}
    			}
    			break;
    		}
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode)
     * @date       :2022-06-22 
     * @function   :显示中文字符串
     * @parameters :x:汉语字符串的起始x坐标
                    y:汉语字符串的起始y坐标
    								size:中文字符串的大小
    								str:中文字符串的起始地址
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode)
    {
    	while(*str!='\0')
    	{
    		if(hsize == 16)
    		{
    			OLED_ShowFont16(x,y,str,mode);
    		}
    		else if(hsize == 24)
    		{
    			OLED_ShowFont24(x,y,str,mode);
    		}
    		else if(hsize == 32)
    		{
    			OLED_ShowFont32(x,y,str,mode);
    		}
    		else
    		{
    			return;
    		}
    		x+=hsize;
    		if(x>WIDTH-hsize)
    		{
    			x=0;
    			y+=hsize;
    		}
    		str+=2;
    	}
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode)
     * @date       :2022-06-22
     * @function   :显示BMP单色图片
     * @parameters :x:BMP单色图片的起始x坐标
                    y:BMP单色图片的起始y坐标
    								width:BMP单色图片的宽度
    								height:BMP单色图片的高度
    								BMP:BMP单色图像阵列的起始地址
    								mode:0-白底黑字
    								     1-黑底白字
     * @retvalue   :无
    ******************************************************************************/
    void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode)
    {
     u8 i,j,k;
     u8 tmp;
     for(i=0;i<height;i++)
     {
    		for(j=0;j<(width+7)/8;j++)
    		{
    			if(mode)
    			{
    				tmp = BMP[i*((width+7)/8)+j];
    			}
    			else
    			{
    				tmp = ~BMP[i*((width+7)/8)+j];
    			}
    			for(k=0;k<8;k++)
    			{
    				if(tmp&(0x80>>k))
    				{
    					OLED_Set_Pixel(x+j*8+k, y+i,1);
    				}
    				else
    				{
    					OLED_Set_Pixel(x+j*8+k, y+i,0);
    				}
    			}
    		}
    	}
    	OLED_Display();
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_MainPage(void)
     * @date       :2022-06-22
     * @function   :绘制综合测试程序主界面
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_MainPage(void)
    {
    	OLED_ShowString(28,0,"daichuangkun",16,1);					//显示英文字符串
    	OLED_ShowCHinese(28,20,16,"戴创昆",1);			//显示中文汉字
    	//OLED_ShowString(40,32,"64X128",16,1);
    	OLED_ShowString(4,48,"123456789",16,1);	//显示数字
    	//OLED_ShowString(4,48,"www.lcdwiki.com",16,1);
    	delay_ms(1500);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Color(void)
     * @date       :2022-06-22
     * @function   :颜色填充测试(白色、黑色)
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Color(void)
    {
    	 OLED_Fill(0,0,WIDTH-1,HEIGHT-1,0);
    	 OLED_ShowString(10,10,"BLACK",16,1);
    	 delay_ms(1000);
    	 OLED_Fill(0,0,WIDTH-1,HEIGHT-1,1);
    	 delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Rectangular(void))
     * @date       :2022-06-22
     * @function   :矩形显示和填充测试
    								依次显示黑白矩形框,1000毫秒后,依次用黑色和白色填充矩形
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Rectangular(void)
    {
    	OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
    	OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
    	OLED_DrawRectangle(5, 5, WIDTH/2-1-5, HEIGHT-1-5,1);
    	OLED_DrawRectangle(WIDTH/2-1+5, 5, WIDTH-1-5, HEIGHT-1-5,0);
    	delay_ms(1000);
    	OLED_FillRectangle(5, 5, WIDTH/2-1-5, HEIGHT-1-5,1);
    	OLED_FillRectangle(WIDTH/2-1+5, 5, WIDTH-1-5, HEIGHT-1-5,0);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Circle(void)
     * @date       :2022-06-22
     * @function   :循环显示和填充测试依次显示黑白圆形框,1000毫秒后,依次用黑色、白色填充圆形
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Circle(void)
    {
    	OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
    	OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
    	OLED_DrawCircle(WIDTH/2/2-1, HEIGHT/2-1, 1, 27);
    	OLED_DrawCircle(WIDTH/2+WIDTH/2/2-1, HEIGHT/2-1, 0, 27);
    	delay_ms(1000);
    	OLED_FillCircle(WIDTH/2/2-1, HEIGHT/2-1, 1, 27);
    	OLED_FillCircle(WIDTH/2+WIDTH/2/2-1, HEIGHT/2-1, 0, 27);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Triangle(void)
     * @date       :2022-06-22
     * @function   :三角形显示和填充测试依次显示黑白三角形框,1000毫秒后,依次用黑色和白色填充三角形
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Triangle(void)
    {
    	OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
    	OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
    	OLED_DrawTriangel(5,HEIGHT-1-5,WIDTH/2/2-1,5,WIDTH/2-1-5,HEIGHT-1-5,1);
    	OLED_DrawTriangel(WIDTH/2-1+5,HEIGHT-1-5,WIDTH/2+WIDTH/2/2-1,5,WIDTH-1-5,HEIGHT-1-5,0);
    	delay_ms(1000);
    	OLED_FillTriangel(5,HEIGHT-1-5,WIDTH/2/2-1,5,WIDTH/2-1-5,HEIGHT-1-5,1);
    	OLED_FillTriangel(WIDTH/2-1+5,HEIGHT-1-5,WIDTH/2+WIDTH/2/2-1,5,WIDTH-1-5,HEIGHT-1-5,0);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_TEST_English(void)
     * @date       :2022-06-22
     * @function   :英文显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_TEST_English(void)
    {
    	OLED_ShowString(0,5,"6x8:abcdefghijklmnopqrstuvwxyz",8,1);
    	OLED_ShowString(0,25,"8x16:abcdefghijklmnopqrstuvwxyz",16,1);
    	delay_ms(1000);
    	OLED_ShowString(0,5,"6x8:ABCDEFGHIJKLMNOPQRSTUVWXYZ",8,1);
    	OLED_ShowString(0,25,"8x16:ABCDEFGHIJKLMNOPQRSTUVWXYZ",16,1);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_TEST_Number_Character(void) 
     * @date       :2022-06-22
     * @function   :数字和字符显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_TEST_Number_Character(void)
    {
    	OLED_Fill(0,0,WIDTH-1,HEIGHT/2-1,0);
    	OLED_ShowString(0,0,"6x8:!\"#$%&'()*+,-./:;<=>?@[]\\^_`~{}|",8,1);
    	OLED_ShowNum(30,16,1234567890,10,8,1);
    	delay_ms(1000);
    	OLED_Clear(0);
      OLED_ShowString(0,0,"8x16:!\"#$%&'()*+,-./:;<=>?@[]\\^_`~{}|",16,1);
    	OLED_ShowNum(40,32,1234567890,10,16,1);
    	delay_ms(1500);
    	OLED_Clear(0);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Chinese(void)
     * @date       :2022-06-22
     * @function   :中文显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Chinese(void)
    {
    	OLED_ShowString(45,0,"16x16",8,1);
    	OLED_ShowCHinese(16,20,16,"戴创昆",1);
    	delay_ms(1000);
    	OLED_Clear(0);
    	OLED_ShowString(45,0,"24x24",8,1);
    	OLED_ShowCHinese(16,20,24,"戴创昆",1);
    	delay_ms(1000);
    	OLED_Clear(0);
    	OLED_ShowString(45,0,"32x32",8,1);
    	OLED_ShowCHinese(0,20,32,"戴创昆",1);
      delay_ms(1000);
    	OLED_Clear(0);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_BMP(void)
     * @date       :2022-06-22
     * @function   :BMP单色图片显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_BMP(void)
    {
    	OLED_DrawBMP(0,0,128,64, BMP2, 1);
    	delay_ms(1000);
    	OLED_DrawBMP(0,0,128,64, BMP3, 1);
    	delay_ms(1000);
    	OLED_DrawBMP(0,0,128,64, BMP4, 1);
    	delay_ms(1000);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Menu1(void)
     * @date       :2022-06-22
     * @function   :中文选择菜单显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Menu1(void)
    {
    	OLED_Fill(0,0,WIDTH-1,15,1);
    	OLED_ShowCHinese(32,0,16,"系统设置",0);
    	OLED_DrawCircle(10, 24, 1,6);
    	OLED_DrawCircle(10, 24, 1,3);
    	OLED_DrawCircle(10, 40, 1,6);
    	OLED_DrawCircle(10, 40, 1,3);
    	OLED_DrawCircle(10, 56, 1,6);
    	OLED_DrawCircle(10, 56, 1,3);
    	OLED_ShowString(20,16,"A.",16,1);
    	OLED_ShowCHinese(36,16,16,"音量设置",1);
    	OLED_ShowString(20,32,"B.",16,1);
    	OLED_ShowCHinese(36,32,16,"颜色设置",1);
    	OLED_ShowString(20,48,"C.",16,1);
    	OLED_ShowCHinese(36,48,16,"网络设置",1);
    	OLED_DrawRectangle(0, 0,WIDTH-1,HEIGHT-1,1);
    	OLED_DrawLine(WIDTH-1-10, 15, WIDTH-1-10, HEIGHT-1,1);
    	OLED_FillTriangel(WIDTH-1-9,20,WIDTH-1-5,16,WIDTH-1-1,20,1);
    	OLED_FillTriangel(WIDTH-1-9,HEIGHT-1-5,WIDTH-1-5,HEIGHT-1-1,WIDTH-1-1,HEIGHT-1-5,1);
    	OLED_FillCircle(10, 24, 1,3);
    	OLED_Fill(20,16,99,31,1);
    	OLED_ShowString(20,16,"A.",16,0);
    	OLED_ShowCHinese(36,16,16,"音量设置",0);
    	OLED_Fill(WIDTH-1-9,23,WIDTH-1-1,28,1);
    	delay_ms(1500);
    	OLED_FillCircle(10, 24, 0,3);
    	OLED_DrawCircle(10, 24, 1,3);
    	OLED_Fill(20,16,99,31,0);
    	OLED_ShowString(20,16,"A.",16,1);
    	OLED_ShowCHinese(36,16,16,"音量设置",1);
    	OLED_Fill(WIDTH-1-9,23,WIDTH-1-1,28,0);
    	OLED_FillCircle(10, 40, 1,3);
    	OLED_Fill(20,32,99,47,1);
    	OLED_ShowString(20,32,"B.",16,0);
    	OLED_ShowCHinese(36,32,16,"颜色设置",0);
    	OLED_Fill(WIDTH-1-9,37,WIDTH-1-1,42,1);
    	delay_ms(1500);
    	OLED_FillCircle(10, 40, 0,3);
    	OLED_DrawCircle(10, 40, 1,3);
    	OLED_Fill(20,32,99,47,0);
    	OLED_ShowString(20,32,"B.",16,1);
    	OLED_ShowCHinese(36,32,16,"颜色设置",1);
    	OLED_Fill(WIDTH-1-9,37,WIDTH-1-1,42,0);
    	OLED_FillCircle(10, 56, 1,3);
    	OLED_Fill(20,48,99,63,1);
    	OLED_ShowString(20,48,"C.",16,0);
    	OLED_ShowCHinese(36,48,16,"网络设置",0);
    	OLED_Fill(WIDTH-1-9,HEIGHT-1-13,WIDTH-1-1,HEIGHT-1-8,1);
    	delay_ms(1500);
    }
    
    
    /*****************************************************************************
     * @name       :void OLED_Test_Menu2(void)
     * @date       :2022-06-22
     * @function   :英文天气界面显示测试
     * @parameters :无
     * @retvalue   :无
    ******************************************************************************/
    void OLED_Test_Menu2(void)
    {
    	u8 i;
    	srand(123456);
    	OLED_DrawLine(0, 10, WIDTH-1, 10,1);
    	OLED_DrawLine(WIDTH/2-1,11,WIDTH/2-1,HEIGHT-1,1);
    	OLED_DrawLine(WIDTH/2-1,10+(HEIGHT-10)/2-1,WIDTH-1,10+(HEIGHT-10)/2-1,1);
    	OLED_ShowString(0,1,"2019-08-17",8,1);
    	OLED_ShowString(78,1,"Saturday",8,1);
    	OLED_ShowString(14,HEIGHT-1-10,"Cloudy",8,1);
    	OLED_ShowString(WIDTH/2-1+2,13,"TEMP",8,1);
    	OLED_DrawCircle(WIDTH-1-19, 25, 1,2);
    	OLED_ShowString(WIDTH-1-14,20,"C",16,1);
    	OLED_ShowString(WIDTH/2-1+9,20,"32.5",16,1);
    	OLED_ShowString(WIDTH/2-1+2,39,"PM2.5",8,1);
    	OLED_ShowString(WIDTH/2-1+5,46,"90ug/m3",16,1);
    	OLED_DrawBMP(6,16,51,32, BMP5, 1);
    	for(i=0;i<15;i++)
    	{
    		OLED_ShowNum(WIDTH/2-1+9,20,rand()%4,1,16,1);
    		OLED_ShowNum(WIDTH/2-1+9+8,20,rand()%10,1,16,1);
    		OLED_ShowNum(WIDTH/2-1+9+8+16,20,rand()%10,1,16,1);
    		OLED_ShowNum(WIDTH/2-1+5,46,rand()%10,1,16,1);
    		OLED_ShowNum(WIDTH/2-1+5+8,46,rand()%10,1,16,1);
        delay_ms(500);
    	}
    }
    
    
    
    

    oled.h

    
    
    /****************************************************************************************************
    //=========================================电源接线================================================//
    // OLED模块               STM32单片机
    //   VCC         接       DC 5V/3.3V      //OLED屏电源正
    //   GND         接          GND          //OLED屏电源地
    //=======================================液晶屏数据线接线==========================================//
    //本模块默认数据总线类型为4线制SPI
    // OLED模块               STM32单片机
    //   D1          接          PB15        //OLED屏SPI写信号
    //=======================================液晶屏控制线接线==========================================//
    // OLED模块               STM32单片机
    //   CS          接          PB11        //OLED屏片选控制信号
    //   RES         接          PB12        //OLED屏复位控制信号
    //   DC          接          PB10        //OLED屏数据/命令选择控制信号
    //   D0          接          PB13        //OLED屏SPI时钟信号
    //=========================================触摸屏接线=========================================//
    //本模块不带触摸功能,所以不需要触摸屏接线
    ****************************************************************************************************/	
    
    
    #ifndef __OLED_H
    #define __OLED_H		
    
    
    #include "sys.h"
    #include "stdlib.h"
    #include "string.h" 	 
    #include "delay.h"
    #include "spi2.h"
    
    
    //--------------OLED参数定义---------------------
    #define PAGE_SIZE			8
    #define XLevelL				0x00
    #define XLevelH				0x10
    #define YLevel				0xB0
    #define	Brightness		0xFF 
    #define WIDTH					128
    #define HEIGHT				64	
    
    
    //-------------写命令和数据定义-------------------
    #define OLED_CMD			0		//写命令
    #define OLED_DATA			1		//写数据 
    
    
    //-----------------OLED端口定义----------------
    
    #define OLED_RST_PIN		GPIO_Pin_8							//复位信号
    #define OLED_RST_PORT		GPIOA										//复位信号
    #define OLED_RST_CLK		RCC_APB2Periph_GPIOA		//复位信号
    
    #define OLED_DC_PIN			GPIO_Pin_11							//数据/命令控制信号
    #define OLED_DC_PORT		GPIOA										//数据/命令控制信号
    #define OLED_DC_CLK			RCC_APB2Periph_GPIOA		//数据/命令控制信号
    
    #define OLED_CS_PIN			GPIO_Pin_12							//片选信号
    #define OLED_CS_PORT		GPIOA										//片选信号
    #define OLED_CS_CLK			RCC_APB2Periph_GPIOA		//片选信号
    
    
    //-----------------OLED端口操作定义----------------
     					   
    #define OLED_RST_PIN_Clr()	GPIO_ResetBits(OLED_RST_PORT,OLED_RST_PIN)
    #define OLED_RST_PIN_Set()	GPIO_SetBits	(OLED_RST_PORT,OLED_RST_PIN)
    
    #define OLED_DC_PIN_Clr()		GPIO_ResetBits(OLED_DC_PORT,OLED_DC_PIN)
    #define OLED_DC_PIN_Set()		GPIO_SetBits	(OLED_DC_PORT,OLED_DC_PIN)
    
    #define OLED_CS_PIN_Clr()		GPIO_ResetBits(OLED_CS_PORT,OLED_CS_PIN)
    #define OLED_CS_PIN_Set()		GPIO_SetBits	(OLED_CS_PORT,OLED_CS_PIN)
    
    
    void OLED_Write_Byte(unsigned dat,unsigned cmd);														//将一个字节的内容写入OLED屏幕
    void OLED_Display_On(void);																									//打开OLED显示
    void OLED_Display_Off(void);																								//关闭OLED显示
    void OLED_Set_Pos(unsigned char x, unsigned char y);												//在OLED屏幕中设置坐标
    void OLED_Reset(void);																											//重置OLED屏幕显示
    void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color);	//将像素值设置为RAM
    void OLED_Display(void);																										//在OLED屏幕中显示
    void OLED_Clear(unsigned dat);																							//清除OLED屏幕显示
    void OLED_Init_GPIO(void);																									//OLED引脚初始化
    void OLED_Init(void);																												//初始化OLED SSD1306控制IC
    
    void OLED_DrawPoint(u8 x, u8 y, u8 color);																	//在OLED屏幕中绘制点
    void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color);														//填充指定区域
    void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);										//在两点之间画一条线
    void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);								//绘制矩形
    void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);								//填充矩形
    void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r);													//在指定位置绘制指定大小的圆
    void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r);													//在指定位置填充指定大小的圆
    void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color);				//在指定位置绘制三角形
    void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color);				//在指定位置填充三角形
    void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode);									//显示单个英文字符
    void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode);								//显示英文字符串
    void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode);								//显示数字
    void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode);															//显示单个16x16汉字
    void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode);															//显示单个24x24汉字
    void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode);															//显示单个32x32汉字
    void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode);									//显示中文字符串
    void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode);				//显示BMP单色图片
    
    void OLED_Test_MainPage(void);																							//绘制综合测试程序主界面
    void OLED_Test_Color(void);																									//颜色填充测试(白色、黑色)
    void OLED_Test_Rectangular(void);																						//矩形显示和填充测试
    void OLED_Test_Circle(void);																								//循环显示和填充测试依次显示黑白圆形框,1000毫秒后,依次用黑色、白色填充圆形
    void OLED_Test_Triangle(void);																							//三角形显示和填充测试依次显示黑白三角形框,1000毫秒后,依次用黑色和白色填充三角形
    void OLED_TEST_English(void);																								//英文显示测试
    void OLED_TEST_Number_Character(void);																			//数字和字符显示测试
    void OLED_Test_Chinese(void);																								//中文显示测试
    void OLED_Test_BMP(void);																										//BMP单色图片显示测试
    void OLED_Test_Menu1(void);																									//中文选择菜单显示测试
    void OLED_Test_Menu2(void);																									//英文天气界面显示测试
    
    
    #endif
    
    
    

    spi2.c

    
    
    #include "spi2.h"
    
    
    void SPI2_Init(void)
    {
     	GPIO_InitTypeDef GPIO_InitStructure;
      SPI_InitTypeDef  SPI_InitStructure;
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,  ENABLE );	//SPI2时钟使能
    	
    	RCC_APB2PeriphClockCmd(SPI2_SCK_CLK, ENABLE );					//PORTB时钟使能
    	GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;					//PB13复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(SPI2_SCK_PORT, &GPIO_InitStructure);					//初始化GPIOB
    	
    	RCC_APB2PeriphClockCmd(SPI2_MOSI_CLK, ENABLE );					//PORTB时钟使能
    	GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;					//PB15复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(SPI2_MOSI_PORT, &GPIO_InitStructure);					//初始化GPIOB
    	
    	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;			//设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;														//设置SPI工作模式:设置为主SPI
    	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;												//设置SPI的数据大小:SPI发送接收8位帧结构
    	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;															//串行同步时钟的空闲状态为高电平
    	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;														//串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;																//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;			//定义波特率预分频的值:波特率预分频值为2
    	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;											//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    	SPI_InitStructure.SPI_CRCPolynomial = 7;																//CRC值计算的多项式
    	SPI_Init(SPI2, &SPI_InitStructure);																			//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
    	
    	SPI_Cmd(SPI2, ENABLE);		//使能SPI外设
    }
    
    
    //SPI 速度设置函数
    //SpeedSet:
    //SPI_BaudRatePrescaler_2   2分频
    //SPI_BaudRatePrescaler_8   8分频
    //SPI_BaudRatePrescaler_16  16分频
    //SPI_BaudRatePrescaler_256 256分频
    void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
    {
      assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
    	SPI2->CR1&=0XFFC7;
    	SPI2->CR1|=SPI_BaudRatePrescaler;		//设置SPI2速度
    	SPI_Cmd(SPI2,ENABLE);
    }
    
    
    //SPIx 读写一个字节
    //TxData:要写入的字节
    //返回值:读取到的字节
    u8 SPI2_ReadWriteByte(u8 TxData)
    {
    	u8 retry=0;
    	while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)		//检查指定的SPI标志位设置与否:发送缓存空标志位
    	{
    		retry++;
    		if(retry>200)
    			return 0;
    	}
    	SPI_I2S_SendData(SPI2, TxData);		//通过外设SPIx发送一个数据
    	retry=0;
    	
    	while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)		//检查指定的SPI标志位设置与否:接受缓存非空标志位
    	{
    		retry++;
    		if(retry>200)return 0;
    	}
    	return SPI_I2S_ReceiveData(SPI2);		//返回通过SPIx最近接收的数据
    }
    
    
    /*****************************************************************************
     * @name       :u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
     * @date       :2022-06-22
     * @function   :使用STM32的硬件SPI写入一个字节的数据
     * @parameters :SPIx:SPI类型,x表示1,2,3
                    Byte:要写入的数据
     * @retvalue   :总线接收的数据
    ******************************************************************************/
    u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
    {
    	/* Loop while DR register in not emplty */
      while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
    
      /* Send byte through the SPI1 peripheral */
      SPI_I2S_SendData(SPIx, Byte);
    
      /* Wait to receive a byte */
      while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
    
      /* Return the byte read from the SPI bus */
      return SPI_I2S_ReceiveData(SPIx);
    }
    
    
    

    spi2.h

    
    
    #ifndef __SPI2_H
    #define __SPI2_H
    
    
    #include "sys.h"
    #include "oled.h"
    
    
    //--------------SPI端口操作定义---------------------
    
    #define SPI2_SCK_PIN		GPIO_Pin_13							//时钟信号
    #define SPI2_SCK_PORT		GPIOB										//时钟信号
    #define SPI2_SCK_CLK		RCC_APB2Periph_GPIOB		//时钟信号
    
    #define SPI2_MOSI_PIN		GPIO_Pin_15							//数据发送信号
    #define SPI2_MOSI_PORT	GPIOB										//数据发送信号
    #define SPI2_MOSI_CLK		RCC_APB2Periph_GPIOB		//数据发送信号
    
    #define	SPI2_SCK_PIN_SET()  	GPIO_SetBits	(SPI2_SCK_PORT,SPI2_SCK_PIN)
    #define	SPI2_SCK_PIN_CLR()  	GPIO_ResetBits(SPI2_SCK_PORT,SPI2_SCK_PIN)
    
    #define	SPI2_MOSI_PIN_SET()  	GPIO_SetBits	(SPI2_MOSI_PORT,SPI2_MOSI_PIN)
    #define	SPI2_MOSI_PIN_CLR()  	GPIO_ResetBits(SPI2_MOSI_PORT,SPI2_MOSI_PIN)
    
    
    void SPI2_Init(void);													//初始化SPI口
    void SPI2_SetSpeed(u8 SpeedSet);							//设置SPI速度
    u8 SPI2_ReadWriteByte(u8 TxData);							//SPI总线读写一个字节
    u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte);	//使用STM32的硬件SPI写入一个字节的数据
    
    
    #endif
    
    
    

    oledfont.h

    
    
    #ifndef __OLEDFONT_H
    #define __OLEDFONT_H
    
    
    //常用ASCII表
    //偏移量32
    //ASCII字符集
    //偏移量32
    //大小:6*8
    //逐行式,顺向(高位在前)
    /************************************6*8的点阵************************************/
    const unsigned char F6x8[][8] =
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // sp
    	0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, // !
    	0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00, // "
    	0x28,0x28,0x7C,0x28,0x7C,0x28,0x28,0x00, // #
    	0x10,0x3C,0x50,0x38,0x14,0x78,0x10,0x00, // $
    	0x00,0x4C,0x2C,0x10,0x08,0x60,0x60,0x00, // %
    	0x30,0x48,0x50,0x20,0x54,0x48,0x34,0x00, // &
    	0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x00, // '
    	0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00, // (
    	0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00, // )
    	0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00, // *
    	0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00, // +
    	0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x10, // ,
    	0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00, // -
    	0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00, // .
    	0x00,0x04,0x08,0x10,0x20,0x40,0x00,0x00, // /
    	0x38,0x44,0x4C,0x54,0x64,0x44,0x38,0x00, // 0
    	0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00, // 1
    	0x38,0x44,0x04,0x08,0x10,0x20,0x7C,0x00, // 2
    	0x7C,0x08,0x10,0x08,0x04,0x44,0x38,0x00, // 3 
    	0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00, // 4
    	0x7C,0x40,0x78,0x04,0x04,0x44,0x38,0x00, // 5
    	0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00, // 6
    	0x7C,0x04,0x08,0x10,0x20,0x20,0x20,0x00, // 7
    	0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00, // 8
    	0x38,0x44,0x44,0x3C,0x04,0x08,0x30,0x00, // 9
    	0x00,0x30,0x30,0x00,0x30,0x30,0x00,0x00, // :
    	0x00,0x30,0x30,0x00,0x30,0x10,0x20,0x00, // ;
    	0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00, // <
    	0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00, // =
    	0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x00, // >
    	0x38,0x44,0x04,0x08,0x10,0x00,0x10,0x00, // ?
    	0x38,0x44,0x04,0x34,0x5C,0x44,0x38,0x00, // @
    	0x10,0x28,0x44,0x44,0x7C,0x44,0x44,0x00, // A
    	0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00, // B
    	0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00, // C
    	0x70,0x48,0x44,0x44,0x44,0x48,0x70,0x00, // D
    	0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00, // E
    	0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00, // F
    	0x38,0x44,0x40,0x5C,0x44,0x44,0x3C,0x00, // G
    	0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00, // H
    	0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00, // I
    	0x1C,0x08,0x08,0x08,0x08,0x48,0x30,0x00, // J
    	0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00, // K
    	0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00, // L
    	0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x00, // M
    	0x44,0x44,0x64,0x54,0x4C,0x44,0x44,0x00, // N
    	0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00, // O
    	0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00, // P
    	0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00, // Q
    	0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00, // R
    	0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00, // S
    	0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00, // T
    	0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00, // U
    	0x44,0x44,0x44,0x44,0x44,0x28,0x10,0x00, // V
    	0x44,0x44,0x44,0x54,0x54,0x54,0x28,0x00, // W
    	0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00, // X
    	0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x00, // Y
    	0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00, // Z
    	0x38,0x20,0x20,0x20,0x20,0x20,0x38,0x00, // [
    	0x00,0x40,0x20,0x10,0x08,0x04,0x00,0x00, // '\'
    	0x38,0x08,0x08,0x08,0x08,0x08,0x38,0x00, // ]
    	0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00, // ^
    	0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00, // _
    	0x20,0x10,0x08,0x00,0x00,0x00,0x00,0x00, // '
    	0x00,0x00,0x38,0x04,0x3C,0x44,0x3C,0x00, // a
    	0x40,0x40,0x58,0x64,0x44,0x44,0x78,0x00, // b
    	0x00,0x00,0x38,0x40,0x40,0x44,0x38,0x00, // c
    	0x04,0x04,0x34,0x4C,0x44,0x44,0x3C,0x00, // d
    	0x00,0x00,0x38,0x44,0x7C,0x40,0x38,0x00, // e
    	0x38,0x24,0x20,0x70,0x20,0x20,0x20,0x00, // f
    	0x00,0x00,0x3C,0x44,0x44,0x3C,0x04,0x38, // g
    	0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00, // h
    	0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00, // i
    	0x08,0x00,0x18,0x08,0x08,0x08,0x48,0x30, // j
    	0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00, // k
    	0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00, // l
    	0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x00, // m
    	0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00, // n
    	0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00, // o
    	0x00,0x00,0x58,0x64,0x64,0x58,0x40,0x40, // p
    	0x00,0x00,0x34,0x4C,0x4C,0x34,0x04,0x04, // q
    	0x00,0x00,0x58,0x64,0x40,0x40,0x40,0x00, // r
    	0x00,0x00,0x3C,0x40,0x38,0x04,0x78,0x00, // s
    	0x20,0x20,0x70,0x20,0x20,0x24,0x18,0x00, // t
    	0x00,0x00,0x44,0x44,0x44,0x4C,0x34,0x00, // u
    	0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x00, // v
    	0x00,0x00,0x44,0x44,0x54,0x54,0x28,0x00, // w
    	0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00, // x
    	0x00,0x00,0x44,0x44,0x44,0x3C,0x04,0x38, // y
    	0x00,0x00,0x7C,0x08,0x10,0x20,0x7C,0x00, // z
    	0x10,0x20,0x20,0x40,0x20,0x20,0x10,0x00, // {
    	0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00, // |
    	0x20,0x10,0x10,0x08,0x10,0x10,0x20,0x00, // }
    	0x00,0x00,0x00,0x20,0x54,0x08,0x00,0x00, // ~
    };
    
    
    //常用ASCII表
    //偏移量32
    //ASCII字符集
    //偏移量32
    //大小:8*16
    //逐行式,顺向(高位在前)
    /****************************************8*16的点阵************************************/
    const unsigned char F8X16[]=	  
    {
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
      0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,//! 1
      0x00,0x12,0x36,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
      0x00,0x00,0x00,0x24,0x24,0x24,0xFE,0x48,0x48,0x48,0xFE,0x48,0x48,0x48,0x00,0x00,//# 3
      0x00,0x00,0x10,0x38,0x54,0x54,0x50,0x30,0x1C,0x14,0x14,0x54,0x54,0x38,0x10,0x10,//$ 4
      0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xA8,0x54,0x1A,0x2A,0x2A,0x2A,0x44,0x00,0x00,//% 5
      0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x50,0x6E,0xA4,0x94,0x88,0x89,0x76,0x00,0x00,//& 6
      0x00,0x60,0x60,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
      0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,//( 8
      0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,//) 9
      0x00,0x00,0x00,0x00,0x10,0x10,0xD6,0x38,0x38,0xD6,0x10,0x10,0x00,0x00,0x00,0x00,//* 10
      0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,0x00,//+ 11
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0xC0,//, 12
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//- 13
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,//. 14
      0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,/// 15
      0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//0 16
      0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//1 17
      0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,//2 18
      0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//3 19
      0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,//4 20
      0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//5 21
      0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//6 22
      0x00,0x00,0x00,0x7E,0x42,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,//7 23
      0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,//8 24
      0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,//9 25
      0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,//: 26
      0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x08,0x30,0x00,//; 27
      0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,//< 28
      0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,//= 29
      0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,//> 30
      0x00,0x00,0x00,0x3C,0x42,0x42,0x62,0x02,0x04,0x08,0x08,0x00,0x18,0x18,0x00,0x00,//? 31
      0x00,0x00,0x00,0x38,0x44,0x5A,0xAA,0xAA,0xAA,0xAA,0xB4,0x42,0x44,0x38,0x00,0x00,//@ 32
      0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,//A 33
      0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x44,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,//B 34
      0x00,0x00,0x00,0x3E,0x42,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x44,0x38,0x00,0x00,//C 35
      0x00,0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,//D 36
      0x00,0x00,0x00,0xFE,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x42,0x42,0xFE,0x00,0x00,//E 37
      0x00,0x00,0x00,0xFE,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x40,0x40,0xE0,0x00,0x00,//F 38
      0x00,0x00,0x00,0x3C,0x44,0x44,0x80,0x80,0x80,0x8E,0x84,0x44,0x44,0x38,0x00,0x00,//G 39
      0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//H 40
      0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//I 41
      0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,//J 42
      0x00,0x00,0x00,0xEE,0x44,0x48,0x50,0x70,0x50,0x48,0x48,0x44,0x44,0xEE,0x00,0x00,//K 43
      0x00,0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,//L 44
      0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00,//M 45
      0x00,0x00,0x00,0xC7,0x62,0x62,0x52,0x52,0x4A,0x4A,0x4A,0x46,0x46,0xE2,0x00,0x00,//N 46
      0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,//O 47
      0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,//P 48
      0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0xB2,0xCA,0x4C,0x38,0x06,0x00,//Q 49
      0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x48,0x48,0x44,0x44,0x42,0xE3,0x00,0x00,//R 50
      0x00,0x00,0x00,0x3E,0x42,0x42,0x40,0x20,0x18,0x04,0x02,0x42,0x42,0x7C,0x00,0x00,//S 51
      0x00,0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,//T 52
      0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,//U 53
      0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10,0x00,0x00,//V 54
      0x00,0x00,0x00,0xD6,0x92,0x92,0x92,0x92,0xAA,0xAA,0x6C,0x44,0x44,0x44,0x00,0x00,//W 55
      0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,//X 56
      0x00,0x00,0x00,0xEE,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,//Y 57
      0x00,0x00,0x00,0x7E,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x42,0x42,0xFC,0x00,0x00,//Z 58
      0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,//[ 59
      0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x04,0x04,0x02,0x02,0x02,0x01,0x01,//\ 60
      0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,//] 61
      0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,//_ 63
      0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00,//a 65
      0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x64,0x58,0x00,0x00,//b 66
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,//c 67
      0x00,0x00,0x00,0x06,0x02,0x02,0x02,0x1E,0x22,0x42,0x42,0x42,0x26,0x1B,0x00,0x00,//d 68
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x40,0x42,0x3C,0x00,0x00,//e 69
      0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x7E,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//f 70
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x44,0x38,0x40,0x3C,0x42,0x42,0x3C,//g 71
      0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//h 72
      0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//i 73
      0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x78,//j 74
      0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x4E,0x48,0x50,0x68,0x48,0x44,0xEE,0x00,0x00,//k 75
      0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//l 76
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x49,0x49,0x49,0x49,0x49,0xED,0x00,0x00,//m 77
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//n 78
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,//o 79
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x64,0x42,0x42,0x42,0x64,0x58,0x40,0xE0,//p 80
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x22,0x42,0x42,0x42,0x26,0x1A,0x02,0x07,//q 81
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x32,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,//r 82
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x40,0x3C,0x02,0x42,0x7C,0x00,0x00,//s 83
      0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x10,0x10,0x0C,0x00,0x00,//t 84
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x42,0x46,0x3B,0x00,0x00,//u 85
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x10,0x10,0x00,0x00,//v 86
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x92,0xAA,0xAA,0x44,0x44,0x00,0x00,//w 87
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x24,0x18,0x18,0x18,0x24,0x76,0x00,0x00,//x 88
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x18,0x10,0x10,0xE0,//y 89
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E,0x00,0x00,//z 90
      0x00,0x03,0x04,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x00,//{ 91
      0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,//| 92
      0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,//} 93
      0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x52,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
    };
    
    
    typedef struct 
    {
    	unsigned char Index[2];	
    	char Msk[32];
    }typFNT_GB16; 
    
    /*
    输出格式:C51
    数据排列:从左到右从上到下
    取模方式:横向8点左高位
    黑白取反:正常
    字体种类:[HZK1616宋体]
    强制转角:ASCII自动转全角
    */
    const typFNT_GB16 cfont16[] = 
    {
    	"系",0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
    	0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00,
    	
    	"统",0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
    	0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00,
    	
    	"设",0x00,0x00,0x21,0xF0,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0E,0xF4,0x00,0x13,0xF8,
    	0x11,0x08,0x11,0x10,0x10,0x90,0x14,0xA0,0x18,0x40,0x10,0xA0,0x03,0x18,0x0C,0x06,
    	
    	"置",0x7F,0xFC,0x44,0x44,0x7F,0xFC,0x01,0x00,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x10,0x10,
    	0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE,0x00,0x00,
    	
    	"音",0x02,0x00,0x01,0x00,0x3F,0xF8,0x00,0x00,0x08,0x20,0x04,0x40,0xFF,0xFE,0x00,0x00,
    	0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
    	
    	"量",0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE,0x00,0x00,0x1F,0xF0,
    	0x11,0x10,0x1F,0xF0,0x11,0x10,0x1F,0xF0,0x01,0x00,0x1F,0xF0,0x01,0x00,0x7F,0xFC,
    	
    	"颜",0x10,0x00,0x08,0xFE,0x7F,0x10,0x22,0x20,0x14,0x7C,0x7F,0x44,0x44,0x54,0x48,0x54,
    	0x52,0x54,0x44,0x54,0x48,0x54,0x51,0x54,0x42,0x28,0x44,0x24,0x88,0x42,0x30,0x82,
    	
    	"色",0x08,0x00,0x08,0x00,0x1F,0xE0,0x20,0x20,0x40,0x40,0xBF,0xF8,0x21,0x08,0x21,0x08,
    	0x21,0x08,0x3F,0xF8,0x20,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0x1F,0xFE,0x00,0x00,
    	
    	"网",0x00,0x00,0x7F,0xFC,0x40,0x04,0x40,0x04,0x42,0x14,0x52,0x94,0x4A,0x54,0x44,0x24,
    	0x44,0x24,0x4A,0x54,0x4A,0x54,0x52,0x94,0x61,0x04,0x40,0x04,0x40,0x14,0x40,0x08,
    	
    	"络",0x10,0x80,0x10,0x80,0x20,0xF8,0x21,0x08,0x4B,0x10,0xFC,0xA0,0x10,0x40,0x20,0xA0,
    	0x41,0x18,0xFA,0x06,0x45,0xF8,0x01,0x08,0x19,0x08,0xE1,0x08,0x41,0xF8,0x01,0x08,
    	
    	"小",0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x09,0x10,
    	0x09,0x08,0x11,0x04,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
    	
    	"星",0x00,0x08,0x3F,0xFC,0x20,0x08,0x3F,0xF8,0x20,0x08,0x3F,0xF8,0x01,0x00,0x21,0x08,
    	0x3F,0xFC,0x21,0x00,0x41,0x10,0xBF,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
    	
    	"戴",0x08,0x20,0x7F,0x28,0x08,0x24,0xFF,0xFE,0x00,0x20,0x7F,0x20,0x49,0x24,0x7F,0x24,
    	0x49,0x24,0x7F,0x28,0x22,0x28,0x7F,0x10,0x22,0x12,0xFF,0xAA,0x22,0x46,0x41,0x82,
    
    	"创",0x08,0x04,0x08,0x04,0x14,0x04,0x12,0x24,0x21,0xA4,0x20,0xA4,0x7E,0x24,0xA2,0x24,
    	0x22,0x24,0x2A,0x24,0x24,0x24,0x20,0x04,0x21,0x04,0x21,0x04,0x1F,0x14,0x00,0x08,
    
    	"昆",0x00,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,0x3F,0xF8,
    	0x00,0x80,0x20,0x84,0x24,0x98,0x3E,0xE0,0x20,0x80,0x20,0x82,0x2E,0x82,0x70,0x7E,
    };
    /
    
    
    typedef struct
    {
    	unsigned char Index[2];
    	char Msk[72];
    }typFNT_GB24;
    
    //宋体
    //24*24大小
    //逐行式,顺向(高位在前)
    const typFNT_GB24 cfont24[] = 
    {
    	"戴",0x01,0x02,0x00,0x01,0xC3,0xA0,0x01,0x9B,0x30,0x1F,0xFB,0x10,0x01,0x83,0x00,0x01,
    	0x83,0x0C,0x7F,0xFF,0xFE,0x00,0x01,0x80,0x1F,0xF9,0x80,0x19,0x99,0x90,0x1F,0xF9,
    	0x9C,0x19,0x99,0x98,0x1F,0xF9,0xB0,0x06,0x61,0xB0,0x06,0x69,0xB0,0x3F,0xFD,0xE0,
    	0x06,0x60,0xE4,0x06,0x68,0xC4,0x7F,0xFC,0xC4,0x04,0x81,0xE4,0x0E,0x63,0x34,0x18,
    	0x36,0x1C,0x30,0x04,0x0E,0x40,0x18,0x06,
    	
    	"创",0x02,0x00,0x00,0x03,0x80,0x08,0x03,0x80,0x0E,0x06,0x60,0x0C,0x06,0x31,0x0C,0x0C,
    	0x19,0xCC,0x0C,0x0D,0x8C,0x18,0x0D,0x8C,0x18,0x31,0x8C,0x2F,0xF9,0x8C,0x2C,0x31,
    	0x8C,0x4C,0x31,0x8C,0x0C,0x31,0x8C,0x0C,0x31,0x8C,0x0C,0x61,0x8C,0x0F,0xE1,0x0C,
    	0x0C,0xC8,0x0C,0x0C,0x08,0x0C,0x0C,0x08,0x0C,0x0C,0x0C,0x0C,0x0F,0xFC,0x0C,0x07,
    	0xF8,0xFC,0x00,0x00,0x38,0x00,0x00,0x10,
    
    	"昆",0x00,0x00,0x00,0x08,0x00,0x60,0x0F,0xFF,0xF0,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0C,
    	0x00,0x60,0x0F,0xFF,0xE0,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0F,0xFF,
    	0xE0,0x08,0x08,0x40,0x10,0x0E,0x10,0x1C,0x0C,0x38,0x18,0xCC,0x60,0x1F,0xED,0x80,
    	0x18,0x0E,0x04,0x18,0x0C,0x04,0x18,0x0C,0x04,0x18,0x0C,0x04,0x1F,0xCC,0x06,0x3E,
    	0x0F,0xFE,0x10,0x07,0xFC,0x00,0x00,0x00,
    };
    /
    
    
    typedef struct
    {
    	unsigned char Index[2];
    	char Msk[128];
    }typFNT_GB32;
    
    //宋体
    //32*32大小
    //逐行式,顺向(高位在前)
    const typFNT_GB32 cfont32[] = 
    {
    	"戴",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0x30,0x0E,0x80,
    0x00,0x30,0x8C,0x40,0x0F,0xFF,0xCC,0x70,0x00,0x30,0x0C,0x30,0x00,0x30,0x0C,0x30,
    0x00,0x30,0x0C,0x18,0x3F,0xFF,0xFF,0xFC,0x08,0x00,0x4C,0x00,0x0F,0xFF,0xEC,0x00,
    0x0C,0x30,0xCC,0x00,0x0C,0x30,0xCC,0x00,0x0F,0xFF,0xC4,0x38,0x0C,0x30,0xC4,0x30,
    0x0C,0x30,0xC6,0x30,0x0F,0xFF,0xC6,0x70,0x0C,0x84,0xC6,0x60,0x00,0x87,0x06,0x60,
    0x00,0x86,0x03,0xC0,0x0F,0xFF,0xC3,0xC0,0x00,0x86,0x03,0x80,0x00,0x86,0x21,0x82,
    0x3F,0xFF,0xF3,0xC4,0x00,0x88,0x0E,0xC4,0x01,0xC6,0x04,0x64,0x03,0x03,0x08,0x3C,
    0x06,0x01,0x90,0x1C,0x18,0x01,0x20,0x0C,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,/*"戴",0*/
    /* (32 X 32 , 宋体 )*/
    
    "创",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x70,0x00,0x18,
    0x00,0xE0,0x00,0x18,0x00,0xD8,0x00,0x18,0x01,0x8E,0x00,0x18,0x01,0x83,0x00,0x18,
    0x01,0x01,0x84,0x18,0x03,0x01,0xC6,0x18,0x02,0x00,0x84,0x18,0x04,0x00,0x04,0x18,
    0x0C,0x02,0x04,0x18,0x0F,0xFF,0x04,0x18,0x16,0x06,0x04,0x18,0x26,0x06,0x04,0x18,
    0x46,0x06,0x04,0x18,0x06,0x06,0x04,0x18,0x06,0x06,0x04,0x18,0x06,0x06,0x04,0x18,
    0x06,0x06,0x04,0x18,0x06,0x3C,0x04,0x18,0x06,0x18,0x04,0x18,0x06,0x00,0x40,0x18,
    0x06,0x00,0x40,0x18,0x06,0x00,0x40,0x18,0x06,0x00,0x40,0x18,0x02,0x00,0xC0,0x18,
    0x03,0xFF,0xE3,0xF8,0x03,0xFF,0xC0,0xF0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,/*"创",1*/
    /* (32 X 32 , 宋体 )*/
    
    "昆",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
    0x01,0xFF,0xFF,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
    0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
    0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0x80,0x01,0x80,0x01,0x80,
    0x00,0x00,0x40,0x00,0x03,0x00,0x70,0x00,0x03,0x00,0x60,0x20,0x03,0x00,0x60,0x70,
    0x03,0x04,0x61,0xC0,0x03,0xFE,0x63,0x00,0x03,0x00,0x7C,0x00,0x03,0x00,0x60,0x08,
    0x03,0x00,0x60,0x08,0x03,0x00,0x60,0x08,0x03,0x01,0x60,0x08,0x03,0x1E,0x60,0x0C,
    0x03,0xE0,0x77,0xFC,0x07,0x80,0x7F,0xFC,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"昆",2*/
    /* (32 X 32 , 宋体 )*/
    };
    /
    
    
    unsigned char BMP2[] =
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x7F,0xE0,0x03,0x91,0x1C,0x38,0x18,0x00,0x70,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFE,
    	0x66,0x60,0x04,0x5B,0x22,0x44,0x14,0x01,0x8C,0x01,0x7F,0xFA,0x00,0x04,0x00,0x02,
    	0x36,0xC0,0x08,0x15,0x40,0x80,0x52,0x02,0x02,0x01,0xBF,0xF6,0x00,0x3D,0xB6,0xDA,
    	0x1F,0x80,0x88,0x11,0x40,0x80,0x34,0x04,0x71,0x01,0xDF,0xEE,0x00,0x25,0xB6,0xDA,
    	0x0F,0x02,0x88,0x11,0x40,0x80,0x18,0x00,0x88,0x01,0xE0,0x1E,0x00,0x25,0xB6,0xDA,
    	0x06,0x0A,0x88,0x11,0x40,0x80,0x34,0x01,0x04,0x01,0xDF,0xEE,0x00,0x25,0xB6,0xDA,
    	0x06,0x2A,0x88,0x11,0x40,0x80,0x52,0x00,0x20,0x01,0xBF,0xF6,0x00,0x3D,0xB6,0xDA,
    	0x06,0xAA,0x84,0x51,0x22,0x44,0x14,0x00,0x70,0x01,0x7F,0xFA,0x00,0x04,0x00,0x02,
    	0x06,0xAA,0x83,0x91,0x1C,0x38,0x18,0x00,0x20,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFE,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x1F,0xFC,0x00,0x3F,0xFC,0x7F,0xF0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x07,0x3F,0xFE,0x00,0x7F,0xFC,0xFF,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x0F,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x1B,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x33,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x63,0x30,0x06,0x18,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0xC3,0x30,0x06,0x18,0x7F,0xFC,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x83,0x30,0x06,0x00,0x7F,0xFC,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x18,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x18,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x60,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x60,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x7F,0xFC,0xFF,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x1F,0xFC,0x00,0x3F,0xF8,0x7F,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0xF9,0xE3,0x0F,0x00,0xF1,0xE0,0x1E,0x3C,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x01,0x0A,0x15,0x10,0x81,0x0A,0x10,0x21,0x42,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x12,0x11,0x10,0x81,0x0A,0x00,0x21,0x40,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x22,0x11,0x1F,0x81,0x0B,0xE0,0x21,0x7C,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x42,0x11,0x10,0x81,0x0A,0x10,0x21,0x42,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x82,0x11,0x10,0x99,0x0A,0x13,0x21,0x42,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x01,0xF9,0xE7,0xCF,0x18,0xF1,0xE3,0x1E,0x3C,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	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,
    	0x41,0x1C,0x41,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x7C,0x82,
    	0x63,0x22,0x61,0x41,0x00,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x00,0xC6,0x82,0xC2,
    	0x55,0x41,0x51,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0xAA,0x80,0xA2,
    	0x49,0x7E,0x49,0x41,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,0x92,0x7C,0x92,
    	0x41,0x40,0x45,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x02,0x8A,
    	0x41,0x21,0x43,0x22,0x00,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x00,0x82,0x82,0x86,
    	0x41,0x1E,0x41,0x1C,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x7C,0x82,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    
    
    unsigned char BMP3[] =
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0xF8,0x03,0xFF,0xF8,0x03,0xC0,0xF0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x0F,0xFE,0x03,0xFF,0xF8,0x07,0xF3,0xFC,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x18,0x03,0x03,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x7F,0xC0,0x07,0xFF,0xFC,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x30,0x03,0x03,0xFF,0xF0,0x03,0xFF,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x18,0x06,0x03,0x80,0x38,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x0F,0xFC,0x03,0x00,0x18,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x0C,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x30,0x01,0x80,0x00,0x0C,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC6,0x00,0x0C,0x1E,0x38,0xCC,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x60,0x00,0xC7,0x00,0x1C,0x11,0x45,0x32,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x80,0x38,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x1F,0xFF,0x01,0xFF,0xF0,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x0F,0xFE,0x00,0x7F,0xC0,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x79,0x22,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x22,0x00,0x90,0x04,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x42,0x00,0x90,0x04,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x06,0x40,0x41,0x01,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x81,0x01,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x81,0x02,0x04,0x10,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x80,0x82,0x04,0x10,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x10,0x21,0x00,0x82,0x02,0x10,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x20,0x11,0x00,0x84,0x02,0x10,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x40,0x12,0x00,0x44,0x02,0x20,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x80,0x12,0x00,0x48,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x48,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x30,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x30,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    
    
    
    unsigned char BMP4[] =
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0x00,0x0C,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0x00,0x0F,0xC0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x00,0x1F,0xFE,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x07,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x10,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x06,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x10,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x06,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x20,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x06,0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x60,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x06,0x3F,0xFF,0xFF,0xFF,0xFF,0xF0,0xC0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x07,0x3C,0x3F,0xFF,0xF8,0x7F,0xF1,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xFF,0xFF,0xF1,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x3F,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x03,0x20,0x00,0xFF,0x00,0x07,0xF2,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0x0F,0xFF,0x7E,0xFF,0xFB,0xE7,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0x9F,0x7F,0x81,0xFD,0xFC,0x0F,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x01,0xBE,0x3F,0x9D,0xF8,0xFD,0xFF,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0xDF,0x7F,0xBC,0xFD,0xFB,0xFF,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x67,0xFE,0x7E,0x7F,0xE3,0xFF,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x38,0x01,0xFF,0x80,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x07,0xFE,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xC7,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x01,0x83,0x80,0x61,0xC0,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x0F,0x80,0xF0,0x00,0x00,0x07,0x82,0xE3,0xE1,0xB0,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x0F,0x80,0x1C,0x00,0x00,0x0C,0x6C,0x02,0x3F,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x0E,0x00,0x03,0x00,0x00,0x00,0xFE,0x00,0x3F,0x80,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x06,0x00,0xF1,0x80,0x00,0x0F,0x81,0xF7,0xC0,0x7C,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x03,0x80,0x18,0x80,0x00,0x03,0xFF,0x80,0xFF,0xE0,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x01,0xC0,0x0C,0x40,0x00,0x02,0x18,0x81,0x8C,0x60,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0xE1,0x84,0x40,0x00,0x02,0x18,0x81,0x8C,0x60,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x7F,0xC2,0x40,0x00,0x03,0xFF,0x81,0xFF,0xE0,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x3F,0xE2,0x40,0x00,0x02,0x00,0x31,0x80,0x0C,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0xFF,0xF0,0xFF,0xFC,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xC0,0x7F,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,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    
    
    //	 
    //
    //存储图片数据,图片大小为51*32像素
    //逐行式,顺向(高位在前)
    //
    /
    unsigned char BMP5[] =
    {
    	0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x0E,0x00,0x00,0x00,0x00,0x01,0x80,0x0E,0x00,0x20,0x00,0x00,0x01,0xC0,0x00,0x00,
    	0x70,0x00,0x00,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x00,0xE0,0x3F,0x81,0xC0,0x00,
    	0x00,0x00,0x61,0xFF,0xF0,0x80,0x00,0x00,0x00,0x03,0xC0,0xF8,0x00,0x00,0x00,0x00,
    	0x07,0x00,0x1C,0x00,0x00,0x00,0x00,0x1E,0x00,0x0F,0x00,0x00,0x00,0x7C,0x1C,0x00,
    	0x03,0x1F,0x80,0x00,0x7C,0x1C,0x07,0xFF,0x1F,0x80,0x00,0x7C,0x1C,0x1F,0xFF,0x9F,
    	0x80,0x00,0x00,0x1C,0x7C,0x03,0xF8,0x00,0x00,0x00,0x0F,0xF0,0x00,0x7C,0x00,0x00,
    	0x03,0xFF,0x00,0x00,0x0F,0xE0,0x00,0x0F,0xF2,0x00,0x00,0x07,0xFE,0x00,0x1F,0x80,
    	0x00,0x00,0x00,0x7F,0x80,0x3C,0x00,0x00,0x00,0x00,0x03,0x80,0x7C,0x00,0x00,0x00,
    	0x00,0x03,0xC0,0x70,0x00,0x00,0x00,0x00,0x01,0xC0,0x70,0x00,0x00,0x00,0x00,0x01,
    	0xC0,0x78,0x00,0x00,0x00,0x00,0x01,0xC0,0x7C,0x00,0x00,0x00,0x00,0x03,0xC0,0x3C,
    	0x00,0x00,0x00,0x00,0x07,0x80,0x3E,0x00,0x00,0x00,0x00,0x3F,0x80,0x0F,0xE1,0xC0,
    	0x00,0x1F,0xFC,0x00,0x03,0xFF,0xFC,0x03,0xFF,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
    	0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,
    };
    
    
    
    #endif
    
    
    

    效果

    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述

    源码

    链接:https://pan.baidu.com/s/1_zuSjLBjeIckoJaUDEGWWg?pwd=1234
    提取码:1234

    模拟SPI控制方式

    模拟SPI通信主要特点是方便移植,任意IO口输出即可。

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32F103硬件SPI控制0.96寸OLED显示屏(6针/7针)详解

    发表回复