目录

0.96寸-OLED-驱动,HAL库SPI,集合了网上所有好用的函数,测试过解决花屏问题

目录

0.96寸 OLED 驱动,HAL库+SPI,集合了网上所有好用的函数,测试过。解决花屏问题。

前了阵子想做OLED做个小东西,没想到翻车了,花了很多时间把坑填上了,现在把问题写出来。用的是SSD1306芯片的7脚SPI OLED屏。

现象:官方程序移植过来后,通电测试时,发现屏幕一直有雪花跳动,手摸DC引脚,屏幕会有部分字符显示正常,判断应该是干扰。SPI的时钟脚和数据脚加上拉电阻也无法解决。后来屏幕用另外的DEMO板加跳线到屏幕,显示正常了。

原因:PCB上覆铜问题,地线上可能有干扰,后来新板子将OLED屏幕的这些数据线周围都不覆铜了,才解决。

因为卡在这里好久,各种程序整了一堆,现将各家好用的代码集合起来,留印。

文件测试好的有oled.c oled.h oledfont.h  ,其中bmp.h的未测试。代码都是HAL库,使用的是硬件SPI

oled.h

#ifndef __OLED_H
#define __OLED_H

#include "main.h"
#include "gpio.h"
#include "stdlib.h"
#include "spi.h"

//--------------OLED 参数定义---------------------
#define PAGE_SIZE 8
#define XLevelL 0x00
#define XLevelH 0x10
#define YLevel 0xB0
#define WIDTH 128
#define HEIGHT 64
//-----------------OLED 端口定义----------------

#define OLED_RES_Clr() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin,GPIO_PIN_RESET)//RES
#define OLED_RES_Set() HAL_GPIO_WritePin(OLED_RES_GPIO_Port,OLED_RES_Pin,GPIO_PIN_SET)

#define OLED_DC_Clr() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin,GPIO_PIN_RESET)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(OLED_DC_GPIO_Port,OLED_DC_Pin,GPIO_PIN_SET)
  
#define OLED_CS_Clr() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin,GPIO_PIN_RESET)//CS
#define OLED_CS_Set() HAL_GPIO_WritePin(OLED_CS_GPIO_Port,OLED_CS_Pin,GPIO_PIN_SET)

#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据

#define uint8_t unsigned char
#define uint32_t unsigned int
#define WHICH_SPI &hspi1//根据使用的 SPI 更改

void OLED_ColorTurn(uint8_t i);
void OLED_DisplayTurn(uint8_t i);
void OLED_WR_Byte(uint8_t dat,uint8_t cmd);
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_DisPlay_On(void);
void OLED_DisPlay_Off(void);
void OLED_Refresh(void);
void OLED_Clear(uint8_t dat);
void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color);
void OLED_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2,unsigned int y2);
void OLED_DrawSquare(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2);
void OLED_DrawCircle(uint8_t x,uint8_t y,uint8_t r);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t Char_Size,uint8_t chr,uint8_t mode);
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t size1,uint8_t *chr);
void OLED_ShowNum01(uint8_t x,uint8_t y,uint8_t size1,uint32_t num,uint8_t len);
void OLED_ShowNum(uint8_t x,uint8_t y,uint8_t size1,uint32_t num,uint8_t len);
void OLED_ShowIntegerNumber(uint8_t x,uint8_t y,uint8_t Char_Size,int num);
void OLED_ShowFloatNumber(uint8_t x,uint8_t y,uint8_t Char_Size,float num);
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t hsize,uint8_t *str,uint8_t mode);
void OLED_ScrollDisplay(uint8_t num,uint8_t space);
void OLED_WR_BP(uint8_t x,uint8_t y);
void OLED_ShowPicture(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[]);
void OLED_Init(void);
#endif

oled.c

/********************************************************/
/* 2023/6/7

- STM32 7 针 0.96 OLED HAL 库显示驱动

---

- 引脚定义:
- OLED_CS OLED_RES OLED_DC OUTPUT Output push pull

---

- SPI 定义:
- Mode:Transmit only Master
- Hardware Nss Signal:Disable
- Data Size : 8Bits
- First Bit : MSB First
- CPOL : Low
- CPHA : 1 Edge

---

- 接线:
- GND ---> GND
- VCC ---> 3.3V
- DO ---> SPI_SCK
- D1 ---> SPI_MOSI
- RES ---> OLED_RES
- DC ---> OLED_DC
- CS ---> OLED_CS
- */  
  /********************************************************/
  //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)行

#include "OLED\oled.h"
#include "oledfont.h"
//#include "stdlib.h"
#include "string.h"

//uint8_t OLED_GRAM[128][8];
//数组每个 bit 存储 OLED 每个像素点的颜色值(1-亮(白色),0-灭(黑色))
//每个数组元素表示 1 列 8 个像素点,一共 128 列
static unsigned char OLED_buffer[128*8] = {0};
/*******************************************************************

- @name :void OLED_Init(void)
- @date :2023/6/7
- @function :initialise OLED SSD1306 control IC
- @parameters :None
- @retvalue :None
  ********************************************************************/
  void OLED_Init(void)
  {
  OLED_RES_Set();
  HAL_Delay(100);
  OLED_RES_Clr();
  HAL_Delay(100);
  OLED_RES_Set();
  OLED_WR_Byte(0xae,OLED_CMD);//--turn off oled panel"关闭 led 面板"
  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 设置起始地址线 Set Mapping RAM Display Start Line (0x00~0x3F)
  OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register 设置对比度控制寄存器
  OLED_WR_Byte(0xcf,OLED_CMD); // Set SEG Output Current Brightness 设置亮度控制寄存器
  OLED_WR_Byte(0xa1,OLED_CMD);//--Set SEG/Column Mapping 0xa0 左右反置 0xa1 正常
  OLED_WR_Byte(0xc8,OLED_CMD);//Set COM/Row Scan Direction 0xc0 上下反置 0xc8 正常
  OLED_WR_Byte(0xa6,OLED_CMD);//--set normal display
  OLED_WR_Byte(0xa8,OLED_CMD);//--set multiplex ratio(1 to 64)设置多路复用
  OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  OLED_WR_Byte(0xd3,OLED_CMD);//-set display offset Shift Mapping RAM Counter 设置显示的偏移映射内存计数器 (0x00~0x3F)
  OLED_WR_Byte(0x00,OLED_CMD);//-not offset 取消偏移补偿
  OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency 设置显示时钟分频比/振荡器频率
  OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec 设置分离比例,时钟设置为 100 帧/秒
  OLED_WR_Byte(0xd9,OLED_CMD);//--set pre-charge period 预充电时间
  OLED_WR_Byte(0xf1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock 预充电 15 钟及放电 1 时钟
  OLED_WR_Byte(0xda,OLED_CMD);//--set com pins hardware configurationCOM 引脚设置硬件配置
  OLED_WR_Byte(0x12,OLED_CMD);
  OLED_WR_Byte(0xdb,OLED_CMD);//--set vcomh 设置 VCOM 电平
  OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level 取消设置 VCOM 电平
  OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)设置页面寻址模式(0x00 /头/ 0x02)
  OLED_WR_Byte(0x02,OLED_CMD);//
  OLED_WR_Byte(0x8d,OLED_CMD);//--set Charge Pump enable/disable 设置电荷泵启用/禁用
  OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) 设为 0x10 失能
  OLED_WR_Byte(0xa4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)禁用整个显示
  OLED_WR_Byte(0xa6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) 禁用反显示
  OLED_WR_Byte(0xaf,OLED_CMD);//--turn on oled panel 打开 led 面板

      OLED_Clear(0);

}

//反显函数
void OLED_ColorTurn(uint8_t i)
{
if(i==0)
{
OLED_WR_Byte(0xA6,OLED_CMD);//正常显示
}
if(i==1)
{
OLED_WR_Byte(0xA7,OLED_CMD);//反色显示
}
}

//屏幕旋转 180 度
void OLED_DisplayTurn(uint8_t i)
{
if(i==0)
{
OLED_WR_Byte(0xC8,OLED_CMD);//正常显示
OLED_WR_Byte(0xA1,OLED_CMD);
}
if(i==1)
{
OLED_WR_Byte(0xC0,OLED_CMD);//反转显示
OLED_WR_Byte(0xA0,OLED_CMD);
}
}
/*******************************************************************

- @name :void OLED_WR_Byte(unsigned dat,unsigned cmd)
- @date :2023/6/7
- @function :Write a byte of content to the OLED screen
- @parameters :dat:Content to be written
  cmd:0-write command
  1-write data
- @retvalue :None
  ********************************************************************/
  void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
  {
  uint8_t * data = &dat;   
   if(cmd)
  OLED_DC_Set();
  else
  OLED_DC_Clr();
  OLED_CS_Clr();

// HAL_SPI_Transmit(WHICH_SPI,(uint8_t _)data,1,10); //需根据实际情况修改
HAL_SPI_Transmit_DMA(WHICH_SPI,(uint8_t _)data,1);
OLED_CS_Set();
OLED_DC_Set();   
}

/*******************************************************************

- @name :void OLED_Set_Pos(unsigned char x, unsigned char y)
- @date :2023/6/7
- @function :Set coordinates in the OLED screen
- @parameters :x:x coordinates
  y:y coordinates
- @retvalue :None
  ********************************************************************/
  void OLED_Set_Pos(unsigned char x, unsigned char y)
  {
  OLED_WR_Byte(0xb0+y,OLED_CMD);
  OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
  OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);
  }

/*******************************************************************

- @name :void OLED_Display_On(void)
- @date :2023/6/7
- @function :开启 OLED 显示
- @parameters :None
- @retvalue :None
  ********************************************************************/
  void OLED_DisPlay_On(void)
  {
  OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能
  OLED_WR_Byte(0x14,OLED_CMD);//开启电荷泵
  OLED_WR_Byte(0xAF,OLED_CMD);//点亮屏幕
  }

/*******************************************************************

- @name :void OLED_Display_Off(void)
- @date :2023/6/7
- @function :关闭 OLED 显示
- @parameters :None
- @retvalue :None
  ********************************************************************/  
  void OLED_DisPlay_Off(void)
  {
  OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵使能
  OLED_WR_Byte(0x10,OLED_CMD);//关闭电荷泵
  OLED_WR_Byte(0xAE,OLED_CMD);//关闭屏幕
  }

/*******************************************************************

- @name :void OLED_Display(void)
- @date :2023/6/7
- @function :更新显存到 OLED
- @parameters :None
- @retvalue :None
  ********************************************************************/  
  void OLED_Refresh(void)
  {
  uint8_t i,n;   
   for(i=0;i<PAGE_SIZE;i++)  
   {  
   OLED_WR_Byte (YLevel+i,OLED_CMD); //设置页地址(0~7)
  OLED_WR_Byte (XLevelL,OLED_CMD); //设置显示位置—列低地址
  OLED_WR_Byte (XLevelH,OLED_CMD); //设置显示位置—列高地址  
   for(n=0;n<WIDTH;n++)
  {
  OLED_WR_Byte(OLED_buffer[i*WIDTH+n],OLED_DATA);
  }
  } //更新显示
  }
  /*******************************************************************
- @name :void OLED_Clear(unsigned dat)
- @date :2023/6/7
- @function :清除屏幕显示
- @parameters :dat:0-Display full black
  1-Display full white
- @retvalue :None
  ********************************************************************/
  void OLED_Clear(uint8_t dat)  
  {  
   if(dat)
  {
  memset(OLED_buffer,0xff,sizeof(OLED_buffer));
  }
  else
  {
  memset(OLED_buffer,0,sizeof(OLED_buffer));
  }
  OLED_Refresh();//更新显示
  }

//画点函数
//void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t)
//{
// uint8_t pos,bx,temp=0;  
// // 此 OLED 的分辨率为 128*64,横坐标大于 127,纵坐标大于 63,则参数非法  
// if(x>127||y>63) return;  
// // 因为此 OLED 是按页显示,每页 8 个像素,所以/8 用于计算待显示的点在哪页中
// pos=(y)/8;  
// // 一列中有 8 个像素,所以计算一下待显示的点,在当前列中的第几个点
// bx=y%8;  
// // 移位,让 temp 的第 bx 位为 1
// temp=1<<(bx);  
// if(t)
// OLED_GRAM[x][pos]|=temp; //第 bx 位,置 1,其他位值不变
// else
// OLED_GRAM[x][pos]&=~temp; //第 bx 位,置 0,其他位值不变
//}

/*******************************************************************

- @name :void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
- @date :2023/6/7
- @function :set the value of pixel to RAM
- @parameters :x:the x coordinates of pixel
  y:the y coordinates of pixel
  color:the color value of the point
  1-white
  0-black
- @retvalue :None
  ********************************************************************/
  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);
  }
  }

/***
连线函数
入口参数:
x1:起点的 x 坐标;
y1:起点的 y 坐标;
x2:终点的 x 坐标;
y2:终点的 y 坐标;
****/
void OLED_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2,unsigned int y2)
{
unsigned int 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,1);//画点
xerr+=delta_x ;
yerr+=delta_y ;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}

//画方形;x:0~127 y:0~63
//x1,y1,左上角坐标;x2,y2,右下角坐标
void OLED_DrawSquare(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2)
{
OLED_DrawLine(x1,y1,x2,y1);
OLED_DrawLine(x1,y2,x2,y2);
OLED_DrawLine(x1,y1,x1,y2);
OLED_DrawLine(x2,y1,x2,y2);
}
//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_Set_Pixel(x + a, y - b,1);
OLED_Set_Pixel(x - a, y - b,1);
OLED_Set_Pixel(x - a, y + b,1);
OLED_Set_Pixel(x + a, y + b,1);

        OLED_Set_Pixel(x + b, y + a,1);
        OLED_Set_Pixel(x + b, y - a,1);
        OLED_Set_Pixel(x - b, y - a,1);
        OLED_Set_Pixel(x - b, y + a,1);

        a++;
        num = (a * a + b * b) - r*r;//计算画的点离圆心的距离
        if(num > 0)
        {
            b--;
            a--;
        }
    }

}
//
//
//
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//size:选择字体 12/16/24
//取模方式 逐列式
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t Char_Size,uint8_t chr,uint8_t 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;
}
}

//显示字符串
//x,y:起点坐标  
//size1:字体大小
//*chr:字符串起始地址
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t size1,uint8_t *chr)
{
while((*chr>=' ')&&(*chr<='~'))//判断是不是非法字符!
{
OLED_ShowChar(x,y,size1,*chr,1);
x+=size1/2;
if(x>128-size1) //换行
{
x=2;//x=0
y+=size1;
}
chr++;
}
}

/*****************************************************************************

- @name :uint32_t mypow(uint8_t m,uint8_t n)
- @date :2018-08-27
- @function :get the nth power of m (internal call)
- @parameters :m:the multiplier
  n:the power
- @retvalue :the nth power of m
  ******************************************************************************/
  uint32_t OLED_Pow(uint8_t m,uint8_t n)
  {
  uint32_t result=1;
  while(n--)result*=m;  
   return result;
  }

/_
描述:显示整数
输入:
x:显示的 x 起始位置
y:显示的 y 起始位置
num:要显示的数字
len :数字的位数
size1:要显示数字的大小
注意:不足位会以 0 显示
_/
void OLED_ShowNum01(uint8_t x,uint8_t y,uint8_t size1,uint32_t num,uint8_t len)
{
uint8_t t,temp;
for(t=0;t<len;t++)
{
temp=(num/OLED_Pow(10,len-t-1))%10;
if(temp==0)
{
OLED_ShowChar(x+(size1/2)*t,y,size1,'0',1);
}
else
{
OLED_ShowChar(x+(size1/2)*t,y,size1,temp+'0',1);
}
}
}

///_
//描述:显示整数
//输入:
// x:显示的 x 起始位置
// y:显示的 y 起始位置
// num:要显示的数字
// len :数字的位数
// size2:要显示数字的大小
// 注意:不足位不显示 0
//_/
void OLED_ShowNum(uint8_t x,uint8_t y,uint8_t size1,uint32_t num,uint8_t len)
{
uint8_t t,temp;
uint8_t enshow=0;
for(t=0;t<len;t++)
{
temp=(num/OLED_Pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size1/2)*t,y,size1,' ',1);
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size1/2)*t,y,size1,temp+'0',1);
}
}

/_
描述:显示整数(可显示正负数)-65535~65535
输入:
x:显示的 x 起始位置
y:显示的 y 起始位置
num:要显示的数字
Char_Size:要显示数字的大小
_/
void OLED_ShowIntegerNumber(uint8_t x,uint8_t y,uint8_t Char_Size,int num)
{
uint8_t len=0;
int buf=num;
while(buf)
{
len++;
buf/=10;
}
if(num>0)
OLED_ShowNum(x,y,Char_Size,num,len);
else
{
OLED_ShowChar(x,y,Char_Size,'-',1);
num=abs(num);
if(Char_Size==16)
OLED_ShowNum(x+8,y,Char_Size,num,len);
else
OLED_ShowNum(x+6,y,Char_Size,num,len);
}
}

/_
描述:显示浮点数(可显示正负数)-65535~65535
输入:
x:显示的 x 起始位置
y:显示的 y 起始位置
num:要显示的数字,默认小数点两位,可修改
Char_Size:要显示数字的大小
局限:目前只能显示确定范围的小数,且小数部分显示不准确
_/
void OLED_ShowFloatNumber(uint8_t x,uint8_t y,uint8_t Char_Size,float num)
{
uint8_t zheng_len=0,xiao_len=0,polarity_flag=0;
int zheng,xiao;
if(num>0)
polarity_flag=1;
else
{
polarity_flag=0;
num=-num;
}
zheng=(int)num;
xiao=((num-zheng)*100)/1; //显示小数点后两位
while(zheng) //计算整数部分位数
{
zheng_len++;
zheng/=10;
}
xiao_len=2;
zheng=(int)num; //在计算整数部分数值时,原赋值被篡改,这里重新赋值
if(polarity_flag)
{
if(Char_Size==16)
{
OLED_ShowNum01(x,y,Char_Size,zheng,zheng_len);
OLED_ShowChar(x+zheng_len*8,y,Char_Size,'.',1);
OLED_ShowNum01(x+(zheng_len+1)*8,y,Char_Size,xiao,xiao_len);
}
else
{
OLED_ShowNum01(x,y,Char_Size,zheng,zheng_len);
OLED_ShowChar(x+zheng_len*6,y,Char_Size,'.',1);
OLED_ShowNum01(x+(zheng_len+1)*6,y,Char_Size,xiao,xiao_len);
}
}
else
{
OLED_ShowChar(x,y,Char_Size,'-',1);
if(Char_Size==16)
{
OLED_ShowNum01(x+8,y,Char_Size,zheng,zheng_len);
OLED_ShowChar(x+(zheng_len+1)*8,y,Char_Size,'.',1);
OLED_ShowNum01(x+(zheng_len+2)*8,y,Char_Size,xiao,xiao_len);
}
else
{
OLED_ShowNum01(x+6,y,Char_Size,zheng,zheng_len);
OLED_ShowChar(x+(zheng_len+1)*6,y,Char_Size,'.',1);
OLED_ShowNum01(x+(zheng_len+2)*6,y,Char_Size,xiao,xiao_len);
}
}
}

/*****************************************************************************

- @name :void GUI_ShowFont16(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
- @date :2023/6/7
- @function :Display a single 16x16 Chinese character
- @parameters :x:the bebinning x coordinate of the Chinese character
  y:the bebinning y coordinate of the Chinese character
  s:the start address of the Chinese character
  mode:0-white background and black character
  1-black background and white character
- @retvalue :None
  ******************************************************************************/
  void GUI_ShowFont16(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
  {
  uint8_t i,j,k,tmp;
  uint16_t 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;
  }
  }

}

/*****************************************************************************

- @name :void GUI_ShowFont24(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
- @date :2023/6/7
- @function :Display a single 24x24 Chinese character
- @parameters :x:the bebinning x coordinate of the Chinese character
  y:the bebinning y coordinate of the Chinese character
  s:the start address of the Chinese character
  mode:0-white background and black character
  1-black background and white character
- @retvalue :None
  ******************************************************************************/
  void GUI_ShowFont24(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
  {
  uint8_t i,j,k,tmp;
  uint16_t 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;
  }
  }

}

/*****************************************************************************

- @name :void GUI_ShowFont32(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
- @date :2023/6/7
- @function :Display a single 32x32 Chinese character
- @parameters :x:the bebinning x coordinate of the Chinese character
  y:the bebinning y coordinate of the Chinese character
  s:the start address of the Chinese character
  mode:0-white background and black character
  1-black background and white character
- @retvalue :None
  ******************************************************************************/
  void GUI_ShowFont32(uint8_t x,uint8_t y,uint8_t *s,uint8_t mode)
  {
  uint8_t i,j,k,tmp;
  uint16_t 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;
  }
  }

}
/_
功能:显示汉字
x,y:起点坐标
num:汉字对应的序号
取模软件:PCtoLCD2018
取模方式:阴码,列行式,逆向
_/
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t hsize,uint8_t *str,uint8_t mode)
{
while(*str!='\0')
{
if(hsize == 16)
{
GUI_ShowFont16(x,y,str,mode);
}
else if(hsize == 24)
{
GUI_ShowFont24(x,y,str,mode);
}
else if(hsize == 32)
{
GUI_ShowFont32(x,y,str,mode);
}
else
{
return;
}
x+=hsize;
if(x>WIDTH-hsize)
{
x=0;
y+=hsize;
}
str+=2;
}
}

//num 显示汉字的个数
//space 每一遍显示的间隔
//void OLED_ScrollDisplay(uint8_t num,uint8_t space)
//{
// uint8_t i,n,t=0,m=0,r;
// while(1)
// {
// if(m==0)
// {
// OLED_ShowChinese(128,24,16,t,1); //写入一个汉字保存在 OLED_GRAM[][]数组中
// t++;
// }
// if(t==num)
// {
// for(r=0;r<16*space;r++) //显示间隔
// {
// for(i=0;i<144;i++)
// {
// for(n=0;n<8;n++)
// {
// OLED_GRAM[i-1][n]=OLED_GRAM[i][n];
// }
// }
// OLED_Refresh();
// }
// t=0;
// }
// m++;
// if(m==16){m=0;}
// for(i=0;i<144;i++) //实现左移
// {
// for(n=0;n<8;n++)
// {
// OLED_GRAM[i-1][n]=OLED_GRAM[i][n];
// }
// }
// OLED_Refresh();
// }
//}

//x0,y0:起点坐标
//x1,y1:终点坐标
//BMP[]:要写入的图片数组
///***********功能描述:显示显示 BMP 图片 128×64 起始点坐标(x,y),x 的范围 0 ~ 127,y 为页的范围 0 ~ 7*****************/
void OLED_ShowPicture(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;

if(y1%8==0) y=y1/8;  
 else y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{  
 OLED_WR_Byte(BMP[j++],OLED_DATA);
}
}
}  
//字符串显示
//void OLED_Printf(uint8_t str[])
//{
//OLED_Clear();
//OLED_ShowString(2,2,str,16); //字号:12/16/24
//OLED_Refresh();
//}

oledfont.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 时钟信号
//=========================================触摸屏接线=========================================//
//本模块不带触摸功能,所以不需要触摸屏接线
****************************************************************************************************/
/_取模软件PCtoLCD2018
设置:阴码,逐行式,顺向(高位在前)
_/
/***************************************************************************************************

- @attention
-
- THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
- DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  ****************************************************************************************************/
  #ifndef **OLEDFONT_H
  #define **OLEDFONT_H

#include "main.h"

//常用 ASCII 表
//偏移量 32
//ASCII 字符集
//偏移量 32
//大小:6*8
//逐行式,顺向(高位在前)
/************************************6*8 的点阵************************************/
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 的点阵************************************/
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;

//宋体
//16*16 大小
//阴码,逐行式,顺向(高位在前)
const typFNT_GB16 cfont16[] =
{
"楷",0x00,0x00,0x00,0x00,0x08,0x20,0x09,0x28,0x09,0x70,0x0D,0xA0,0x79,0xE4,0x09,0x1C,
0x1C,0x40,0x28,0xB0,0x49,0x58,0x09,0xE8,0x09,0x08,0x09,0xF8,0x00,0x10,0x00,0x00,/*"楷",0*/
"体",0x00,0x00,0x00,0x80,0x04,0x40,0x0C,0x40,0x08,0x40,0x10,0xF8,0x11,0xC0,0x28,0xE0,
0x49,0x50,0x0A,0x48,0x0C,0x6C,0x08,0xC0,0x10,0x40,0x00,0x40,0x00,0x00,0x00,0x00,/*"体",1*/
"测",0x00,0x00,0x00,0x00,0x00,0x04,0x17,0xC4,0x04,0x84,0x05,0x94,0x25,0xA4,0x25,0xA4,
0x15,0xA4,0x26,0x84,0x23,0x04,0x22,0xC4,0x04,0x54,0x00,0x0C,0x00,0x00,0x00,0x00,/*"测",2*/
"试",0x00,0x00,0x00,0x00,0x00,0x40,0x0C,0x58,0x00,0x48,0x00,0x40,0x00,0x60,0x78,0xC0,
0x10,0x20,0x13,0xE0,0x11,0x10,0x15,0x52,0x1F,0x8A,0x00,0x06,0x00,0x02,0x00,0x00,/*"试",3*/
};

typedef struct
{
unsigned char Index[2];
char Msk[72];
}typFNT_GB24;

//宋体
//24*24 大小
//逐行式,顺向(高位在前)
const typFNT_GB24 cfont24[] =
{
"宋",0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x08,0x0F,
0xFF,0xFC,0x10,0x00,0x08,0x30,0x10,0x10,0x30,0x18,0x00,0x00,0x18,0x00,0x00,0x18,
0x08,0x3F,0xFF,0xFC,0x00,0x3C,0x00,0x00,0x7A,0x00,0x00,0x5A,0x00,0x00,0xD9,0x00,
0x01,0x98,0x80,0x03,0x18,0xC0,0x06,0x18,0x30,0x0C,0x18,0x1E,0x10,0x18,0x08,0x60,
0x18,0x00,0x00,0x10,0x00,0x00,0x00,0x00,/*"宋",0*/
"体",0x00,0x00,0x00,0x02,0x02,0x00,0x03,0x03,0x00,0x02,0x02,0x00,0x06,0x02,0x00,0x04,
0x02,0x00,0x04,0xFF,0xFC,0x08,0x06,0x80,0x0E,0x0E,0x80,0x14,0x0A,0x80,0x14,0x0A,
0x40,0x24,0x12,0x40,0x44,0x12,0x60,0x04,0x22,0x20,0x04,0x62,0x30,0x04,0x42,0x18,
0x04,0x82,0x2C,0x05,0x7F,0xFC,0x06,0x02,0x00,0x04,0x02,0x00,0x04,0x02,0x00,0x04,
0x02,0x00,0x04,0x02,0x00,0x00,0x00,0x00,/*"体",1*/
"测",0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x09,0xFE,0x08,0x0D,0x86,0x08,0x01,
0x86,0x08,0x01,0xB6,0x68,0x41,0xB6,0x48,0x33,0xB6,0x48,0x13,0xB6,0x48,0x13,0xB6,
0x48,0x05,0xB6,0x48,0x05,0xB6,0x48,0x05,0xB6,0x48,0x09,0xA6,0x48,0x09,0xA6,0x48,
0x39,0xA4,0x48,0x19,0x60,0x08,0x18,0x58,0x08,0x18,0xC4,0x08,0x18,0x86,0x08,0x1B,
0x02,0x38,0x04,0x00,0x18,0x00,0x00,0x00,/*"测",2*/
"试",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0x01,0xF0,0x08,0x00,0x98,0x0C,
0x00,0x88,0x04,0x00,0x84,0x04,0xFF,0xFE,0x00,0x00,0x80,0x00,0x00,0x80,0x7E,0x02,
0x80,0x04,0xFF,0x80,0x04,0x08,0x80,0x04,0x08,0xC0,0x04,0x08,0x40,0x04,0x08,0x40,
0x04,0x48,0x60,0x04,0x89,0x22,0x05,0x0E,0x32,0x06,0x70,0x12,0x0E,0x40,0x1C,0x04,
0x00,0x0E,0x00,0x00,0x02,0x00,0x00,0x00,/*"试",3*/
};

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,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x03,0x80,0x0C,0x00,
0x03,0xC7,0x0C,0x00,0x00,0xC3,0x0C,0x00,0x00,0x03,0x0C,0x00,0x00,0x03,0x0F,0xC0,
0x00,0x03,0xFF,0x80,0x18,0x1F,0xEC,0x00,0x0C,0x0B,0x08,0x00,0x0E,0x03,0x08,0x00,
0x04,0x03,0x08,0x00,0x01,0x03,0x0F,0xF8,0x01,0x03,0xFF,0xF0,0x01,0x7F,0x80,0x00,
0x02,0x32,0x00,0x00,0x02,0x03,0x08,0x00,0x06,0x07,0x0E,0x00,0x0C,0x0E,0x07,0x00,
0x1C,0x0C,0x03,0x80,0x1C,0x18,0x03,0x80,0x0C,0x20,0x01,0x80,0x00,0xC0,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"洪",0*/
"云",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x03,0xFC,0x00,
0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x7F,0xE0,0x00,
0x1F,0xF6,0x00,0x00,0x0C,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0C,0x00,0x00,
0x00,0x18,0x10,0x00,0x00,0x30,0x0C,0x00,0x00,0x30,0x0E,0x00,0x00,0x60,0x3F,0x00,
0x00,0xDF,0xC3,0x80,0x01,0xFC,0x03,0x80,0x03,0xC0,0x01,0x80,0x01,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"云",1*/
};

#endif

bmp.h

#ifndef **BMP_H
#define **BMP_H

/*
取模方式
软件:Pctolcd
设置:阴码
列行式
逆向

*/
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,/********************************/
};

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,0xC0,0xE0,0xE0,0xF0,0xF8,
0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,
0xC0,0x80,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0x8E,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,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,0x0F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,
0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x63,
0x6F,0x7F,0x7F,0xBF,0xFF,0xFF,0xDF,0xEF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xBF,0xBF,
0xBF,0xBF,0x7F,0xFF,0x3F,0xF8,0xFF,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFF,0xBF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xEF,0xF7,0x7F,0x17,0x0F,
0x1B,0x30,0x30,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x60,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,0x03,0x0F,0x1F,0x3F,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFC,0x3F,0x7F,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,
0x0F,0x07,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,0x01,0x03,0x03,0x07,0x0F,0x1F,0x3F,
0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x7C,0x3F,0x3F,0x1F,0x0F,0x07,
0x03,0x03,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/_"C:\Users\Administrator\Desktop\01.bmp",0_/

};

#endif

main.c 里

//OLED 屏

#include “OLED\oled.h”

https://i-blog.csdnimg.cn/blog_migrate/2ed246a14e91e8d1a1f46caec6037156.png

当要显示图片时,需要把 OLED_Refresh();注释掉,要不图片不停闪烁

https://i-blog.csdnimg.cn/blog_migrate/e00017f0370060e033ba0b4261d0ddcc.png

https://i-blog.csdnimg.cn/blog_migrate/73518c8adcc496c955733bf3fc4079e7.png