OLED,即有机发光二极管( Organic Light Emitting Diode )。 OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示 OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。
分辨率:128*64
驱动方式:SPI/IIC,以下程序是IO口模拟IIC通信。
#ifndef __OLED_H
#define __OLED_H
typedef signed char int8_t;
typedef signed short int int16_t;
typedef signed int int32_t;
typedef signed __int64 int64_t;
/* exact-width unsigned integer types */
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned int size_t;
typedef unsigned __int64 uint64_t;
#define OLED_SCL_PORT GPIOA
#define OLED_SCL_PIN GPIO_Pin_5
#define OLED_SCL_CONFIG() GPIOConfig(OLED_SCL_PORT, OLED_SCL_PIN, GPIO_Mode_Out_PP)
#define OLED_SCL_LOW() GPIO_ResetBits(OLED_SCL_PORT, OLED_SCL_PIN) // SCL
#define OLED_SCL_HIGH() GPIO_SetBits(OLED_SCL_PORT, OLED_SCL_PIN)
#define OLED_SDA_PORT GPIOA
#define OLED_SDA_PIN GPIO_Pin_7
#define OLED_SDA_CONFIG() GPIOConfig(OLED_SDA_PORT, OLED_SDA_PIN, GPIO_Mode_Out_PP)
#define OLED_SDA_LOW() GPIO_ResetBits(OLED_SDA_PORT, OLED_SDA_PIN) // SDA
#define OLED_SDA_HIGH() GPIO_SetBits(OLED_SDA_PORT, OLED_SDA_PIN)
#define OLED_RES_PORT GPIOA
#define OLED_RES_PIN GPIO_Pin_6
#define OLED_RES_CONFIG() GPIOConfig(OLED_RES_PORT, OLED_RES_PIN, GPIO_Mode_Out_PP)
#define OLED_RES_LOW() GPIO_ResetBits(OLED_RES_PORT, OLED_RES_PIN) // RES
#define OLED_RES_HIGH() GPIO_SetBits(OLED_RES_PORT, OLED_RES_PIN)
#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_CMD 0 //写命令
#define OLED_DATA 1 //写数据
void IICStart(void);
void IICStop(void);
void I2CWriteCmd(uint8_t cmd);
void I2CWriteData(uint8_t data);
void I2CWriteByte(uint8_t byte);
void I2CWaitAck(void);
//OLED控制用函数
void OLEDWriteByte(uint8_t dat,uint8_t cmd);
void OLEDDisplayOn(void);
void OLEDDisplayOff(void);
void OLEDInit(void);
void OLEDClear(void);
void OLEDDrawPoint(uint8_t x,uint8_t y,uint8_t t);
void OLEDFill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot);
void OLEDShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size);
void OLEDShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
void OLEDShowString(uint8_t x,uint8_t y, uint8_t *p,uint8_t Char_Size);
void OLEDSetPos(uint8_t x, uint8_t y);
void OLEDShowCHinese(uint8_t x,uint8_t y,uint8_t no);
void OLEDDrawBMP(uint8_t x0, uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[]);
#endif
#include "oled.h"
#include "stdlib.h"
#include "oledfont.h"
void IICStart(void)
{
OLED_SCL_HIGH() ;
OLED_SDA_HIGH();
OLED_SDA_LOW();
OLED_SCL_LOW();
}
void IICStop(void)
{
OLED_SCL_HIGH() ;
OLED_SDA_LOW();
OLED_SDA_HIGH();
}
void I2CWaitAck(void)
{
OLED_SCL_HIGH() ;
OLED_SCL_LOW();
}
void I2CWriteByte(uint8_t byte)
{
uint8_t i;
uint8_t m, data;
data = byte;
OLED_SCL_LOW();
for(i = 0; i < 8; i++)
{
m = data;
m = m & 0x80;
if(m == 0x80)
{
OLED_SDA_HIGH();
}
else
{
OLED_SDA_LOW();
}
data = data << 1;
OLED_SCL_HIGH();
OLED_SCL_LOW();
}
}
void I2CWriteCmd(uint8_t cmd)
{
IICStart();
I2CWriteByte(0x78); //Slave address,SA0=0
I2CWaitAck();
I2CWriteByte(0x00); //write command
I2CWaitAck();
I2CWriteByte(cmd);
I2CWaitAck();
IICStop();
}
void I2CWriteData(uint8_t data)
{
IICStart();
I2CWriteByte(0x78); //D/C#=0; R/W#=0
I2CWaitAck();
I2CWriteByte(0x40); //write data
I2CWaitAck();
I2CWriteByte(data);
I2CWaitAck();
IICStop();
}
void OLEDWriteByte(uint8_t dat, uint8_t cmd)
{
if(cmd)
{
I2CWriteData(dat);
}
else
{
I2CWriteCmd(dat);
}
}
//坐标设置
void OLEDSetPos(uint8_t x, uint8_t y)
{
OLEDWriteByte(0xb0 + y, OLED_CMD);
OLEDWriteByte(((x & 0xf0) >> 4) | 0x10, OLED_CMD);
OLEDWriteByte((x & 0x0f), OLED_CMD);
}
//开启OLED显示
void OLEDDisplayOn(void)
{
OLEDWriteByte(0X8D, OLED_CMD); //SET DCDC命令
OLEDWriteByte(0X14, OLED_CMD); //DCDC ON
OLEDWriteByte(0XAF, OLED_CMD); //DISPLAY ON
}
//关闭OLED显示
void OLEDDisplayOff(void)
{
OLEDWriteByte(0X8D, OLED_CMD); //SET DCDC命令
OLEDWriteByte(0X10, OLED_CMD); //DCDC OFF
OLEDWriteByte(0XAE, OLED_CMD); //DISPLAY OFF
}
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLEDClear(void)
{
uint8_t i, n;
for(i = 0; i < 8; i++)
{
OLEDWriteByte (0xb0 + i, OLED_CMD); //设置页地址(0~7)
OLEDWriteByte (0x00, OLED_CMD); //设置显示位置—列低地址
OLEDWriteByte (0x10, OLED_CMD); //设置显示位置—列高地址
for(n = 0; n < 128; n++)
{
OLEDWriteByte(0, OLED_DATA);
}
} //更新显示
}
void OLED_On(void)
{
uint8_t i, n;
for(i = 0; i < 8; i++)
{
OLEDWriteByte (0xb0 + i, OLED_CMD); //设置页地址(0~7)
OLEDWriteByte (0x00, OLED_CMD); //设置显示位置—列低地址
OLEDWriteByte (0x10, OLED_CMD); //设置显示位置—列高地址
for(n = 0; n < 128; n++)
{
OLEDWriteByte(1, OLED_DATA);
}
} //更新显示
}
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
void OLEDShowChar(uint8_t x, uint8_t y, uint8_t chr, uint8_t Char_Size)
{
uint8_t c = 0, i = 0;
c = chr - ' '; //得到偏移后的值
if(x > Max_Column - 1)
{
x = 0;
y = y + 2;
}
if(Char_Size == 16)
{
OLEDSetPos(x, y);
for(i = 0; i < 8; i++)
{
OLEDWriteByte(F8X16[c * 16 + i], OLED_DATA);
}
OLEDSetPos(x, y + 1);
for(i = 0; i < 8; i++)
{
OLEDWriteByte(F8X16[c * 16 + i + 8], OLED_DATA);
}
}
else
{
OLEDSetPos(x, y);
for(i = 0; i < 6; i++)
{
OLEDWriteByte(F6x8[c][i], OLED_DATA);
}
}
}
//m^n函数
uint32_t oled_pow(uint8_t m, uint8_t n)
{
uint32_t result = 1;
while(n--)
{
result *= m;
}
return result;
}
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLEDShowNum(uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t size2)
{
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)
{
OLEDShowChar(x + (size2 / 2)*t, y, ' ', size2);
continue;
}
else
{
enshow = 1;
}
}
OLEDShowChar(x + (size2 / 2)*t, y, temp + '0', size2);
}
}
//显示一个字符号串
void OLEDShowString(uint8_t x, uint8_t y, uint8_t *chr, uint8_t Char_Size)
{
uint8_t j = 0;
while (chr[j] != '\0')
{
OLEDShowChar(x, y, chr[j], Char_Size);
x += 8;
if(x > 120)
{
x = 0;
y += 2;
}
j++;
}
}
//显示汉字
void OLEDShowCHinese(uint8_t x, uint8_t y, uint8_t no)
{
uint8_t t;
OLEDSetPos(x, y);
for(t = 0; t < 16; t++)
{
OLEDWriteByte(chinese[2 * no][t], OLED_DATA);
}
OLEDSetPos(x, y + 1);
for(t = 0; t < 16; t++)
{
OLEDWriteByte(chinese[2 * no + 1][t], OLED_DATA);
}
}
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void OLEDDrawBMP(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t BMP[])
{
uint32_t j = 0;
uint8_t x, y;
if(y1 % 8 == 0)
{
y = y1 / 8;
}
else
{
y = y1 / 8 + 1;
}
for(y = y0; y < y1; y++)
{
OLEDSetPos(x0, y);
for(x = x0; x < x1; x++)
{
OLEDWriteByte(BMP[j++], OLED_DATA);
}
}
}
static void oled_delay(uint32_t ms)
{
while(--ms);
}
void OLEDInit(void)
{
OLED_SCL_CONFIG();
OLED_SDA_CONFIG();
OLED_RES_CONFIG();
OLED_SCL_HIGH();
OLED_SDA_HIGH();
OLED_RES_LOW();
oled_delay(20000000);
OLED_RES_HIGH();
oled_delay(50000000);
OLEDWriteByte(0xAE, OLED_CMD); //--display off
OLEDWriteByte(0x00, OLED_CMD); //---set low column address
OLEDWriteByte(0x10, OLED_CMD); //---set high column address
OLEDWriteByte(0x40, OLED_CMD); //--set start line address
OLEDWriteByte(0xB0, OLED_CMD); //--set page address
OLEDWriteByte(0x81, OLED_CMD); // contract control
OLEDWriteByte(0xFF, OLED_CMD); //--128
OLEDWriteByte(0xA1, OLED_CMD); //set segment remap
OLEDWriteByte(0xA6, OLED_CMD); //--normal / reverse
OLEDWriteByte(0xA8, OLED_CMD); //--set multiplex ratio(1 to 64)
OLEDWriteByte(0x3F, OLED_CMD); //--1/32 duty
OLEDWriteByte(0xC8, OLED_CMD); //Com scan direction
OLEDWriteByte(0xD3, OLED_CMD); //-set display offset
OLEDWriteByte(0x00, OLED_CMD); //
OLEDWriteByte(0xD5, OLED_CMD); //set osc division
OLEDWriteByte(0x80, OLED_CMD); //
OLEDWriteByte(0xD8, OLED_CMD); //set area color mode off
OLEDWriteByte(0x05, OLED_CMD); //
OLEDWriteByte(0xD9, OLED_CMD); //Set Pre-Charge Period
OLEDWriteByte(0xF1, OLED_CMD); //
OLEDWriteByte(0xDA, OLED_CMD); //set com pin configuartion
OLEDWriteByte(0x12, OLED_CMD); //
OLEDWriteByte(0xDB, OLED_CMD); //set Vcomh
OLEDWriteByte(0x30, OLED_CMD); //
OLEDWriteByte(0x8D, OLED_CMD); //set charge pump enable
OLEDWriteByte(0x14, OLED_CMD); //
OLEDWriteByte(0xAF, OLED_CMD); //--turn on oled panel
}
//=====================================================================================
//
// OLEDInit(); //初始化OLED
// OLEDClear();
// OLEDShowCHinese(10, 0, 0);
// OLEDShowCHinese(28, 0, 1);
// OLEDShowCHinese(46, 0, 2);
// OLEDShowCHinese(64, 0, 3);
// OLEDShowCHinese(82, 0, 4);
// OLEDShowCHinese(100, 0, 5);
// OLEDShowString(6, 3, "CAN ID:0x", 16);
// OLEDShowString(78, 3, bbb, 16);
// OLEDShowString(62, 6, ccc, 16);
//=====================================================================================
#ifndef _OLEDFONT_H_
#define _OLEDFONT_H_
//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:12*6
/************************************6*8的点阵************************************/
const unsigned char F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
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,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
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,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
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,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};
/****************************************8*16的点阵************************************/
const unsigned char F8X16[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, //! 1
0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 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
0x10, 0x16, 0x0E, 0x00, 0x00, 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, 0x80, 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, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x00, 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, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00, 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, 0x02, 0x04, 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
0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 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, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94
};
const unsigned char chinese[][32] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00},
{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00}, /*"上",0*/
{0x10, 0x60, 0x02, 0x0C, 0xC0, 0x10, 0x08, 0xF7, 0x14, 0x54, 0x94, 0x14, 0xF4, 0x04, 0x00, 0x00},
{0x04, 0x04, 0x7C, 0x03, 0x00, 0x01, 0x1D, 0x13, 0x11, 0x55, 0x99, 0x51, 0x3F, 0x11, 0x01, 0x00}, /*"海",1*/
{0x40, 0x42, 0xCC, 0x00, 0x20, 0xF0, 0x28, 0x27, 0x24, 0xE4, 0x34, 0x2C, 0x20, 0xE0, 0x00, 0x00},
{0x80, 0x40, 0x3F, 0x40, 0x80, 0xA1, 0x91, 0x8D, 0x83, 0x81, 0x9F, 0xA5, 0xA9, 0xA1, 0xB8, 0x00}, /*"逸",2*/
{0x10, 0x88, 0xC4, 0x33, 0x04, 0xF4, 0x94, 0x94, 0xF4, 0x9F, 0xF4, 0x94, 0x94, 0xF4, 0x04, 0x00},
{0x01, 0x00, 0xFF, 0x00, 0x42, 0x32, 0x02, 0x72, 0x82, 0x86, 0x9A, 0x82, 0xE2, 0x0A, 0x32, 0x00}, /*"德",3*/
{0x10, 0x60, 0x02, 0x0C, 0xC0, 0x10, 0x08, 0x27, 0x24, 0x24, 0x24, 0x24, 0x24, 0x04, 0x00, 0x00},
{0x04, 0x04, 0x7C, 0x03, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x40, 0xF0, 0x00}, /*"汽",4*/
{0x00, 0x08, 0x88, 0x48, 0x28, 0x18, 0x0F, 0xE8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00},
{0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0xFF, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x00}, /*"车",5*/
{0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00},
{0x08, 0x04, 0x03, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0E, 0x00}, /*"小",6*/
{0x00, 0x00, 0x10, 0x98, 0x94, 0x52, 0x51, 0x30, 0x10, 0x08, 0x04, 0x40, 0x80, 0x00, 0x00, 0x00},
{0x00, 0x41, 0x21, 0x11, 0x0D, 0x41, 0x81, 0x7F, 0x01, 0x01, 0x05, 0x09, 0x11, 0x63, 0x00, 0x00}, /*"糸",7*/
{0x00, 0x08, 0x88, 0x48, 0x28, 0x18, 0x0F, 0xE8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00},
{0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0xFF, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x00}, /*"车",8*/
{0x80, 0x70, 0x00, 0xFF, 0x20, 0x10, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x00},
{0x80, 0x60, 0x18, 0x07, 0x08, 0x30, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, /*"灯",9*/
};
#endif