普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0
硬知识
摘自手SSD1306-OLED驱动芯片中文手册 排版比较神秘
SSD1306简介
???????SSD1306 是一个单片 CMOS OLED/PLED 驱动芯片,可以驱动有机/聚合发光二极管点阵图形显示系统。由 128 segments 和 64 Commons 组成。该芯片专为共阴极 OLED 面板设计。 ???????SSD1306 中嵌入了对比度控制器、显示 RAM 和晶振,并因此减少了外部器件和功耗。有 256级亮度控制。数据/命令的发送有三种接口可选择:6800/8000 串口,I2C 接口或 SPI 接口。
I2C 接口
从机地址位(SA0)
???????SSD1306 在发送或接受任何信息之前必须识别从机地址。设备将会响应从机地址,后面 ???????跟随着从机地址位(SA0 位)和读写选择位(R/W#位),格式如下:  ???????SA0 位为从机地址提供了一个位的拓展。0111100(0x3c) 或 0111101(0x3d) 都可以做为 SSD1306 的从机地址。D/C#引脚作为 SA0 用于从机地址选择。R/W#为用来决定 I2C 总线接口的操作模式。 ???????R/W# = 1,读模式。R/W# = 0 写模式
I2C 总线写数据
???????I2C 总线接口提供了写数据和命令到设备的接口。关于 I2C 总线的写模式的时序请参考下图:  I2C 的写模式
- 主机设备通过开始条件初始化数据通讯。开始条件的定义在下面的图中展示。开始条件通过将 SDA 从高拉低而 SCL 保持高建立。
- 从机地址紧跟着开始条件作为标志用。对于 SSD1306,从机地址可以是“b0111100”或
“b0111101”通过改变 SA0 到 LOW 或 HIGH(D/C 引脚作为 SA0)。 - 写模式的建立是通过设置 R/W#为到逻辑 0 实现的。
- 应答位信号将在接收到一个字节的数据后发生包括从机地址和 R/W#位。可以参考下面的应答位信号的图示。应答位的定义是在应答位相关的时钟脉冲的高周期中把 SDA 线拉低。
- 传输完从机地址之后,控制字节或数据字节开始通过 SDA 传输。一个控制字节主要由
CO 和 D/C#位后面再加上六个 0 组成的。 a) 如果 CO 为设为逻辑 0,后面传输的信息就只包含数据字节。 b) D/C 位决定了下个数据字节是作为命令还是数据。如果 D/C#位设为 0,下一个数据 就是命令。如果 D/C#位设为 1,下一个数据就是数据,将会存在 GDDRAM 中。GDDRAM 列地址指针将会在每次数据写之后自动加 1. - 应答位将会在接收到每个控制字节或数据字节之后发生
- 写模式会在用了停止条件之后结束。停止条件:将 SDA 从低拉高,而 SCL 保持高。
 请注意数据位的传输是有限制的 8. 数据位,在每个 SCL 脉冲阶段传输,必须在时钟脉冲高周期内保持稳定状态。可以参考 下面的图示。除了开始或停止条件,数据线只能在 SCL 为 LOW 的时候转换状态。 9. SDA 和 SCL 都必须接外接上拉电阻

命令解码器
???????这个模块决定了输入数据被解读为数据还是命令。数据的解读是基于 D/C#引脚的输入。如果 D/C#引脚是高,D[7:0]就被解读为写到图像显示数据 RAM(GDDRAM)中的显示数据。 ???????如果是低,D[7:0]的输入就被解读为一个命令。然后数据输入就会被解码并写到相关的命令寄存器中。
晶振电路和显示时间发生器

???????这是一个片上低功耗 RC 震荡电路。操作时钟(CLK)可以由内部震荡器或外部 CL 引脚生成。 ???????这个选择是通过 CLS 引脚完成的。当 CLS 引脚拉高,内部振荡器开启,CL 应该保留开启。将CLS 拉低可以静止内部振荡器,外部时钟必须连接到 CL 引脚上。当选择了内部振荡器之后,输出频率 Fosc 可以通过命令 D5h A[7:4]修改。 ???????用于显示时钟发生器的显示时钟(DCLK)是源于 CLK 的。分频因子“D”可以通过命令 D5h 编程,范围为 1 到 16 DCLK = Fosc/D 显示的帧率是由下面的公式决定  D 代表时钟分频。由 D5h A[3:0]设置。范围是 1 到 16 K 是每行显示时钟的数量。值的计算如下: K = 相 1 周期 + 相 2 周期 + BANK0 脉冲宽度 = 2 + 2 + 50 = 54 在上电重启时 Number of Multiplex ratio 通过 command A8h 设置。上电重启值为 63 。 Fosc 是振荡器频率,可以通过命令 D5h A[7:4]修改。值越大频率越大。
复位
当 RES# 输入为 LOW 时,芯片初始化为下面的状态:
- 显示关
- 128 * 64 显示模式
- 正常的 segment 和显示数据列地址和行地址映射(SEG0 映射到 address 00h,COM0 映射到 address 00h)
- 在串口中清除移位寄存器数据
- 显示开始行设置为显示 RAM 地址 0
- 列地址计数设为 0
- 正常扫描 COM 输出方向
- 对比度控制寄存器设为 7Fh
- 正常显示模式(等同于 A4h 命令)
图形显示数据RAM (GDDRAM)
???????GDDRAM是一个位映射的静态RAM,保存要显示的位模式。RAM的大小为128x64位,内存分为8个页面,从PAGEO到PAGE7,用于单色128x64点阵显示,如图8-13所示  ???????当一个数据字节写到 GDDRAM 中,所有当前列的同一页的行图像数据都会被被填充(比如,被列地址指针指向的整列(8 位)都会被填充)。数据位 D0 写到顶行,而数据位 D7 写到底行,如下图所示。  ???????为了灵活性,segment 和 common 上的重映射都可以通过软件选择。 ???????对于显示的垂直移动,一个内部的寄存器保存了显示开始行可以用来设置控制 RAM 数据部分来映射显示(命令 D3h)。
命令表
基本命令表

部分指令详解
为 BANK0 设置对比度控制(81h)
???????这个命令用来设置显示的对比度,该芯片有 256 级对比度,从 00h 到 FFh。屏显输出电流随着对比度增大而增大。
全部显示开启(A4h/A5h)
???????A4h 命令打开显示,输出依据 GDDRAM 中的内容。 ???????如果使用 A5h 命令,然后再使用 A4h 命令,显示就会重覆盖为 GDDRAM 的内容。 ???????换句话说,A4h 命令从整体显示开启状态覆盖显示。 ???????A5h 命令轻质整体显示状态位开启,不管显示数据 RAM 中的内容。
设置正常/反相显示(A6h、A7h)
???????这个命令将显示设置成正常或反相模式。在正常模式 1 就是开,而在反相模式下 1 就是关
设置显示开、关(AEh、AFh)
???????这个单字节命令用来打开或关闭 OLED 面板的显示。 ???????当显示是 ON,通过设置主机配置命令选择的电路会打开; ???????当显示为 OFF 时,这些电路会关闭,segment 和 common 输出将处于高阻状态。这些命令设置显示的状态在开关之间切换: 
滚屏命令
    
部分指令详解
水平滚动设置(26h 27h)
???????这个命令是由五个连续字节来设置水平滚动参数和决定滚动开始页,结束页和滚动速度的。在声明这个命令前,水平滚动必须用命令(2Eh)关闭,否则,RAM 中的内容可能被损坏。SSD1306 水平滚动是为 128 列滚动设计的。下面的两张插图演示了滚动的效果: 
持续垂直和水平滚动设置(29h 2Ah)
???????这是一个由六个连续字节组成的命令,用来设置持续水平滚动参数和决定滚动开始页,结束页,滚动速度和垂直滚动偏移的。 ???????命令 29h、2Ah 中的字节 B[2:0],C[2:0]和 D[2:0]用来设置持续水平滚动。字节 E[5:0]用来设置持续垂直滚动的偏移量。所有这些字节一起设置持续倾斜(垂直+水平)滚动。如果垂直滚动偏移字节 E[5:0]设为 0,那么效果就只是水平滚动。 ???????在发布此命令前必须用命令(2Eh)关闭滚动。否则,RAM 内容会损坏。下面的插图展示了滚动效果: 
关闭滚动(2Eh)
???????这个命令停止滚动的动作。在发布命令 2Eh 来关闭滚动动作之后,RAM 内容需要重写。
激活滚动(2Fh)
???????这个命令开始滚动的懂做,并且只有在声明了滚动设置参数之后使用。只对最后的设置命令有效 下面的命令在滚动激活后是禁止的:
- RAM 访问(数据读写)
- 改变水平滚动设置参数
设置垂直滚动区域(A3h)
???????这个命令由三个连续的字节组成用来设置垂直滚动区域。对于持续垂直滚动功能(命令 29h 2Ah),垂直滚动的行数可以设置的更小或等于最大复用率。
地址设置命令表
 
部分指令详解
设置低列开始地址作为页地址模式(00h~0Fh)
设置高列开始地址作为页地址模式(10h~1Fh)
设置内存地址模式(20h)
???????SSD1306 中有三种不同的内存地址模式:页地址模式,水平地址模式,垂直地址模式。这个命令将内存地址模式设置成这三种中的一种。在这里 COL 的意思是图形显示数据 RAM 列。 页地址模式(A[1:0] =10xb) ???????在页地址模式下,在显示 RAM 读写之后,列地址指针自动加一。如果列地址指针达到了列的结束地址,列地址指针重置为列开始地址并且也地址指针不会改变。用户需要设置新的页和列地址来访问下一页 RAM 内从。页地址模式下 PAGE 和列地址指针的移动模式参考下图  在正常显示数据 RAM 读或写和页地址模式,要求使用下面的步骤来定义开始 RAM 访问的位置:
- 通过命令 B0h 到 B7h 来设置目标显示位置的页开始地址
- 通过 00h~0Fh 来设置低开始列地址的指针
- 通过命令 10h~1Fh 来设置高开始列地址
???????比如说,如果页地址设置为 B2h,低列地址是 03h 高列地址为 00h,那么就意味着开始列是PAGE2 的 SEG3.RAM 访问指针的位置如下图所示。输出数据字节将写到 RAM 列 3 的位置。  水平寻址模式(A[1:0]= 00b) ???????在水平寻址模式下,当显示 RAM 被读写之后,列地址指针自动加一。如果列地址指针达到列的结束地址,列地址指针重置为列的开始地址,并且页地址指针自动加 1。水平寻址模式下页和列地址的移动顺序如下图所示。当列地址和页地址都达到了结束地址,指针重设为列地址和页地址的开始地址。  垂直寻址模式(A[1:0]=01b) ???????在垂直寻址模式下,当显示 RAM 被读写之后,页地址指针自动加一。如果页地址达到了页的结束地址,页地址自动重置为页的开始地址,列地址自动加一。页地址和列地址的移动顺序如下图所示。当列地址和页地址都达到结束地址后,指针自动重置为开始地址。  ???????在正常显示 RAM 读或写,水平/垂直寻址模式下,要求用下面的步骤来定义 RAM 访问指针位置:
- 用 21h 命令设置目标显示位置的列的开始和结束地址;
- 用命令 22h 设置目标显示位置的页的开始和结束地址
设置列地址(21h)
???????这个三字节命令指定了显示数据 RAM 列开始地址和结束地址。这个命令也会设置列地址指针到列开始地址。这个指针用于定义当前读写的显示数据 RAM 列地址。如果用 20h 命令开启了水平寻址命令,在完成读写一个列数据之后,该指针就会自动指向下一列地址。当什么时候列地址指针完成了访问列结束地址,它就会返回到列开始地址,和行地址增加到下一行。
设置页地址(22h)
???????这个三字节的命令指定了显示数据 RAM 页的开始和结束地址。这个命令同时也设置了页地址指针到页开始地址。这个指针用来定义在图像显示数据 RAM 中当前读写的地址。如果当前是垂直寻址模式,在读写完一页数据之后,会自动增加到下一页地址。当页地址指针完成访问结束页地址之后,会重置到开始页地址。 ???????下面的插图展示了列和页地址指针的移动方式:列开始地址设置为 2,列结束地址设置为125,页开始地址设置为 1,页结束地址设置为 6;通过命令 20h 使能水平地址增加模式。在这个案例中,图形显示数据 RAM 可访问的地址就只有从列 2 到列 125,页 1 到页 6。另外,列地址指针被设为 2 页地址指针被设为 1.在完成读写数据中的一个像素后,列地址自动加 1 到下一个 RAM 位置进行下一次读写操作。当列地址指针完成访问结束列地址 125 之后,重新回到列 2,页地址自动加 1。当结束页 6 和结束列 125RAM 位置被访问过之后,页地址设回 1,列地址设回 2。 
设置页开始地址作为页寻址模式(B0h~B7h)
硬件配置(面板分辨率和版面相关)命令表

部分指令详解
设置显示开始行(40h~7Fh)
???????这个命令设置显示开始行寄存器来决定显示 RAM 的开始地址,通过选择 0 到 63 的值。当值为 0 是,RAM 行 0 映射到 COM0,当值为 1 时,RAM 行 1 映射到 COM0,以此类推。
设置 Segment 重映射(A0h/A1h)
???????这个命令修改显示数据列地址和 segment 驱动器之间的映射,允许在 OLED 模块设置上的灵活性。 ???????这个命令只影响后续的数据输出。早已存储在 GDDRAM 中的数据不会改变。
设置复用率(A8h)
???????这个命令转换默认的 63 复用模式到任何复用率,范围从 16 到 63。输出 pads COM0~COM63将会转换为相关的 COM 信号。
设置 COM 输出扫描方向(C0h、C8h)
设置显示偏移(D3h)
???????这是一个两字节的命令。第二个命令指定显示映射的开始行到 COM0 和 COM63 中的一个(假设 COM0 是显示的开始行,那么显示开始寄存器就等于 0)。 ???????比如为了将 COM16 向 COM0 方向移动 16 行,第二个字节六位数据就应该写成 010000b。为了向相反方向移动 16 行,这个六位数据就应该是 64‐16,所谓第二个字节应该是 100000b。 ???????下面两个表展示了命令 C0h/C8h 和 D3h 的设置效果  
设置 COM 引脚硬件配置(DAh)
这个命令设置 COM 信号引脚配置来匹配 OLED 面板硬件层。下面的表展示了不同条件下的COM 引脚配置(复用率为 64)     
时钟和驱动方案设置命令表

部分指令详解
设置显示时钟分频率、振荡器频率(D5h)
这个命令由两个功能组成: 显示时钟分频率 D(A[3:0]) ???????设置分频率从 CLK 来生成 DCKL(display clock)。这个分频率的范围为 1 到 16,重置值为 1.请参考 8.3,获取 DCLK 和 CLK 关系的跟多细节 振荡器频率(A[7:4]) ???????如果 CLS 引脚置高编程后的振荡器频率 Fosc 就是 CLK 的源。这个 4 位的值设置 16种不同的频率,默认设置为 1000b。
设置重充电周期(D9h)
???????这个命令用于设置充充电周期的时间长度。间隔以计算 DCLK 的数量,重置值为 2DCLK。
设置 Vcomh 取消选择水平(DBh)
???????这个命令调整
V
C
O
M
H
V_{COMH}
VCOMH? 调节器输出
NOP(E3h)
???????空指令
示例程序
???????软件I2C程序见【51单片机快速入门指南】4: 软件 I2C ???????stdint.h见【51单片机快速入门指南】1:基础知识和工程创建
???????由以上知识可知,SSD1306的7位地址可为0x3c、0x3d。最后一位由硬件决定。 ???????如下图可见,我的屏幕的地址为0x3c(0x78 = 0x3c << 1) 
OLED.c
#include "OLED.h"
#include <stdlib.h>
#include "OLED_Font.h"
#include "Software_I2C.h"
void Write_IIC_Command(unsigned char I2C_Command)
{
i2c_mem_write(OLED_ADDRESS, OLED_WriteCom_Addr, &I2C_Command, 1);
}
void Write_IIC_Data(unsigned char IIC_Data)
{
i2c_mem_write(OLED_ADDRESS, OLED_WriteData_Addr, &IIC_Data, 1);
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
if(cmd)
{
Write_IIC_Data(dat);
}
else
{
Write_IIC_Command(dat);
}
}
void fill_picture(unsigned char fill_Data)
{
unsigned char m,n;
for(m=0;m<8;m++)
{
OLED_WR_Byte(0xb0+m,0);
OLED_WR_Byte(0x00,0);
OLED_WR_Byte(0x10,0);
for(n=0;n<128;n++)
{
OLED_WR_Byte(fill_Data,1);
}
}
}
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
OLED_WR_Byte((x&0x0f),OLED_CMD);
}
void OLED_Display_On(void)
{
OLED_WR_Byte(0X8D,OLED_CMD);
OLED_WR_Byte(0X14,OLED_CMD);
OLED_WR_Byte(0XAF,OLED_CMD);
}
void OLED_Display_Off(void)
{
OLED_WR_Byte(0X8D,OLED_CMD);
OLED_WR_Byte(0X10,OLED_CMD);
OLED_WR_Byte(0XAE,OLED_CMD);
}
void OLED_Clear(void)
{
unsigned char i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD);
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)
{
unsigned char i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD);
OLED_WR_Byte (0x00,OLED_CMD);
OLED_WR_Byte (0x10,OLED_CMD);
for(n=0;n<128;n++)
OLED_WR_Byte(1,OLED_DATA);
}
}
void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size)
{
unsigned char c=0,i=0;
c=chr-' ';
if(x>Max_Column-1)
{x=0;y=y+2;}
if(Char_Size ==16)
{
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
}
else
{
OLED_Set_Pos(x,y);
for(i=0;i<6;i++)
OLED_WR_Byte(F6x8[c][i],OLED_DATA);
}
}
unsigned long oled_pow(unsigned char m,unsigned char n)
{
unsigned long result=1;
while(n--)
result*=m;
return result;
}
void OLED_ShowNum(unsigned char x,unsigned char y,unsigned long num,unsigned char len,unsigned char Size)
{
unsigned char t,temp;
unsigned char 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+(Size/2)*t,y,' ',Size);
continue;
}
else
enshow=1;
}
OLED_ShowChar(x+(Size/2)*t,y,temp+'0',Size);
}
}
void OLED_ShowString(unsigned char x,unsigned char y,unsigned char *chr,unsigned char Char_Size)
{
unsigned char j=0;
while (chr[j]!='\0')
{
OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120)
{x=0;y+=2;}
j++;
}
}
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
{
unsigned char t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0)
y=y1/8;
else
y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_WR_Byte(BMP[j++],OLED_DATA);
}
}
}
void OLED_Init(void)
{
OLED_WR_Byte(0xAE,OLED_CMD);
OLED_WR_Byte(0xD5,OLED_CMD);
OLED_WR_Byte(0x80,OLED_CMD);
OLED_WR_Byte(0xA8,OLED_CMD);
OLED_WR_Byte(0x3F,OLED_CMD);
OLED_WR_Byte(0xD3,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x10,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0xB0,OLED_CMD);
OLED_WR_Byte(0x8D,OLED_CMD);
OLED_WR_Byte(0x14,OLED_CMD);
OLED_WR_Byte(0x20,OLED_CMD);
OLED_WR_Byte(0x02,OLED_CMD);
OLED_WR_Byte(0xC8,OLED_CMD);
OLED_WR_Byte(0xA1,OLED_CMD);
OLED_WR_Byte(0x81,OLED_CMD);
OLED_WR_Byte(0xFF,OLED_CMD);
OLED_WR_Byte(0xD9,OLED_CMD);
OLED_WR_Byte(0xF1,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xD8,OLED_CMD);
OLED_WR_Byte(0x05,OLED_CMD);
OLED_WR_Byte(0xDA,OLED_CMD);
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);
OLED_WR_Byte(0x30,OLED_CMD);
OLED_WR_Byte(0xAF,OLED_CMD);
}
OLED.h
#ifndef OLED_OLED_H_
#define OLED_OLED_H_
#include <stdlib.h>
#define OLED_MODE 0
#define SIZE 8
#define XLevelL 0x00
#define XLevelH 0x10
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xFF
#define X_WIDTH 128
#define Y_WIDTH 64
#define OLED_ADDRESS 0x3c
#define OLED_WriteCom_Addr 0x00
#define OLED_WriteData_Addr 0x40
#define OLED_CMD 0
#define OLED_DATA 1
void OLED_WR_Byte(unsigned dat,unsigned cmd);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Init(void);
void OLED_Clear(void);
void OLED_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size);
void OLED_ShowNum(unsigned char x,unsigned char y,unsigned long num,unsigned char len,unsigned char Size);
void OLED_ShowString(unsigned char x,unsigned char y, unsigned char *p,unsigned char Char_Size);
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
void fill_picture(unsigned char fill_Data);
void Write_IIC_Command(unsigned char IIC_Command);
void Write_IIC_Data(unsigned char IIC_Data);
void Write_IIC_Byte(unsigned char IIC_Byte);
#endif
OLED_Font.h
#ifndef OLED_OLED_FONT_H
#define OLED_OLED_FONT_H
code unsigned char F6x8[][6] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x2f, 0x00, 0x00},
{0x00, 0x00, 0x07, 0x00, 0x07, 0x00},
{0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14},
{0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12},
{0x00, 0x62, 0x64, 0x08, 0x13, 0x23},
{0x00, 0x36, 0x49, 0x55, 0x22, 0x50},
{0x00, 0x00, 0x05, 0x03, 0x00, 0x00},
{0x00, 0x00, 0x1c, 0x22, 0x41, 0x00},
{0x00, 0x00, 0x41, 0x22, 0x1c, 0x00},
{0x00, 0x14, 0x08, 0x3E, 0x08, 0x14},
{0x00, 0x08, 0x08, 0x3E, 0x08, 0x08},
{0x00, 0x00, 0x00, 0xA0, 0x60, 0x00},
{0x00, 0x08, 0x08, 0x08, 0x08, 0x08},
{0x00, 0x00, 0x60, 0x60, 0x00, 0x00},
{0x00, 0x20, 0x10, 0x08, 0x04, 0x02},
{0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E},
{0x00, 0x00, 0x42, 0x7F, 0x40, 0x00},
{0x00, 0x42, 0x61, 0x51, 0x49, 0x46},
{0x00, 0x21, 0x41, 0x45, 0x4B, 0x31},
{0x00, 0x18, 0x14, 0x12, 0x7F, 0x10},
{0x00, 0x27, 0x45, 0x45, 0x45, 0x39},
{0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30},
{0x00, 0x01, 0x71, 0x09, 0x05, 0x03},
{0x00, 0x36, 0x49, 0x49, 0x49, 0x36},
{0x00, 0x06, 0x49, 0x49, 0x29, 0x1E},
{0x00, 0x00, 0x36, 0x36, 0x00, 0x00},
{0x00, 0x00, 0x56, 0x36, 0x00, 0x00},
{0x00, 0x08, 0x14, 0x22, 0x41, 0x00},
{0x00, 0x14, 0x14, 0x14, 0x14, 0x14},
{0x00, 0x00, 0x41, 0x22, 0x14, 0x08},
{0x00, 0x02, 0x01, 0x51, 0x09, 0x06},
{0x00, 0x32, 0x49, 0x59, 0x51, 0x3E},
{0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C},
{0x00, 0x7F, 0x49, 0x49, 0x49, 0x36},
{0x00, 0x3E, 0x41, 0x41, 0x41, 0x22},
{0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C},
{0x00, 0x7F, 0x49, 0x49, 0x49, 0x41},
{0x00, 0x7F, 0x09, 0x09, 0x09, 0x01},
{0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A},
{0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F},
{0x00, 0x00, 0x41, 0x7F, 0x41, 0x00},
{0x00, 0x20, 0x40, 0x41, 0x3F, 0x01},
{0x00, 0x7F, 0x08, 0x14, 0x22, 0x41},
{0x00, 0x7F, 0x40, 0x40, 0x40, 0x40},
{0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F},
{0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F},
{0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E},
{0x00, 0x7F, 0x09, 0x09, 0x09, 0x06},
{0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E},
{0x00, 0x7F, 0x09, 0x19, 0x29, 0x46},
{0x00, 0x46, 0x49, 0x49, 0x49, 0x31},
{0x00, 0x01, 0x01, 0x7F, 0x01, 0x01},
{0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F},
{0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F},
{0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F},
{0x00, 0x63, 0x14, 0x08, 0x14, 0x63},
{0x00, 0x07, 0x08, 0x70, 0x08, 0x07},
{0x00, 0x61, 0x51, 0x49, 0x45, 0x43},
{0x00, 0x00, 0x7F, 0x41, 0x41, 0x00},
{0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55},
{0x00, 0x00, 0x41, 0x41, 0x7F, 0x00},
{0x00, 0x04, 0x02, 0x01, 0x02, 0x04},
{0x00, 0x40, 0x40, 0x40, 0x40, 0x40},
{0x00, 0x00, 0x01, 0x02, 0x04, 0x00},
{0x00, 0x20, 0x54, 0x54, 0x54, 0x78},
{0x00, 0x7F, 0x48, 0x44, 0x44, 0x38},
{0x00, 0x38, 0x44, 0x44, 0x44, 0x20},
{0x00, 0x38, 0x44, 0x44, 0x48, 0x7F},
{0x00, 0x38, 0x54, 0x54, 0x54, 0x18},
{0x00, 0x08, 0x7E, 0x09, 0x01, 0x02},
{0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C},
{0x00, 0x7F, 0x08, 0x04, 0x04, 0x78},
{0x00, 0x00, 0x44, 0x7D, 0x40, 0x00},
{0x00, 0x40, 0x80, 0x84, 0x7D, 0x00},
{0x00, 0x7F, 0x10, 0x28, 0x44, 0x00},
{0x00, 0x00, 0x41, 0x7F, 0x40, 0x00},
{0x00, 0x7C, 0x04, 0x18, 0x04, 0x78},
{0x00, 0x7C, 0x08, 0x04, 0x04, 0x78},
{0x00, 0x38, 0x44, 0x44, 0x44, 0x38},
{0x00, 0xFC, 0x24, 0x24, 0x24, 0x18},
{0x00, 0x18, 0x24, 0x24, 0x18, 0xFC},
{0x00, 0x7C, 0x08, 0x04, 0x04, 0x08},
{0x00, 0x48, 0x54, 0x54, 0x54, 0x20},
{0x00, 0x04, 0x3F, 0x44, 0x40, 0x20},
{0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C},
{0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C},
{0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C},
{0x00, 0x44, 0x28, 0x10, 0x28, 0x44},
{0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C},
{0x00, 0x44, 0x64, 0x54, 0x4C, 0x44},
{0x14, 0x14, 0x14, 0x14, 0x14, 0x14},
};
code unsigned char F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,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,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,
0x00,0x00,0x04,0x02,0x02,0x02,0x04,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,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
code 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},
{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},
{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},
{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},
{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},
{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00},
{0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},
{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},
{0x40,0x40,0x48,0x48,0x48,0xC8,0x78,0x4F,0x48,0x48,0x48,0x48,0x48,0x40,0x40,0x00},
{0x00,0x00,0x00,0x00,0x03,0x12,0x12,0x22,0x22,0x52,0x8A,0x06,0x00,0x00,0x00,0x00},
{0x00,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xC0,0x30,0x00,0x00},
{0x40,0x40,0x40,0x43,0x40,0x7F,0x40,0x40,0x40,0x7F,0x42,0x41,0x40,0x40,0x40,0x00},
{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},
{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},
{0x00,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0xFE,0x82,0x82,0x92,0xA2,0x9E,0x00,0x00},
{0x80,0x60,0x1F,0x02,0x42,0x82,0x7F,0x00,0xFF,0x40,0x2F,0x10,0x2C,0x43,0x80,0x00},
{0x00,0x00,0x90,0x88,0x4C,0x57,0xA4,0x24,0x54,0x54,0x8C,0x84,0x00,0x00,0x00,0x00},
{0x01,0x01,0x80,0x42,0x22,0x1A,0x07,0x02,0x42,0x82,0x42,0x3E,0x01,0x01,0x01,0x00},
{0x00,0x04,0xE4,0x24,0x2C,0xB4,0x25,0x26,0x24,0xB4,0x2C,0x24,0xE4,0x04,0x00,0x00},
{0x00,0x00,0xFF,0x02,0x01,0x1E,0x12,0x12,0x12,0x1E,0x41,0x82,0x7F,0x00,0x00,0x00},
};
#endif
测试程序
#include <STC89C5xRC.H>
#include "intrins.h"
#include "stdint.h"
#include "OLED.h"
void main(void)
{
OLED_Init();
OLED_Clear();
OLED_Display_On();
OLED_ShowString(0, 0, " STC89C52 OLED ", 1);
OLED_ShowString(0, 2, " 2021-11-23", 1);
while(1)
{
}
}
实验现象

|