×

ESP32------关于硬件I2C的使用:OLED 使用

zxjy辉 zxjy辉 发表于2023-07-18 11:28:32 浏览1631 评论0

抢沙发发表评论

壮观唯美的山川风景.jpeg

这个就没什么好说的


  1. 参考代码


    1. /*===========================================================================
                          这个是关于eps32 硬件I2C 的学习             
                          esp32一共有2个I2C控制器,都可设置为主机或则是从机
                          串行数据线SDA 串行时钟线SCL 都需要上拉电阻 (1k~10k)
                          频率越高,电阻越小(但不要小于1K) 
                          主要应用在1英尺(30cm)的范围内多距离通信 
                          硬件I2C0 : SDA: 19 SCL:18
                          硬件I2C1 : SDA: 26 SCL:25 
                          硬件I2C 可以配置为任意的 IO口 使用 !!!!!!!
      ============================================================================*/
      #include "I2C_Study.h"
      #define I2C0_SDA 18
      #define I2C0_SCL 19
      #define I2C1_SDA 26
      #define I2C1_SCL 25
      #define OLED_ADDRESS 0x3c
      #define OLED_CMD 0
      #define OLED_DATA 1
      
      u8 OLED_GRAM[144][8];
      
      void I2C_Init( void )
      {
       i2c_config_t my_i2c={
          .mode = I2C_MODE_MASTER,                       //设置主机模式
          .sda_io_num = I2C0_SDA,                        //设置I2C的SDA 引脚
          .sda_pullup_en = GPIO_PULLUP_ENABLE,           //上拉SDA 引脚
          .scl_io_num = I2C0_SCL,                        //设置I2C的SCL 引脚
          .scl_pullup_en = GPIO_PULLUP_ENABLE,           //上拉SCL 引脚
          .master.clk_speed = 100000,                    //设置时钟频率是1us , 主机模式下最大频率不能超过4MHz
          .clk_flags = 0,                                //可以选择时钟源,设置为0 ,时钟分配器自动选择一个满足频率和能力要求的时钟源
       };
       i2c_param_config(I2C_NUM_0,&my_i2c);              //初始化I2C0 
       //安装I2C驱动:主机模式下,从机的接收和发送缓冲区参数设置为disable
       i2c_driver_install(I2C_NUM_0,I2C_MODE_MASTER,0,0,0);
      
      }
      
      void OLED_WR_Byte(uint8_t dat, uint8_t mode)
      {
          int ret;
          uint8_t write_buf[2] = {(mode==1)?0x40:0x00, dat};
          ret = i2c_master_write_to_device(I2C_NUM_0, OLED_ADDRESS, write_buf, sizeof(write_buf),1000 / portTICK_PERIOD_MS);
          if (ret != ESP_OK)
          {
              printf("%x\r\n",ret);
          }
      }
      void OLED_Init()
      {
         
          OLED_WR_Byte(0xAE, OLED_CMD); //--display off
          OLED_WR_Byte(0x00, OLED_CMD); //---set low column address
          OLED_WR_Byte(0x10, OLED_CMD); //---set high column address
          OLED_WR_Byte(0x40, OLED_CMD); //--set start line address
          OLED_WR_Byte(0xB0, OLED_CMD); //--set page address
          OLED_WR_Byte(0x81, OLED_CMD); // contract control
          OLED_WR_Byte(0xFF, OLED_CMD); //--128
          OLED_WR_Byte(0xA1, OLED_CMD); // set segment remap
          OLED_WR_Byte(0xA6, OLED_CMD); //--normal / reverse
          OLED_WR_Byte(0xA8, OLED_CMD); //--set multiplex ratio(1 to 64)
          OLED_WR_Byte(0x3F, OLED_CMD); //--1/32 duty
          OLED_WR_Byte(0xC8, OLED_CMD); // Com scan direction
          OLED_WR_Byte(0xD3, OLED_CMD); //-set display offset
          OLED_WR_Byte(0x00, OLED_CMD); //
       
          OLED_WR_Byte(0xD5, OLED_CMD); // set osc division
          OLED_WR_Byte(0x80, OLED_CMD); //
       
          OLED_WR_Byte(0xD8, OLED_CMD); // set area color mode off
          OLED_WR_Byte(0x05, OLED_CMD); //
       
          OLED_WR_Byte(0xD9, OLED_CMD); // Set Pre-Charge Period
          OLED_WR_Byte(0xF1, OLED_CMD); //
       
          OLED_WR_Byte(0xDA, OLED_CMD); // set com pin configuartion
          OLED_WR_Byte(0x12, OLED_CMD); //
       
          OLED_WR_Byte(0xDB, OLED_CMD); // set Vcomh
          OLED_WR_Byte(0x30, OLED_CMD); //
       
          OLED_WR_Byte(0x8D, OLED_CMD); // set charge pump enable
          OLED_WR_Byte(0x14, OLED_CMD); //
       
          OLED_WR_Byte(0xAF, OLED_CMD); //--turn on oled panel
          
      
      }
      /// @brief 坐标设置
      /// @param x 列地址
      /// @param y 页地址
      void OLED_Set_Pos(unsigned char x, unsigned char y)
      {
          //设置页地址
          OLED_WR_Byte(0xb0 + y, OLED_CMD);                     //设置页的开始地址 ,一页有8行(像素点)0xb0~0xb7,表示页地址,一共有8页
          //设置列地址:将一个8位地址拆开传输,比便于设备识别这是一个地址的设置指令
          OLED_WR_Byte(((x & 0xf0) >> 4) | 0x10, OLED_CMD);     //设置高(4位) 开始列地址(就是该指令存储了一个地址的高四位) ; 取出一个列x 高四位地址,和0x10 拼接,(0x10~0x1F)表示 这个是地址指令, 并且地址的高4位在这个指令的低4位
          OLED_WR_Byte((x & 0x0f), OLED_CMD);                   //设置低(4位) 开始列地址(就是该指令存储了一个地址的低四位) ; 取出一个列x 低四位地址,和0x00 拼接,(0x00~0x0F)表示 这个是地址指令, 并且地址的低4位在这个指令的低4位
      }
      // 开启OLED显示
      void OLED_Display_On(void)
      {
          OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
          OLED_WR_Byte(0X14, OLED_CMD); // DCDC ON
          OLED_WR_Byte(0XAF, OLED_CMD); // DISPLAY ON
      }
      // 关闭OLED显示
      void OLED_Display_Off(void)
      {
          OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
          OLED_WR_Byte(0X10, OLED_CMD); // DCDC OFF
          OLED_WR_Byte(0XAE, OLED_CMD); // DISPLAY OFF
      }
      // 清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
      void OLED_Clear(void)
      {
          u8 i, n;
          for (i = 0; i < 8; i++)
          {
              OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址(0~7)
              OLED_WR_Byte(0x00, OLED_CMD);     // 设置显示位置—列低地址
              OLED_WR_Byte(0x10, OLED_CMD);     // 设置显示位置—列高地址
              for (n = 0; n < 128; n++)
                  OLED_WR_Byte(0, OLED_DATA);
          } // 更新显示
      }
      void OLED_On(void)
      {
          u8 i, n;
          for (i = 0; i < 8; i++)
          {
              OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址(0~7)
              OLED_WR_Byte(0x00, OLED_CMD);     // 设置显示位置—列低地址
              OLED_WR_Byte(0x10, OLED_CMD);     // 设置显示位置—列高地址
              for (n = 0; n < 128; n++)
                  OLED_WR_Byte(1, OLED_DATA);
          } // 更新显示
      }
      //画点 
      //x:0~127
      //y:0~63
      //t:1 填充 0,清空   
      void OLED_DrawPoint(u8 x,u8 y,u8 t)
      {
          //页寻址
          u8 i,m,n;
          i=y/8;          //计算出在第几页
          m=y%8;          //这个结果只能是:0~7        
          n=1<<m;         //决定了 1 左移 0~7 位 , 也就是具体的这个1在8位数据中的位置,所点亮的那个点的位置
          if(t){OLED_GRAM[x][i]|=n;}
          else
          {
              OLED_GRAM[x][i]=~OLED_GRAM[x][i];
              OLED_GRAM[x][i]|=n;
              OLED_GRAM[x][i]=~OLED_GRAM[x][i];
          }
          //设置显示坐标的位置
          OLED_Set_Pos(x,i);
          //写入数据
          OLED_WR_Byte(OLED_GRAM[x][i], OLED_DATA);
      }
      //画线
      //x1,y1:起点坐标
      //x2,y2:结束坐标
      void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode)
      {
          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_x;}
          if(delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 
          else distance=delta_y;
          for(t=0;t<distance+1;t++)
          {
              OLED_DrawPoint(uRow,uCol,mode);//画点
              xerr+=delta_x;
              yerr+=delta_y;
              if(xerr>distance)
              {
                  xerr-=distance;
                  uRow+=incx;
              }
              if(yerr>distance)
              {
                  yerr-=distance;
                  uCol+=incy;
              }
          }
      }
      //x,y:圆心坐标
      //r:圆的半径
      void OLED_DrawCircle(uint8_t x,uint8_t y,uint8_t r)
      {
          int a, b,num;
          a = 0;
          b = r;
          while(2 * b * b >= r * r)      
          {
              OLED_DrawPoint(x + a, y - b,1);
              OLED_DrawPoint(x - a, y - b,1);
              OLED_DrawPoint(x - a, y + b,1);
              OLED_DrawPoint(x + a, y + b,1);
       
              OLED_DrawPoint(x + b, y + a,1);
              OLED_DrawPoint(x + b, y - a,1);
              OLED_DrawPoint(x - b, y - a,1);
              OLED_DrawPoint(x - b, y + a,1);
              
              a++;
              num = (a * a + b * b) - r*r;//计算画的点离圆心的距离
              if(num > 0)
              {
                  b--;
                  a--;
              }
          }
      }
      //显示汉字
      //x: x坐标,列
      //y: y坐标,页
      //z: 字标,也就是对应的在数组中的哪一个字(所对应的字模数据)
      //sizey: 字号
      void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t z,uint8_t sizey)
      {
          uint16_t i,size1=(sizey/8+((sizey%8)?1:0))*sizey;
          for(i=0;i<size1;i++)
          {
              if(i%sizey==0) OLED_Set_Pos(x,y++);             //换行,或则说是设置起始坐标
              if(sizey==16) OLED_WR_Byte(Hzk[z][i],OLED_DATA);//16x16字号
      //      else if(sizey==xx) OLED_WR_Byte(xxx[c][i],OLED_DATA);//用户添加字号
              else return;
          }               
      }
      //显示图片
      //x,y显示坐标
      //sizex,sizey,图片长宽
      //BMP:要显示的图片
      void OLED_DrawBMP(uint8_t x,uint8_t y,uint8_t sizex, uint8_t sizey,uint8_t BMP[])
      {   
        uint16_t j=0;
          u8 i,m;
          sizey=sizey/8+((sizey%8)?1:0);
          for(i=0;i<sizey;i++)
          {
              OLED_Set_Pos(x,i+y);
          for(m=0;m<sizex;m++)
              {      
                  OLED_WR_Byte(BMP[j++],OLED_DATA);           
              }
          }
      }
      
      
      // void OLED_ScrollDisplay(u8 x1,u8 y1,u8 x2,u8 y2,int time,u8 size)
      // {
      //  /* 大致分为三个部分
      //      1.左移渐显:字从右边出来,是一个渐显的过程
      //      2.整体左移:已经显示出整体的字
      //      3.左移渐隐:字从左边消失,是一个逐渐消失的过程
      //  */
      //     u8 xPoint = x1;                                  //记录当前列坐标    
      //  u8 i = size;                                     //字号
      //  uint16_t size1=(size/8+((size%8)?1:0))*size;     //计算当前字号对应的字节数
      //     while (1)
      //  {
      //      switch (xPoint)
      //      {
      //      case x1:        //起始:左移渐显
      //          if (i<16)
      //          {
      //              for (size_t k = 0; k < i+1; k++)
      //              {
      //                  OLED_Set_Pos(xPoint-i+k,6);    //一页是8行
      //                     OLED_WR_Byte(Hzk[5][k],OLED_DATA);
      //                     OLED_Set_Pos(xPoint-i+k,7);    //一页是8行
      //                     OLED_WR_Byte(Hzk[5][16+k],OLED_DATA);
      //              }
      //              i++;
      //              vTaskDelay(200/ portTICK_PERIOD_MS);
      //          }else
      //          {
      //              if (xPoint==0)
      //              {
      //                  xPoint = x1;
      //              }else
      //              {
      //                  xPoint-=15;
      //              }   
      //          }
                  
      //          break;
      //      case x2:        //结束:左移渐隐
      //          for (size_t j = 1; j < 16; j++)
      //          {
      //                  for (size_t k = j; k <16; k++)
      //              {
      //                  OLED_Set_Pos(start-j+k,6);    //一页是8行
      //                  OLED_WR_Byte(Hzk[5][k],OLED_DATA);
      //                  OLED_Set_Pos(start-j+k,7);    //一页是8行
      //                  OLED_WR_Byte(Hzk[5][16+k],OLED_DATA);
      //              }
      //          vTaskDelay(200/ portTICK_PERIOD_MS);
      //          }
      //          if (start==0)
      //          {
      //              start =108;
      //          }
      //          break;
      //      default:        //整体左移
      //          break;
      //      }
              
      //  }
      // }
      int ik =0;
      int start = 108;
      void OLED_Left_Display()
      {
          ///实现原理:通过一竖一竖的写,然后每移动一竖,就要重写之前的数据,以此达到移动的目的
          int i=0;             //当前
          
          if (start==108)
          {
              while (i < 16)       //16号字体,像素点:16*16 = 256;是32个字节,一个字节可以表示8个像素点:32*8=256
             {
              
             for (size_t k = 0; k < i+1; k++)
             {        
                  //设置坐标
                OLED_Set_Pos(start-i+k,6);    //一页是8行
                OLED_WR_Byte(Hzk[5][k],OLED_DATA);
                OLED_Set_Pos(start-i+k,7);    //一页是8行
                OLED_WR_Byte(Hzk[5][16+k],OLED_DATA);
             }
             i++;
              vTaskDelay(200/ portTICK_PERIOD_MS);
             }
              if (start==0)
                {
                  start =108;
                  
                }else
                {
                  start-=15;
      
                }
             
          }else if (start==0)
          {
                  for (size_t j = 1; j < 16; j++)
                  {
                          for (size_t k = j; k <16; k++)
                      {
                          OLED_Set_Pos(start-j+k,6);    //一页是8行
                          OLED_WR_Byte(Hzk[5][k],OLED_DATA);
                          OLED_Set_Pos(start-j+k,7);    //一页是8行
                          OLED_WR_Byte(Hzk[5][16+k],OLED_DATA);
                      }
                  vTaskDelay(200/ portTICK_PERIOD_MS);
                  }
                  if (start==0)
                  {
                      start =108;
                  }
        
         }
          else
          {
                start--;
                //设置坐标
                OLED_Set_Pos(start,6);    //一页是8行
                OLED_ShowChinese(start,6,5,16);
               
              
                vTaskDelay(200/ portTICK_PERIOD_MS); 
      
          }
      }
      void show_picture()
      {
          // OLED_DrawBMP(0,0,128,64,BMP2);
          // vTaskDelay(500);
          // OLED_DrawBMP(108,0,18,6,BMP3);
      
          OLED_Left_Display();
      }
    2. //头文件
      #include "freertos/FreeRTOS.h"
      #include "freertos/task.h"
      #include "driver/i2c.h"
      #include "ssd1306_font.h"           //ssd1306 oled 字库
      #define u8 uint8_t
      #define u16 uint16_t
      #define u32 uint32_t
      void OLED_Init();
      void I2C_Init( void );
      
      void OLED_On(void);
      void OLED_Clear(void);
      void OLED_Display_On(void);
      void OLED_DrawCircle(uint8_t x,uint8_t y,uint8_t r);
      void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t z,uint8_t sizey);
      void OLED_DrawBMP(uint8_t x,uint8_t y,uint8_t sizex, uint8_t sizey,uint8_t BMP[]);
      void show_picture();
      void OLED_WR_Byte(uint8_t dat, uint8_t mode);
      void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode);
    3. //字体库
      static char Hzk[][32]={
      {0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00},/*"中",0*/
      {0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x75,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x00,0x40,0x20,0x0F,0x09,0x49,0x89,0x79,0x09,0x09,0x09,0x0F,0x20,0x40,0x00,0x00},/*"景",1*/
      {0x00,0xFE,0x02,0x42,0x4A,0xCA,0x4A,0x4A,0xCA,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,0x00,0xFF,0x40,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0xFF,0x00,0x00},/*"园",2*/
      {0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",3*/
      {0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"子",4*/
      {0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"技",5*/
      {0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF,0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00},/*"术",6*/
      };
      static unsigned char  BMP1[] =
      {
          0x00,0x03,0x05,0x09,0x11,0xFF,0x11,0x89,0x05,0xC3,0x00,0xE0,0x00,0xF0,0x00,0xF8,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x38,0x44,0x82,0x92,
          0x92,0x74,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xFF,0x01,0x7D,
          0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x7D,0x01,0xFF,0x00,
          0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
          0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
          0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,
          0xF3,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x01,0xF1,0x11,0x61,0x81,0x01,0x01,0x01,
          0x81,0x61,0x11,0xF1,0x01,0x01,0x01,0x01,0x41,0x41,0xF1,0x01,0x01,0x01,0x01,0x01,
          0xC1,0x21,0x11,0x11,0x11,0x11,0x21,0xC1,0x01,0x01,0x01,0x01,0x41,0x41,0xF1,0x01,
          0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x11,0x11,0x11,0x11,0x11,0xD3,0x33,
          0x03,0x03,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,
          0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x7F,0x00,0x00,0x01,0x06,0x18,0x06,
          0x01,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00,
          0x1F,0x20,0x40,0x40,0x40,0x40,0x20,0x1F,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,
          0x40,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x03,0x00,0x00,
          0x00,0x00,0xE0,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,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x06,
          0x06,0x06,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x84,0x44,0x44,0x44,
          0x84,0x04,0x04,0x04,0x84,0xC4,0x04,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,
          0x04,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x04,0x04,0x04,0x84,0x44,
          0x44,0x44,0x84,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x04,0x04,0x06,0x06,
          0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x14,0x12,0x11,0x00,0x00,0x0F,0x10,0x10,0x10,
          0x0F,0x00,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x08,0x10,0x12,0x12,0x0D,0x00,
          0x00,0x18,0x00,0x00,0x0D,0x12,0x12,0x12,0x0D,0x00,0x00,0x18,0x00,0x00,0x10,0x18,
          0x14,0x12,0x11,0x00,0x00,0x10,0x18,0x14,0x12,0x11,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,
          0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x7F,0x03,0x0C,0x30,0x0C,0x03,0x7F,0x00,0x00,0x38,0x54,0x54,0x58,0x00,0x00,
          0x7C,0x04,0x04,0x78,0x00,0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,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,0xAA,0xAA,0xAA,
          0x28,0x08,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x03,0x0C,0x30,0x0C,0x03,0x7F,
          0x00,0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,0x7F,0x02,0x04,0x08,0x10,0x7F,0x00,/********************************/
      };
      static unsigned char  BMP2[] ={
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3F,
      0x3F,0x21,0x3F,0x3F,0x3F,0x21,0x3F,0x3F,0x3F,0x21,0x3F,0x3F,0x3F,0x21,0x3F,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,
      0x10,0x18,0x18,0x18,0xF8,0xF8,0xF8,0xF8,0xE0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,
      0x80,0x78,0x78,0x18,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x18,0x18,0x18,0x18,0x18,
      0x18,0x06,0x06,0x06,0x06,0x06,0x06,0x18,0x78,0x78,0x80,0x00,0x00,0x00,0x00,0x00,
      0xC0,0x20,0x10,0x18,0x18,0x18,0x18,0x18,0xF8,0xF8,0xF8,0xE0,0xE0,0x80,0x00,0x00,
      0x00,0x00,0x00,0x00,0x18,0xE0,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,0x18,0x18,0x18,0x60,0x60,0x80,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0xF8,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x80,
      0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF8,0x00,0x00,0x00,
      0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
      0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,
      0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x80,0x60,0x60,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x18,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x1F,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x7F,0x7F,
      0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x1F,0x01,0x01,0x00,0x00,0x00,
      0x07,0x78,0x78,0x60,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x60,0x60,0x7F,0x60,0x60,
      0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x60,0x78,0x78,0x07,0x00,0x00,0x00,0x00,0x00,
      0x07,0x1F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x1F,0x07,0x07,
      0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x1E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
      0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x18,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      };
      static unsigned char  BMP3[] = {
      0x1C,0x1C,0x3E,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x3E,0x3E,0x22,0x3E,0x3E,0x3E,
      0x22,0x3E,
      };
#好好学习!

群贤毕至

访客