市面上买到的显示屏的驱动给我的感觉很乱,资料也很老,于是突发奇想自己写驱动。
我用的是四线SPI协议的1.3寸的屏幕,显示驱动是SH1106,在STM32F103C8T6单片机实现。
引脚宏定义:
/********************************* 引脚定义 **************************/
#define DC_PIN GPIO_PIN_2
#define RES_PIN GPIO_PIN_3
#define CS_PIN GPIO_PIN_4
#define SCLK_PIN GPIO_PIN_5
#define MOSI_PIN GPIO_PIN_7
#define SPI_PORT GPIOA
#define SPI_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
#define SPI_PORT_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define OLED_Cmd() HAL_GPIO_WritePin(GPIOA,DC_PIN,GPIO_PIN_RESET)
#define OLED_Data() HAL_GPIO_WritePin(GPIOA,DC_PIN,GPIO_PIN_SET)
#define OLED_RESET() HAL_GPIO_WritePin(GPIOA,RES_PIN,GPIO_PIN_RESET)
#define OLED_SET() HAL_GPIO_WritePin(GPIOA,RES_PIN,GPIO_PIN_SET)
#define OLED_Select_Screen() HAL_GPIO_WritePin(GPIOA,CS_PIN,GPIO_PIN_RESET)
#define OLED_UnSelect_Screen() HAL_GPIO_WritePin(GPIOA,CS_PIN,GPIO_PIN_SET)
一、写数据/命令
倘若用的硬件SPI,那么需要初始化硬件以c8t6为例:
SPI_HandleTypeDef SPI1_Handle;
void SPI_OLED::SPI_Init()
{
SPI1_Handle.Instance = SPI1;
SPI1_Handle.Init.Mode = SPI_MODE_MASTER;
SPI1_Handle.Init.Direction = SPI_DIRECTION_2LINES;
SPI1_Handle.Init.DataSize = SPI_DATASIZE_8BIT;
SPI1_Handle.Init.CLKPolarity = SPI_POLARITY_LOW;
SPI1_Handle.Init.CLKPhase = SPI_PHASE_1EDGE;
SPI1_Handle.Init.NSS = SPI_NSS_SOFT;
SPI1_Handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
SPI1_Handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SPI1_Handle.Init.TIMode = SPI_TIMODE_DISABLE;
SPI1_Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SPI1_Handle.Init.CRCPolynomial = 1;
HAL_SPI_Init(&SPI1_Handle);
__HAL_SPI_ENABLE(&SPI1_Handle);
}
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
if(hspi -> Instance == SPI1)
{
SPI_PORT_CLK_ENABLE();
SPI_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = SCLK_PIN | MOSI_PIN;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SPI_PORT,&GPIO_InitStruct);
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pin = DC_PIN | RES_PIN | CS_PIN;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(SPI_PORT,&GPIO_InitStruct);
}
}
重要的的是写数据/命令的接口:
void SPI_OLED::OLED_WriteCommand(uint8_t cmd)
{
OLED_Cmd();
HAL_SPI_Transmit(&SPI1_Handle,&cmd,1,10);
}
void SPI_OLED::OLED_WriteData(uint8_t* data,uint8_t DataSize)
{
OLED_Data();
HAL_SPI_Transmit(&SPI1_Handle,data,DataSize,1000);
}
在移植的时候也是修改这两个函数。
二、OLED的初始化
void SPI_OLED::SPI_OLED_Init()
{
SPI_Init();
OLED_RESET();
HAL_Delay(100);
OLED_SET();
OLED_WriteCommand(0xAE); //设置显示开启/关闭,0xAE关闭,0xAF开启
OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率
OLED_WriteCommand(0x80); //0x00~0xFF
OLED_WriteCommand(0xA8); //设置多路复用率
OLED_WriteCommand(0x3F); //0x0E~0x3F
OLED_WriteCommand(0xD3); //设置显示偏移
OLED_WriteCommand(0x00); //0x00~0x7F
OLED_WriteCommand(0x40); //设置显示开始行,0x40~0x7F
OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常,0xA0左右反置
OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常,0xC0上下反置
OLED_WriteCommand(0xDA); //设置COM引脚硬件配置
OLED_WriteCommand(0x12);
OLED_WriteCommand(0x81); //设置对比度
OLED_WriteCommand(0xFF); //0x00~0xFF
OLED_WriteCommand(0xD9); //设置预充电周期
OLED_WriteCommand(0xF1);
OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别
OLED_WriteCommand(0x30);
OLED_WriteCommand(0xA4); //设置整个显示打开/关闭
OLED_WriteCommand(0x33);
OLED_WriteCommand(0xA6); //设置正常/反色显示,0xA6正常,0xA7反色
OLED_WriteCommand(0x8D); //设置充电泵
OLED_WriteCommand(0x14);
OLED_WriteCommand(0xAF); //开启显示
SPI_OLED_Clear();
}
我用的这款屏幕在上电后需要进行一次硬件复位,然后才能进行屏幕的配置(配置命令官方手册里有,倘若没有,就去商家给的源码里面复制)。
因为初始化之后屏幕显存里都是随机的,所以需要清屏。
三、设置开始显示的坐标
void SPI_OLED::SPI_OLED_SetPos(uint8_t x,uint8_t y)
{
OLED_WriteCommand(0x0F & x);
OLED_WriteCommand(((0xF0 & x) >> 4) | 0x10);
OLED_WriteCommand(0xB0 | y);
}
主要是这两个命令用来设置列开始坐标,第一个是第四位,第二个是高四位。
这条指令用来设置起始行(页数),在128x64的显示屏里,从上到下被分为8页,每页从上到下(上边为数据的地位,下边为数据的高位)占据一个字节。从左到右就没这种分法。
按照规则设置坐标即可。
四、清屏函数/缓存更新函数
为了提高显示效率,增加显示器的可玩性,这里我们定义了一个大小为 8 x 128的缓存区。对屏幕的操作就是对缓存区的操作,最后使用自己定义的缓存更新函数将数据更新到屏幕。
void SPI_OLED::SPI_OLED_Clear()
{
for(uint8_t i = 0;i < 8;i++)
{
for(uint8_t j = 0;j < 128;j++)
{
Screen_Buffer[i][j] = 0;
}
}
}
void SPI_OLED::SPI_OLED_UPDate()
{
for(uint8_t i = 0;i < 8;i++)
{
SPI_OLED_SetPos(2,i);
OLED_WriteData(Screen_Buffer[i],128);
}
}
因为屏幕本身的问题,在设置坐标的时候如果是(0,0),会出现屏幕左侧出现白边(实际是从(0,0)的左侧开始显示),这时就需要向左偏移一定量的像素。在这里是偏移两个像素。注意:像素的偏移的操作会在很多屏幕驱动上出现,大家以后遇到也不必感到疑惑。
五、字符显示函数
void SPI_OLED::SPI_OLED_ShowChar(uint8_t x,uint8_t y,const char ch,FrontSize Size)
{
uint8_t pos = y / 8;
uint8_t posy = y % 8;
if(Size == FrontSize_F6x8)
{
for(uint8_t i = 0;i < 6;i++)
{
//字体上半部分
Screen_Buffer[pos][x + i] |= OLED_F6x8[ch - 32][i] << posy;
//字体下半部分
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= OLED_F6x8[ch - 32][i] >> (8 - posy);
}
}
}
else
{
for(uint8_t i = 0;i < 8;i++)
{
//字体上半部分
Screen_Buffer[pos][x + i] |= OLED_F8x16[ch - 32][i] << posy;
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= OLED_F8x16[ch - 32][i] >> (8 - posy);
}
//字体下半部分
Screen_Buffer[pos + 1][x + i] |= OLED_F8x16[ch - 32][i + 8] << posy;
if((pos + 2) < 8)
{
Screen_Buffer[pos + 2][x + i] |= OLED_F8x16[ch - 32][i + 8] >> (8 - posy);
}
}
}
}
因为我不想在每一页单独显示(单独显示的话就不能跨行显示,且Y轴坐标也有限制,即不能在指定的随意的坐标显示)。因为我有两种字体,所以随便拿出一个判断条件里面的显示逻辑来讲解,以第一个为例:
for(uint8_t i = 0;i < 6;i++)
{
//字体上半部分
Screen_Buffer[pos][x + i] |= OLED_F6x8[ch - 32][i] << posy;
//字体下半部分
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= OLED_F6x8[ch - 32][i] >> (8 - posy);
}
}
在显示的时候主要是控制Y轴的数据。这里以一个字节为例:
pos的作用是计算出当前需要在哪个页上边写数据,posy的作用是判断当前写入的Y轴坐标是否为每页的开头,如果当前用户输入的坐标在每页的开头。例如(0,0),(8,0)那么就不需要跨页写入。
比如:
这是一个跨越Y轴0 - 9坐标像素的一个三角形拿它的中心线来说(显示坐标的Y轴是2),这个数据就是11111100,由图可知已经是跨行写入。那么就要分为两部分来写入,及代码中的上下两部分,由计算不难看出,pos = 0,posy = 2。观察可以得到posy 为第二页中需要写入的数据数量,那么不难想出:将11111100向左移posy(2)个位,得到11110000,那么即可打印出第一页中心线的上半部分,在下一页要想打印出中心线的下半部分,那么就需要把剩下的数据通过位操作,将剩下的数据放在8、9像素(即剩下的数据放到低posy位),剩下的数据是11111100的高两位,所以需要把11111100右移6位即 8 - posy 位;
另外,有人担心当posy = 0时,代码:
Screen_Buffer[pos + 1][x + i] |= OLED_F6x8[ch - 32][i] >> (8 - posy);
中的“OLED_F6x8[ch - 32][i] >> (8 - posy);”是否会影响下一页,不必担心,当posy = 0时,缓存区的数据或上的是数据向右移8位后的数据(假设11111111右移8位,最后得到的数据是00000000),不会影响下一页的其他位,相反,当posy = 0时,pos正好在页的第一位,刚好能打印出完整的一页(8个像素)。
以上代码是图形像素小于等于8的情况下,当大于8的时候需要写入下一行数据,就要考虑跨多行写入。其本质也和上述原理一样,只不过是连续写入多次罢了(这里的posy计算出来就恒定了,相当于每一页数据的偏移量),如果你能完成上述代码,那就可以尝试写画图函数。
六、字符串显示函数
void SPI_OLED::SPI_OLED_ShowString(uint8_t x,uint8_t y,const char* ch,FrontSize Size)
{
while(*ch != '\0')
{
SPI_OLED_ShowChar(x,y,*ch,Size);
Size == FrontSize_F6x8 ? x += 7 : x += 9;
++ch;
}
复用字符显示函数。
七,显示数字/小数
void SPI_OLED::SPI_OLED_ShowNum(uint8_t x,uint8_t y,int num,FrontSize Size)
{
char buff[13];
sprintf(buff,"%d",num);
SPI_OLED_ShowString(x,y,buff,Size);
}
void SPI_OLED::SPI_OLED_ShowDecimals(uint8_t x,uint8_t y,double num,FrontSize Size)
{
char buff[16];
sprintf(buff,"%lf",num);
SPI_OLED_ShowString(x,y,buff,Size);
}
复用字符串显示函数。
八、画图函数
void SPI_OLED::SPI_OLED_DrawImage(uint8_t x,uint8_t y,uint8_t height,uint8_t width,const uint8_t* image)
{
uint8_t pos = y / 8;
uint8_t posy = y % 8;
uint16_t Pwrite = 0;//与数组元素个数有关,范围应该大于等于屏幕的最大元素个数 128 x 8 = 1024 个
uint8_t writecount = height / 8;
if(height % 8)
{
writecount++;
}
while(writecount--)
{
for(uint8_t i = 0;i < width;i++)
{
Screen_Buffer[pos][x + i] |= image[Pwrite + i] << posy;
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= image[Pwrite + i] >> (8 - posy);
}
}
Pwrite += width;
pos++;
}
}
原理同字符串显示函数,不过是重复打印上半部分和下半部分的代码罢了。
九、测试
#include "stm32f1xx_hal.h"
#include "SPI_OLED.h"
void SystemClock_Config(void);
void User_LED();
int main()
{
HAL_Init();
SystemClock_Config();
User_LED();
SPI_OLED OLED;
OLED.SPI_OLED_DrawImage(0,0,64,128,SnowMan);
OLED.SPI_OLED_UPDate();
while(1)
{
}
}
源码:
函数头文件:
#ifndef __SPI_OLED
#define __SPI_OLED
/********************************* 头文件声明 **************************/
#include "stm32f1xx_hal.h"
#include "OLED_Data.h"
#include <stdio.h>
/********************************* 引脚定义 **************************/
#define DC_PIN GPIO_PIN_2
#define RES_PIN GPIO_PIN_3
#define CS_PIN GPIO_PIN_4
#define SCLK_PIN GPIO_PIN_5
#define MOSI_PIN GPIO_PIN_7
#define SPI_PORT GPIOA
#define SPI_CLK_ENABLE() __HAL_RCC_SPI1_CLK_ENABLE()
#define SPI_PORT_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define OLED_Cmd() HAL_GPIO_WritePin(GPIOA,DC_PIN,GPIO_PIN_RESET)
#define OLED_Data() HAL_GPIO_WritePin(GPIOA,DC_PIN,GPIO_PIN_SET)
#define OLED_RESET() HAL_GPIO_WritePin(GPIOA,RES_PIN,GPIO_PIN_RESET)
#define OLED_SET() HAL_GPIO_WritePin(GPIOA,RES_PIN,GPIO_PIN_SET)
#define OLED_Select_Screen() HAL_GPIO_WritePin(GPIOA,CS_PIN,GPIO_PIN_RESET)
#define OLED_UnSelect_Screen() HAL_GPIO_WritePin(GPIOA,CS_PIN,GPIO_PIN_SET)
enum FrontSize
{
FrontSize_F6x8 = 1,
FrontSize_F8x16
};
/**************************************************&& 屏幕类定义 &&******************************************************************************/
class SPI_OLED
{
public:
SPI_OLED()
{
OLED_Select_Screen();
SPI_OLED_Init();
}
/******************************** 更新屏幕操作 ****************************************************/
//清屏
void SPI_OLED_Clear();
//更新数据到显示器
void SPI_OLED_UPDate();
public:
/******************************** 字符函数 ****************************************************/
//显示一个字符
void SPI_OLED_ShowChar(uint8_t x,uint8_t y,const char ch,FrontSize Size = FrontSize_F6x8);
//显示字符串
void SPI_OLED_ShowString(uint8_t x,uint8_t y,const char* ch,FrontSize Size = FrontSize_F6x8);
//显示数字
void SPI_OLED_ShowNum(uint8_t x,uint8_t y,int num,FrontSize Size = FrontSize_F6x8);
//显示小数
void SPI_OLED_ShowDecimals(uint8_t x,uint8_t y,double num,FrontSize Size = FrontSize_F6x8);
public:
/******************************** 字图像函数 ****************************************************/
//画点
void SPI_OLED_DrawPoint(uint8_t x,uint8_t y);
//画图
void SPI_OLED_DrawImage(uint8_t x,uint8_t y,uint8_t height,uint8_t width,const uint8_t* image);
private:
/******************************** 用户不可见的功能函数 ****************************************************/
void OLED_WriteCommand(uint8_t cmd);
void OLED_WriteData(uint8_t* data,uint8_t DataSize);
void SPI_Init();
void SPI_OLED_Init();
void SPI_OLED_SetPos(uint8_t x,uint8_t y);
private:
/******************************** 屏幕显存 ****************************************************/
uint8_t Screen_Buffer[8][128];
};
#endif
函数源文件:
#include "SPI_OLED.h"
SPI_HandleTypeDef SPI1_Handle;
void SPI_OLED::SPI_Init()
{
SPI1_Handle.Instance = SPI1;
SPI1_Handle.Init.Mode = SPI_MODE_MASTER;
SPI1_Handle.Init.Direction = SPI_DIRECTION_2LINES;
SPI1_Handle.Init.DataSize = SPI_DATASIZE_8BIT;
SPI1_Handle.Init.CLKPolarity = SPI_POLARITY_LOW;
SPI1_Handle.Init.CLKPhase = SPI_PHASE_1EDGE;
SPI1_Handle.Init.NSS = SPI_NSS_SOFT;
SPI1_Handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
SPI1_Handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SPI1_Handle.Init.TIMode = SPI_TIMODE_DISABLE;
SPI1_Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SPI1_Handle.Init.CRCPolynomial = 1;
HAL_SPI_Init(&SPI1_Handle);
__HAL_SPI_ENABLE(&SPI1_Handle);
}
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
if(hspi -> Instance == SPI1)
{
SPI_PORT_CLK_ENABLE();
SPI_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pin = SCLK_PIN | MOSI_PIN;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(SPI_PORT,&GPIO_InitStruct);
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pin = DC_PIN | RES_PIN | CS_PIN;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(SPI_PORT,&GPIO_InitStruct);
}
}
void SPI_OLED::OLED_WriteCommand(uint8_t cmd)
{
OLED_Cmd();
HAL_SPI_Transmit(&SPI1_Handle,&cmd,1,10);
}
void SPI_OLED::OLED_WriteData(uint8_t* data,uint8_t DataSize)
{
OLED_Data();
HAL_SPI_Transmit(&SPI1_Handle,data,DataSize,1000);
}
void SPI_OLED::SPI_OLED_Init()
{
SPI_Init();
OLED_RESET();
HAL_Delay(100);
OLED_SET();
OLED_WriteCommand(0xAE); //设置显示开启/关闭,0xAE关闭,0xAF开启
OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率
OLED_WriteCommand(0x80); //0x00~0xFF
OLED_WriteCommand(0xA8); //设置多路复用率
OLED_WriteCommand(0x3F); //0x0E~0x3F
OLED_WriteCommand(0xD3); //设置显示偏移
OLED_WriteCommand(0x00); //0x00~0x7F
OLED_WriteCommand(0x40); //设置显示开始行,0x40~0x7F
OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常,0xA0左右反置
OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常,0xC0上下反置
OLED_WriteCommand(0xDA); //设置COM引脚硬件配置
OLED_WriteCommand(0x12);
OLED_WriteCommand(0x81); //设置对比度
OLED_WriteCommand(0xFF); //0x00~0xFF
OLED_WriteCommand(0xD9); //设置预充电周期
OLED_WriteCommand(0xF1);
OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别
OLED_WriteCommand(0x30);
OLED_WriteCommand(0xA4); //设置整个显示打开/关闭
OLED_WriteCommand(0x33);
OLED_WriteCommand(0xA6); //设置正常/反色显示,0xA6正常,0xA7反色
OLED_WriteCommand(0x8D); //设置充电泵
OLED_WriteCommand(0x14);
OLED_WriteCommand(0xAF); //开启显示
SPI_OLED_Clear();
}
void SPI_OLED::SPI_OLED_SetPos(uint8_t x,uint8_t y)
{
OLED_WriteCommand(0x0F & x);
OLED_WriteCommand(((0xF0 & x) >> 4) | 0x10);
OLED_WriteCommand(0xB0 | y);
}
void SPI_OLED::SPI_OLED_Clear()
{
for(uint8_t i = 0;i < 8;i++)
{
for(uint8_t j = 0;j < 128;j++)
{
Screen_Buffer[i][j] = 0;
}
}
}
void SPI_OLED::SPI_OLED_UPDate()
{
for(uint8_t i = 0;i < 8;i++)
{
SPI_OLED_SetPos(2,i);
OLED_WriteData(Screen_Buffer[i],128);
}
}
void SPI_OLED::SPI_OLED_ShowChar(uint8_t x,uint8_t y,const char ch,FrontSize Size)
{
uint8_t pos = y / 8;
uint8_t posy = y % 8;
if(Size == FrontSize_F6x8)
{
for(uint8_t i = 0;i < 6;i++)
{
//字体上半部分
Screen_Buffer[pos][x + i] |= OLED_F6x8[ch - 32][i] << posy;
//字体下半部分
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= OLED_F6x8[ch - 32][i] >> (8 - posy);
}
}
}
else
{
for(uint8_t i = 0;i < 8;i++)
{
//字体上半部分
Screen_Buffer[pos][x + i] |= OLED_F8x16[ch - 32][i] << posy;
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= OLED_F8x16[ch - 32][i] >> (8 - posy);
}
//字体下半部分
Screen_Buffer[pos + 1][x + i] |= OLED_F8x16[ch - 32][i + 8] << posy;
if((pos + 2) < 8)
{
Screen_Buffer[pos + 2][x + i] |= OLED_F8x16[ch - 32][i + 8] >> (8 - posy);
}
}
}
}
void SPI_OLED::SPI_OLED_ShowString(uint8_t x,uint8_t y,const char* ch,FrontSize Size)
{
while(*ch != '\0')
{
SPI_OLED_ShowChar(x,y,*ch,Size);
Size == FrontSize_F6x8 ? x += 7 : x += 9;
++ch;
}
}
void SPI_OLED::SPI_OLED_ShowNum(uint8_t x,uint8_t y,int num,FrontSize Size)
{
char buff[13];
sprintf(buff,"%d",num);
SPI_OLED_ShowString(x,y,buff,Size);
}
void SPI_OLED::SPI_OLED_ShowDecimals(uint8_t x,uint8_t y,double num,FrontSize Size)
{
char buff[16];
sprintf(buff,"%lf",num);
SPI_OLED_ShowString(x,y,buff,Size);
}
void SPI_OLED::SPI_OLED_DrawPoint(uint8_t x,uint8_t y)
{
Screen_Buffer[y / 8][x] |= 0x01 << (y % 8);
Screen_Buffer[y / 8 + 1][x] |= 0x01 >> (8 - (y % 8));
}
void SPI_OLED::SPI_OLED_DrawImage(uint8_t x,uint8_t y,uint8_t height,uint8_t width,const uint8_t* image)
{
uint8_t pos = y / 8;
uint8_t posy = y % 8;
uint16_t Pwrite = 0;//与数组元素个数有关,范围应该大于等于屏幕的最大元素个数 128 x 8 = 1024 个
uint8_t writecount = height / 8;
if(height % 8)
{
writecount++;
}
while(writecount--)
{
for(uint8_t i = 0;i < width;i++)
{
Screen_Buffer[pos][x + i] |= image[Pwrite + i] << posy;
if((pos + 1) < 8)
{
Screen_Buffer[pos + 1][x + i] |= image[Pwrite + i] >> (8 - posy);
}
}
Pwrite += width;
pos++;
}
}
字库头文件:
#ifndef __OLED_DATA_H
#define __OLED_DATA_H
#include <stdint.h>
/*ASCII字模数据声明*/
extern const uint8_t OLED_F8x16[][16];
extern const uint8_t OLED_F6x8[][6];
/*图像数据声明*/
extern const uint8_t SnowMan[];
extern const uint8_t Cat[];
#endif
字库源文件
#include "OLED_Data.h"
/*宽8像素,高16像素*/
const uint8_t OLED_F8x16[][16] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,// ! 1
0x00,0x16,0x0E,0x00,0x16,0x0E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// " 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,
0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,// # 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,
0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,// $ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,
0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,// % 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,
0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,// & 6
0x00,0x00,0x00,0x16,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,// ( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,// ) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,// * 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,// + 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,// , 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,// - 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,// . 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,
0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,// / 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,// 0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// 1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,// 2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,// 3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,// 4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,// 5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,// 6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,// 7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,// 8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,// 9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,// : 26
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,// ; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,
0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,// < 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,// = 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,// > 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,
0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,// ? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,
0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,// @ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,
0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,// A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,
0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,// B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,
0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,// C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,
0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,// D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,// E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,// F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,// G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,// H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,// J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,
0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,// K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,
0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,// L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,
0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,// M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,
0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,// N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,// O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,
0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,// P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,// Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,
0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,// R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,
0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,// S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,
0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,// V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,
0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,// W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,// X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,
0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,
0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,// Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,// [ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,// \ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,// ] 61
0x00,0x20,0x10,0x08,0x04,0x08,0x10,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,// _ 63
0x00,0x02,0x04,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,// a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,
0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,// b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,// c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,
0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,// d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,// e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,// g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,
0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,// h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,
0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,// j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,
0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,// k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,// l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,// m 77
0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,
0x00,0x20,0x3F,0x21,0x00,0x20,0x3F,0x20,// n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,// o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,
0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,// p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,// q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,// r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,// s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,// t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,// u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,// v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,
0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,// w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,// x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,// y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,// z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,
0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,// { 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,// | 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,
0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,// } 93
0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,// ~ 94
};
/*宽6像素,高8像素*/
const uint8_t OLED_F6x8[][6] =
{
0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0x2F,0x00,0x00,// ! 1
0x00,0x00,0x07,0x00,0x07,0x00,// " 2
0x00,0x14,0x7F,0x14,0x7F,0x14,// # 3
0x00,0x24,0x2A,0x7F,0x2A,0x12,// $ 4
0x00,0x23,0x13,0x08,0x64,0x62,// % 5
0x00,0x36,0x49,0x55,0x22,0x50,// & 6
0x00,0x00,0x00,0x07,0x00,0x00,// ' 7
0x00,0x00,0x1C,0x22,0x41,0x00,// ( 8
0x00,0x00,0x41,0x22,0x1C,0x00,// ) 9
0x00,0x14,0x08,0x3E,0x08,0x14,// * 10
0x00,0x08,0x08,0x3E,0x08,0x08,// + 11
0x00,0x00,0x00,0xA0,0x60,0x00,// , 12
0x00,0x08,0x08,0x08,0x08,0x08,// - 13
0x00,0x00,0x60,0x60,0x00,0x00,// . 14
0x00,0x20,0x10,0x08,0x04,0x02,// / 15
0x00,0x3E,0x51,0x49,0x45,0x3E,// 0 16
0x00,0x00,0x42,0x7F,0x40,0x00,// 1 17
0x00,0x42,0x61,0x51,0x49,0x46,// 2 18
0x00,0x21,0x41,0x45,0x4B,0x31,// 3 19
0x00,0x18,0x14,0x12,0x7F,0x10,// 4 20
0x00,0x27,0x45,0x45,0x45,0x39,// 5 21
0x00,0x3C,0x4A,0x49,0x49,0x30,// 6 22
0x00,0x01,0x71,0x09,0x05,0x03,// 7 23
0x00,0x36,0x49,0x49,0x49,0x36,// 8 24
0x00,0x06,0x49,0x49,0x29,0x1E,// 9 25
0x00,0x00,0x36,0x36,0x00,0x00,// : 26
0x00,0x00,0x56,0x36,0x00,0x00,// ; 27
0x00,0x08,0x14,0x22,0x41,0x00,// < 28
0x00,0x14,0x14,0x14,0x14,0x14,// = 29
0x00,0x00,0x41,0x22,0x14,0x08,// > 30
0x00,0x02,0x01,0x51,0x09,0x06,// ? 31
0x00,0x3E,0x49,0x55,0x59,0x2E,// @ 32
0x00,0x7C,0x12,0x11,0x12,0x7C,// A 33
0x00,0x7F,0x49,0x49,0x49,0x36,// B 34
0x00,0x3E,0x41,0x41,0x41,0x22,// C 35
0x00,0x7F,0x41,0x41,0x22,0x1C,// D 36
0x00,0x7F,0x49,0x49,0x49,0x41,// E 37
0x00,0x7F,0x09,0x09,0x09,0x01,// F 38
0x00,0x3E,0x41,0x49,0x49,0x7A,// G 39
0x00,0x7F,0x08,0x08,0x08,0x7F,// H 40
0x00,0x00,0x41,0x7F,0x41,0x00,// I 41
0x00,0x20,0x40,0x41,0x3F,0x01,// J 42
0x00,0x7F,0x08,0x14,0x22,0x41,// K 43
0x00,0x7F,0x40,0x40,0x40,0x40,// L 44
0x00,0x7F,0x02,0x0C,0x02,0x7F,// M 45
0x00,0x7F,0x04,0x08,0x10,0x7F,// N 46
0x00,0x3E,0x41,0x41,0x41,0x3E,// O 47
0x00,0x7F,0x09,0x09,0x09,0x06,// P 48
0x00,0x3E,0x41,0x51,0x21,0x5E,// Q 49
0x00,0x7F,0x09,0x19,0x29,0x46,// R 50
0x00,0x46,0x49,0x49,0x49,0x31,// S 51
0x00,0x01,0x01,0x7F,0x01,0x01,// T 52
0x00,0x3F,0x40,0x40,0x40,0x3F,// U 53
0x00,0x1F,0x20,0x40,0x20,0x1F,// V 54
0x00,0x3F,0x40,0x38,0x40,0x3F,// W 55
0x00,0x63,0x14,0x08,0x14,0x63,// X 56
0x00,0x07,0x08,0x70,0x08,0x07,// Y 57
0x00,0x61,0x51,0x49,0x45,0x43,// Z 58
0x00,0x00,0x7F,0x41,0x41,0x00,// [ 59
0x00,0x02,0x04,0x08,0x10,0x20,// \ 60
0x00,0x00,0x41,0x41,0x7F,0x00,// ] 61
0x00,0x04,0x02,0x01,0x02,0x04,// ^ 62
0x00,0x40,0x40,0x40,0x40,0x40,// _ 63
0x00,0x00,0x01,0x02,0x04,0x00,// ` 64
0x00,0x20,0x54,0x54,0x54,0x78,// a 65
0x00,0x7F,0x48,0x44,0x44,0x38,// b 66
0x00,0x38,0x44,0x44,0x44,0x20,// c 67
0x00,0x38,0x44,0x44,0x48,0x7F,// d 68
0x00,0x38,0x54,0x54,0x54,0x18,// e 69
0x00,0x08,0x7E,0x09,0x01,0x02,// f 70
0x00,0x18,0xA4,0xA4,0xA4,0x7C,// g 71
0x00,0x7F,0x08,0x04,0x04,0x78,// h 72
0x00,0x00,0x44,0x7D,0x40,0x00,// i 73
0x00,0x40,0x80,0x84,0x7D,0x00,// j 74
0x00,0x7F,0x10,0x28,0x44,0x00,// k 75
0x00,0x00,0x41,0x7F,0x40,0x00,// l 76
0x00,0x7C,0x04,0x18,0x04,0x78,// m 77
0x00,0x7C,0x08,0x04,0x04,0x78,// n 78
0x00,0x38,0x44,0x44,0x44,0x38,// o 79
0x00,0xFC,0x24,0x24,0x24,0x18,// p 80
0x00,0x18,0x24,0x24,0x18,0xFC,// q 81
0x00,0x7C,0x08,0x04,0x04,0x08,// r 82
0x00,0x48,0x54,0x54,0x54,0x20,// s 83
0x00,0x04,0x3F,0x44,0x40,0x20,// t 84
0x00,0x3C,0x40,0x40,0x20,0x7C,// u 85
0x00,0x1C,0x20,0x40,0x20,0x1C,// v 86
0x00,0x3C,0x40,0x30,0x40,0x3C,// w 87
0x00,0x44,0x28,0x10,0x28,0x44,// x 88
0x00,0x1C,0xA0,0xA0,0xA0,0x7C,// y 89
0x00,0x44,0x64,0x54,0x4C,0x44,// z 90
0x00,0x00,0x08,0x7F,0x41,0x00,// { 91
0x00,0x00,0x00,0x7F,0x00,0x00,// | 92
0x00,0x00,0x41,0x7F,0x08,0x00,// } 93
0x00,0x08,0x04,0x08,0x10,0x08,// ~ 94
};
/*********************ASCII字模数据*/
/*********************图像数据*/
const uint8_t SnowMan[] = {
0x00,0x00,0x00,0x00,0x40,0x80,0xC0,0x60,0x38,0x9C,0x10,0x18,0x08,0x08,0x08,0xC8,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x00,0x00,0x20,0x00,0x00,0x20,0x20,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x00,0x00,
0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x60,0x60,0x60,0x60,0x60,0xFE,0xFF,0x60,0x60,0x60,0xA0,0x20,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x20,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x10,0x19,0x0B,0x4E,0x46,0x4F,0xC9,0x19,
0x10,0x10,0x30,0x20,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x7B,0x87,0x03,0x03,0x33,0x33,0x03,0x03,0x03,0x03,0x33,0x33,0x03,0x03,0x87,0x7B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x00,0x00,0x20,0x20,0x20,0x60,0x60,0x70,0x50,0x76,0x7F,0x7E,0xF8,0xFF,0xFF,0xF0,0x78,0x7E,0x77,0x72,0x70,0x70,0x70,0x70,0x50,0x70,0x30,0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x02,0x02,0x06,0x04,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x0C,0x04,0x04,
0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8F,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0x8F,0x01,0x00,0x00,0x08,0x18,0x00,0xC0,0x80,0x00,0x80,0x00,0x00,0x10,0x00,0x40,0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x60,0x38,0x0C,0x06,0x03,0x01,
0xFF,0xFF,0x01,0x06,0x1C,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x01,0x09,0x10,0x10,0x00,0x00,0x00,0x00,0x80,0xF0,0x80,0x87,0x87,0x83,0xC3,0x43,0x43,0xFF,0x43,0x43,0x43,0x43,0x43,0x41,0x41,0x40,0x40,0x40,0x40,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x01,0x02,0x04,0x08,0x11,0x20,0x44,0x80,
0x10,0x00,0x44,0x00,0x00,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0x00,0x00,0x44,0x00,0x10,0x80,0x44,0x20,0x11,0x08,0x04,0x02,0x01,0x0C,0x04,0x04,0x02,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x3F,0x1F,0x00,0x00,0x00,0x00,0x80,0x00,0x03,0x07,0x0F,0x0E,0x0E,0x8E,0x0C,0x0C,
0x0C,0x04,0x00,0x00,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x70,0x1E,0x03,0x00,0x00,0x00,0x03,0x06,0x0C,0x18,0x30,0x20,0x60,0x40,0xC0,0x80,0x80,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x88,0xC1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC1,0x88,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x8C,0xCC,0x6C,0x3C,0x1C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x22,0x42,0x43,0x41,
0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0E,0x1B,0x11,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x44,
0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x40,0x40,0x60,0x20,0x20,0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x08,0x08,0x08,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x80,0x80,
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xE7,0x3C,0x00,0x00,0x00,0x00,0x00,0xD8,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x01,0x01,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x01,0x01,0x01,0x03,0x02,0x03,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"F:\浏览器下载\final_snowman_with_branches_image.bmp",0*/
/* (128 X 64 )*/
};
const uint8_t Cat[] = {
0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x80,0x80,0x80,0xFC,0x1E,0x00,0x00,0xC0,0x70,0x18,0x08,0x08,0x10,0x30,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7E,0x1C,0xCC,0x8C,0x04,0x04,0x04,0x04,0x84,0xCC,0x0C,0x3E,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0x01,0x01,0x01,0x01,0xF8,0x7F,0x0F,0x00,0x00,0x00,0x3F,
0x64,0x44,0x44,0x46,0x42,0x43,0x40,0x60,0x20,0x00,0x00,0x00,0x00,0x7F,0xC0,0x80,0x80,0x80,0xC0,0x00,0x00,0x00,0x1F,0x70,0x40,0x40,0x40,0x00,0x00,0x00,0x0F,0x18,0x30,0x20,0x60,0x40,0x46,0x46,0x40,0x60,0x20,0x30,0x1C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x01,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x60,0x20,0x20,0x2C,0xF0,0x20,0x20,0x20,0xA0,0xE0,0x60,0x3E,0x20,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFC,0xF8,0xF0,0xE0,0x80,0x80,0xC0,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xE0,0xF8,0xFC,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x70,0x38,0x18,
0x0E,0x0E,0x0C,0x1C,0x10,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,0x1E,0x37,0x21,0x21,0x23,0x36,0x1C,0x60,0xD8,0x2C,0x24,0x22,0x23,0x23,0x23,0x27,0xFD,0x21,0x21,0x31,0x11,0x13,0x02,0x06,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x78,0x1C,0x0E,0x03,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x02,0x07,0xD5,0xC4,0x08,0x00,0x00,0x00,0x80,0xF8,0xF8,0xF0,0xE0,
0xE0,0xE0,0xF0,0xF8,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x03,0xC2,0xE7,0x0F,0x0C,0x08,0x8A,0x8B,0x08,0x08,0x08,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x47,0x40,0x40,0x20,0x20,0x20,0x30,0x00,0x00,0x00,0x00,0xFC,0x17,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x63,0xC3,0xC7,0x9C,0xB0,0x20,0x27,0xEF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x07,0x00,0x00,0x00,0x00,0x00,0xF8,0x1C,0x84,0x84,0x84,0x8C,
0xF8,0x00,0x00,0x10,0x10,0x10,0x91,0xD3,0x76,0x3C,0xFF,0xFC,0xD6,0x13,0x11,0x10,0x10,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x98,0x80,0xC0,0x40,0x00,0x00,0x01,0x87,0x07,0x0F,0x1F,0x1F,0x3F,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x07,0x03,0x00,0x80,
0x00,0x80,0xE0,0x1C,0x00,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xFF,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x03,0x03,0x03,0x02,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x13,0x11,0x11,0x11,0x10,0x18,0x08,0x0C,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x7C,0x07,0x01,0x03,0x0E,0x18,
0x30,0xA0,0xA0,0xF0,0x5E,0x40,0x00,0x00,0x00,0x00,0x06,0xFC,0xF0,0xC0,0x80,0x80,0x00,0x02,0x01,0x01,0x00,0x18,0x08,0x8C,0x86,0x83,0x81,0xC0,0xE0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x86,0xE3,0x30,0x1C,0x07,0x00,0x80,0xE0,0x30,0x10,0x00,0x00,0x00,0x00,0xC0,0x70,0x10,0x00,
0x00,0x80,0xC0,0x38,0x0E,0x04,0x00,0xC0,0xE0,0xD0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x7F,0xFF,0xF3,0x83,0x07,0x1E,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x06,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x0A,0x0E,0x06,0x05,0x01,0x01,0x00,0x10,0x10,0x08,0x08,0x00,0x00,0x30,0x10,0x10,0x18,0x01,0x03,0x03,0x03,
0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x37,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x39,0x3D,0x3D,0x3C,0x38,0x10,0x00,0x01,0x0F,0x1F,0x1F,0x1F,0x1C,0x1C,0x18,0x00,0x00,0x00,0x00,0x00,0x18,0x0D,0x00,0x00,0x00,0x06,0x03,0x01,0x00,0x00,0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x0C,0x06,0x03,0x00,0x10,0x18,0x0C,0x04,0x06,0x23,0x20,0x10,0x18,0x0C,0x06,0x13,0x19,
0x0C,0x00,0x00,0x10,0x18,0x08,0x0C,0x0D,0x07,0x01,0x00,0x00,0x03,0x03,0x03,0x00,/*"未命名文件",0*/
/* (128 X 64 )*/
};