硬件

  • lcd12864 接口:
  • 单片机:stm32f103c8t6

  • 接线:

相关参数

参考:ST7565R 数据手册

  • 数据是高位(MSB)先发送的方式
  • SCL 空闲时高电平
  • SCL 上升沿对 SI 输入采样
  • D0-D7 就是一个字节,发送时 D7 在前
  • 每 8 行就是一页

命令

Command Code:

  • A0 引脚低电平时发送的数据是命令,高电平时为数据
  • /RD 和 /WR 是 8080 和 6800 时序用的,不管它。

LCD 行列扫描方向配置命令:

  • 行扫描(Common output mode select)

    • 0xC0:从下到上
    • 0xC8:从上到下
  • 列扫描(ADC select)

    • 0xA0:从左到右
    • 0xA1:从右到左

字模软件

PCtoLCD2002

Ascii 字符:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

选项配置,本文程序使用列行式

逐列式
逐行式
列行式
行列式

程序

由于程序中使用的是 GB2312 编码,所以 Keil 工程要如下设置:

汉字使用区位码索引:GB2312 编码对照表

最终效果如下,能实现任意座标/中英文混合显示:

main.c

#include "stm32f10x.h"
#include "bsp_lcd.h"

int main(void){
    // RCC_Config();
    LCD_SPI_Init();
    LCD_ST7565R_Config();

    LCD_ClearBuffer();
    while(1){
        LCD_DrawString(30,30,12," 你好,世界!\nHello World!");
        LCD_FlushBuffer();
    }
}

bsp_lcd.h

#ifndef __BSP_LCD_H
#define __BSP_LCD_H

#include "stm32f10x.h"

// 硬件SPI和软件SPI
//#define SPI_HARD
#define SPI_SOFT

#define LCD_SPIx                 SPI1
#define LCD_SPI_APBxClock_FUN    RCC_APB2PeriphClockCmd
#define LCD_SPI_CLK              RCC_APB2Periph_SPI1
#define LCD_PIN_APBxClock_FUN    RCC_APB2PeriphClockCmd
// CS引脚
#define LCD_CS_CLK               RCC_APB2Periph_GPIOA
#define LCD_CS_PORT              GPIOA
#define LCD_CS_PIN               GPIO_Pin_4
// SCK引脚
#define LCD_SCK_CLK              RCC_APB2Periph_GPIOA
#define LCD_SCK_PORT             GPIOA
#define LCD_SCK_PIN              GPIO_Pin_5
// A0引脚
#define LCD_A0_CLK               RCC_APB2Periph_GPIOA
#define LCD_A0_PORT              GPIOA
#define LCD_A0_PIN               GPIO_Pin_6
// SDA引脚(MOSI)
#define LCD_SDA_CLK              RCC_APB2Periph_GPIOA
#define LCD_SDA_PORT             GPIOA
#define LCD_SDA_PIN              GPIO_Pin_7

// 片选电平控制,低电平是选中
#define LCD_CS_LOW()             GPIO_ResetBits(LCD_CS_PORT, LCD_CS_PIN)
#define LCD_CS_HIGH()            GPIO_SetBits(LCD_CS_PORT, LCD_CS_PIN)
// A0命令电平控制,低电平是发送命令,高是发送数据
#define LCD_A0_LOW()             GPIO_ResetBits(LCD_A0_PORT, LCD_A0_PIN )
#define LCD_A0_HIGH()            GPIO_SetBits(LCD_A0_PORT, LCD_A0_PIN)
// SCK
#define LCD_SCK_LOW()             GPIO_ResetBits(LCD_SCK_PORT, LCD_SCK_PIN)
#define LCD_SCK_HIGH()            GPIO_SetBits(LCD_SCK_PORT, LCD_SCK_PIN)
// SDA
#define LCD_SDA_LOW()             GPIO_ResetBits(LCD_SDA_PORT, LCD_SDA_PIN)
#define LCD_SDA_HIGH()            GPIO_SetBits(LCD_SDA_PORT, LCD_SDA_PIN)


// 硬件SPI等待数据全部发完延时计数,如果无显示可以适当调整
#define SPI_HARD_DELAY   ((uint32_t)50)
// 软件SPI延时
#define SPI_SOFT_DELAY   ((uint32_t)10)

// 列数
#define LCD_COLUMN_NUM 128
// 页面数
#define LCD_PAGE_NUM   8


void LCD_SPI_Init(void);
void LCD_ST7565R_Config(void);
void SPI_Send(uint8_t byte);
void LCD_SendData(uint8_t byte);
void LCD_SendCmd(uint8_t byte);
void SPI_Delay(__IO uint32_t time);
void LCD_SetPosition(uint8_t page, uint8_t column);
void LCD_FlushBuffer(void);
void LCD_ClearBuffer(void);
void LCD_DrawHanzi16x16(int16_t x, int16_t y, char* hanzi);
void LCD_DrawString(int16_t x, int16_t y, uint8_t height, char* str);
void LCD_DrawAscii8x16(int16_t x, int16_t y, char* ascii);
void LCD_DrawHanzi12x12(int16_t x, int16_t y, char* hanzi);
void LCD_DrawAscii6x12(int16_t x, int16_t y, char* ascii);
void LCD_DrawDot(uint8_t x, uint8_t y);

#endif

bsp_lcd.c

#include "bsp_lcd.h"
#include "font.h"

uint8_t LCD_Buffer[LCD_PAGE_NUM][LCD_COLUMN_NUM];


/**
 * @brief  LCD初始化
 * @param  无
 * @retval 无
 */
void LCD_SPI_Init(void){
// 硬件SPI
#if defined SPI_HARD
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    // 使能SPI时钟
    LCD_SPI_APBxClock_FUN ( LCD_SPI_CLK, ENABLE );
    // 使能SPI引脚相关的时钟
    LCD_PIN_APBxClock_FUN(LCD_CS_CLK|
            LCD_SCK_CLK|
            LCD_A0_CLK|
            LCD_SDA_CLK, 
            ENABLE );
    // CS引脚,普通IO
    GPIO_InitStructure.GPIO_Pin   = LCD_CS_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(LCD_CS_PORT, &GPIO_InitStructure);
    // A0引脚,普通IO
    GPIO_InitStructure.GPIO_Pin = LCD_A0_PIN;
    GPIO_Init(LCD_A0_PORT, &GPIO_InitStructure);
    // SCK引脚
    GPIO_InitStructure.GPIO_Pin  = LCD_SCK_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(LCD_SCK_PORT, &GPIO_InitStructure);
    // SDA(MOSI)引脚
    GPIO_InitStructure.GPIO_Pin = LCD_SDA_PIN;
    GPIO_Init(LCD_SDA_PORT, &GPIO_InitStructure);
    // 片选拉高,先不通讯LCD
    LCD_CS_HIGH();
    // SPI配置,单向只发送
    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
    // 主机模式
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    // 数据帧长度8bit
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    // 时钟极性,SCK空闲时高电平
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
    // 时钟相位,在SCK的第二(偶数)个跳变沿采样
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
    // 软件控制片选
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    // SCK时钟频率,PLCK2/256=72/32
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
    // 数据传输时高位先行
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    // CRC校验的多项式(忽略,默认是7)
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    // 初始化SPI
    SPI_Init(LCD_SPIx, &SPI_InitStructure);
    // 使能SPI
    SPI_Cmd(LCD_SPIx, ENABLE);

// 软件SPI
#elif defined SPI_SOFT
    GPIO_InitTypeDef GPIO_InitStructure;
    // 使能GPIO时钟
    LCD_PIN_APBxClock_FUN(LCD_CS_CLK|
            LCD_SCK_CLK|
            LCD_A0_CLK|
            LCD_SDA_CLK, 
            ENABLE );
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    // CS
    GPIO_InitStructure.GPIO_Pin   = LCD_CS_PIN;
    GPIO_Init(LCD_CS_PORT, &GPIO_InitStructure);
    // A0
    GPIO_InitStructure.GPIO_Pin = LCD_A0_PIN;
    GPIO_Init(LCD_A0_PORT, &GPIO_InitStructure);
    // SCK
    GPIO_InitStructure.GPIO_Pin = LCD_SCK_PIN;
    GPIO_Init(LCD_SCK_PORT, &GPIO_InitStructure);
    // SDA
    GPIO_InitStructure.GPIO_Pin = LCD_SDA_PIN;
    GPIO_Init(LCD_SDA_PORT, &GPIO_InitStructure);
    LCD_CS_HIGH();
    LCD_SCK_HIGH();
#endif
}


/**
 * @brief  ST7565R参数配置
 * @param  无
 * @retval 无
 */
void LCD_ST7565R_Config(void){
    // 软复位
    LCD_SendCmd(0xe2);
    // 关闭显示
    LCD_SendCmd(0xAE);
    // 设置正向显示(Display normal/reverse)
    LCD_SendCmd(0xA6);
    // 电源控制,全部开启(Power Control set)
    LCD_SendCmd(0x2F);
    // 1/9偏压比(bias)
    LCD_SendCmd(0xA2);
    // 行扫描顺序,从上到下(Common output mode select)
    LCD_SendCmd(0xC8);
    // 列扫描顺序,从左到右(ADC select)
    LCD_SendCmd(0xA0);
    // 起始行(Display start line set)
    LCD_SendCmd(0x40);
    // 粗调对比度,范围0x20-0x27,命令17
    LCD_SendCmd(0x24);
    // 微调对比度,命令18
    LCD_SendCmd(0x81);
    // 微调对比度的值,范围0x00-0x3F,命令18
    LCD_SendCmd(0x20);
    // 开启显示
    LCD_SendCmd(0xAF);
}


/**
 * @brief  SPI 发送函数
 * @param  byte: 一个字节
 * @retval 无
 */
void SPI_Send(uint8_t byte){
// 硬件SPI
#if defined SPI_HARD
    __IO uint32_t  timeout = 100;
    // 等待发送缓冲区为空,TXE事件
    while(SPI_I2S_GetFlagStatus(LCD_SPIx , SPI_I2S_FLAG_TXE) == RESET){
        if((timeout--) == 0) return;
    }
    SPI_I2S_SendData(LCD_SPIx , byte);
    // 这里必须要延时,SPI_I2S_SendData只负责把数据放入发送寄存器中,
    // 还需要等待移位寄存器把数据一位位发送出去
    SPI_Delay(SPI_HARD_DELAY);

// 软件SPI
#elif defined SPI_SOFT
    uint8_t i = 0x80;
    do{
        LCD_SCK_LOW();
        if(byte & i)
            LCD_SDA_HIGH();
        else
            LCD_SDA_LOW();
        SPI_Delay(SPI_SOFT_DELAY);
        LCD_SCK_HIGH();
        SPI_Delay(SPI_SOFT_DELAY);
        i >>= 1;
    }while(i > 0);
#endif
}


/**
 * @brief  发送数据
 * @param  byte:一个字节
 * @retval 无
 */
void LCD_SendData(uint8_t byte){
    LCD_CS_LOW();
    LCD_A0_HIGH();
    SPI_Send(byte);
    LCD_CS_HIGH();
}


/**
 * @brief  发送命令
 * @param  byte:一个字节
 * @retval 无
 */
void LCD_SendCmd(uint8_t byte){
    LCD_CS_LOW();
    LCD_A0_LOW();
    SPI_Send(byte);
    LCD_CS_HIGH();
}


/**
 * @brief  延时
 * @param  time
 * @retval 
 */
void SPI_Delay(__IO uint32_t time){
    while(time--);
}


/**
 * @brief  设置LCD写入地址
 * @param  page:页地址
 * @param  column:列地址
 * @retval 
 */
void LCD_SetPosition(uint8_t page, uint8_t column){
    // 设置页面地址
    LCD_SendCmd(0xB0 + page);
    // 设置列地址高4位
    LCD_SendCmd(0x10 + (column >> 4));
    // 设置列地址低四位
    LCD_SendCmd(0x00 + (column & 0x0F));
}


/**
 * @brief  刷新缓冲区
 * @param  无
 * @retval 无
 */
void LCD_FlushBuffer(void){
    uint16_t i, j;
    for(i = 0; i < LCD_PAGE_NUM; i++){
        for(j = 0; j < LCD_COLUMN_NUM; j++){
            LCD_SetPosition(i,j);
            LCD_SendData(LCD_Buffer[i][j]);
            LCD_Buffer[i][j] = 0x00;
        }
    }
}


/**
 * @brief  清空缓冲区
 * @param  无
 * @retval 无
 */
void LCD_ClearBuffer(void){
    uint16_t i, j;
    for(i = 0; i < LCD_PAGE_NUM; i++){
        for(j = 0; j < LCD_COLUMN_NUM; j++){
            LCD_Buffer[i][j] = 0x00;
        }
    }
}


/**
 * @brief  绘制一串字符
 * @param  x: 横坐标
 * @param  y: 纵坐标
 * @param  height: 字体高度 12、16
 * @param  str: 字符串指针
 * @retval 
 */
void LCD_DrawString(int16_t x, int16_t y, uint8_t height, char* str){
    uint8_t i = 0;
    int16_t xSaevd = x;
    while(str[i] != '\0'){
        // 判断换行
        if(str[i] == '\n'){
            x = xSaevd;
            y += height;
            str++;
        }
        // 判断GB2312中文编码
        else if((uint8_t)str[i] > 0xA0){
        //else if((uint8_t)str[i] & 0x80){
            if(height < 16){
                LCD_DrawHanzi12x12(x, y, str);
                x += 12;
            }else if(height >= 16){
                LCD_DrawHanzi16x16(x, y, str);
                x += 16;
            }
            str += 2;
        }
        // 判断ASCII编码
        else if((uint8_t)str[i] < 0x7F){
            if(height < 16){
                LCD_DrawAscii6x12(x, y, str);
                x += 6;
            }else if(height >= 16){
                LCD_DrawAscii8x16(x, y, str);
                x += 8;
            }
            str++;
        }else{
            str++;
        }
    }
}


/**
 * @brief  绘制一个16x16汉字
 * @param  
 * @retval 
 */
void LCD_DrawHanzi16x16(int16_t x, int16_t y, char* hanzi){
    int16_t  page    = y / 8;
    int16_t  offset  = (8 - ((y + 1) % 8)) % 8;
    uint32_t temp    = 0;
    uint8_t* p       = (uint8_t*)&temp;
    uint8_t* mask;
    int16_t i;
    if(x < 0 - 15 || x > 127 || y < 0 || y > 63 + 15){
        return;
    }
    if((mask = getHanZi16x16Mask(hanzi)) == 0){
        return;
    }
    for(i = 0; i < 16; i++){
        if(x + i < 0 || x + i > 127){
            continue;
        }
        temp = 0;
        p[1] = mask[i];
        p[2] = mask[i + 16];
        temp = temp >> offset;
        if(page >= 0){
            LCD_Buffer[page][x + i] &= ~(0xFF >> offset);
            LCD_Buffer[page][x + i] |= p[2];
        }
        if(page - 1 >= 0){
            LCD_Buffer[page - 1][x + i] = p[1];
        }
        if(page - 2 >= 0){
            LCD_Buffer[page - 2][x + i] &= (0xFF >> offset);
            LCD_Buffer[page - 2][x + i] |= p[0];
        }
    }
}


/**
 * @brief  绘制一个12x12汉字
 * @param  
 * @retval 
 */
void LCD_DrawHanzi12x12(int16_t x, int16_t y, char* hanzi){
    int16_t  page    = (y + 4) / 8;
    int16_t  offset  = (8 - ((y + 4 + 1) % 8)) % 8;
    uint32_t temp    = 0;
    uint8_t* p       = (uint8_t*)&temp;
    uint8_t* mask;
    int16_t i;
    if(x < 0 - 11 || x > 127 || y < 0 || y > 63 + 11){
        return;
    }
    if((mask = getHanZi12x12Mask(hanzi)) == 0){
        return;
    }
    for(i = 0; i < 12; i++){
        if(x + i < 0 || x + i > 127){
            continue;
        }
        temp = 0;
        p[1] = mask[i];
        p[2] = mask[i + 12];
        temp = temp >> offset;
        if(page >= 0){
            LCD_Buffer[page][x + i] &= ~(0x0F >> offset);
            LCD_Buffer[page][x + i] |= p[2];
        }
        if(page - 1 >= 0){
            LCD_Buffer[page - 1][x + i] = p[1];
        }
        if(page - 2 >= 0){
            LCD_Buffer[page - 2][x + i] &= (0xFF >> offset);
            LCD_Buffer[page - 2][x + i] |= p[0];
        }
    }
}


/**
 * @brief  绘制一个8x16 ascii字符
 * @param  
 * @retval 
 */
void LCD_DrawAscii8x16(int16_t x, int16_t y, char* ascii){
    int16_t  page    = y / 8;
    int16_t  offset  = (8 - ((y + 1) % 8)) % 8;
    uint32_t temp    = 0;
    uint8_t* p       = (uint8_t*)&temp;
    uint8_t* mask;
    int16_t i;
    if(x < 0 - 7 || x > 127 || y < 0 || y > 63 + 15){
        return;
    }
    if((mask = getAscii8x16Mask(ascii)) == 0){
        return;
    }
    for(i = 0; i < 8; i++){
        if(x + i < 0 || x + i > 127){
            continue;
        }
        temp = 0;
        p[1] = mask[i];
        p[2] = mask[i + 8];
        temp = temp >> offset;
        if(page >= 0){
            LCD_Buffer[page][x + i] &= ~(0xFF >> offset);
            LCD_Buffer[page][x + i] |= p[2];
        }
        if(page - 1 >= 0){
            LCD_Buffer[page - 1][x + i] = p[1];
        }
        if(page - 2 >= 0){
            LCD_Buffer[page - 2][x + i] &= (0xFF >> offset);
            LCD_Buffer[page - 2][x + i] |= p[0];
        }
    }
}


/**
 * @brief  绘制一个6x12 ascii字符
 * @param  
 * @retval 
 */
void LCD_DrawAscii6x12(int16_t x, int16_t y, char* ascii){
    int16_t  page    = (y + 4) / 8;
    int16_t  offset  = (8 - ((y + 4 + 1) % 8)) % 8;
    uint32_t temp    = 0;
    uint8_t* p       = (uint8_t*)&temp;
    uint8_t* mask;
    int16_t i;
    if(x < 0 - 5 || x > 127 || y < 0 || y > 63 + 11){
        return;
    }
    if((mask = getAscii6x12Mask(ascii)) == 0){
        return;
    }
    for(i = 0; i < 6; i++){
        if(x + i < 0 || x + i > 127){
            continue;
        }
        temp = 0;
        p[1] = mask[i];
        p[2] = mask[i + 6];
        temp = temp >> offset;
        if(page >= 0){
            LCD_Buffer[page][x + i] &= ~(0x0F >> offset);
            LCD_Buffer[page][x + i] |= p[2];
        }
        if(page - 1 >= 0){
            LCD_Buffer[page - 1][x + i] = p[1];
        }
        if(page - 2 >= 0){
            LCD_Buffer[page - 2][x + i] &= (0xFF >> offset);
            LCD_Buffer[page - 2][x + i] |= p[0];
        }
    }
}


/**
 * @brief  绘制一个点
 * @param  
 * @retval 
 */
void LCD_DrawDot(uint8_t x, uint8_t y){
    uint8_t page   = y / LCD_PAGE_NUM;
    uint8_t column = x;
    uint8_t offset = y % LCD_PAGE_NUM;
    LCD_Buffer[page][column] |= 0x01 << offset;
}

font.h

#ifndef __FONT_H
#define __FONT_H
#include "stm32f10x.h"


typedef struct{
    uint8_t index[2];
    uint8_t mask[32];
}HZ16x16_t;
#define HanZi16x16_NUM 4


typedef struct{
    uint8_t index[2];
    uint8_t mask[24];
}HZ12x12_t;
#define HanZi12x12_NUM 4


typedef struct{
    uint8_t mask[16];
}Ascii8x16_t;
#define Ascii8x16_NUM 95


typedef struct{
    uint8_t mask[12];
}Ascii6x12_t;
#define Ascii6x12_NUM 95


uint8_t* getHanZi12x12Mask(char* str);
uint8_t* getHanZi16x16Mask(char* str);
uint8_t* getAscii6x12Mask(char* str);
uint8_t* getAscii8x16Mask(char* str);

#endif

font.c

#include "font.h"

const HZ16x16_t HanZi16x16[HanZi16x16_NUM] = {
// 你 :GB2312十六进制区位码
{0xC4,0xE3,
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00},
// 好	
{0xBA,0xC3,
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},
// 世
{0xCA,0xC0,
0x20,0x20,0x20,0xFE,0x20,0x20,0xFF,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x00,0x00},
// 界
{0xBD,0xE7,
0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,
0x08,0x08,0x04,0x84,0x62,0x1E,0x01,0x00,0x01,0xFE,0x02,0x04,0x04,0x08,0x08,0x00},
};


const HZ12x12_t HanZi12x12[HanZi12x12_NUM] = {
// 你
{0xC4,0xE3,
0x20,0x10,0xFC,0x03,0x10,0xCF,0x04,0xF4,0x04,0x54,0x8C,0x00,0x00,0x00,0x0F,0x00,
0x02,0x01,0x08,0x0F,0x00,0x00,0x03,0x00},
// 好
{0xBA,0xC3,
0x88,0x78,0x0F,0x88,0x78,0x42,0x42,0xF2,0x4A,0x46,0x40,0x00,0x08,0x05,0x02,0x05,
0x08,0x00,0x08,0x0F,0x00,0x00,0x00,0x00},
// 世
{0xCA,0xC0,
0x10,0x10,0xFE,0x10,0x10,0xFF,0x10,0x10,0xFF,0x10,0x10,0x00,0x00,0x00,0x0F,0x08,
0x08,0x09,0x09,0x09,0x09,0x08,0x08,0x00},
// 界
{0xBD,0xE7,
0x80,0x9F,0x95,0x55,0x55,0x3F,0x55,0x55,0x95,0x9F,0x80,0x00,0x00,0x08,0x04,0x03,
0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00},
};


const Ascii8x16_t Ascii8x16[Ascii8x16_NUM] = {
{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,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00},/*"#",3*/
{0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00},/*"$",4*/
{0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/
{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10},/*"&",6*/
{0x00,0x12,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,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00},/*"/",15*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/
{0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00},/*"1",17*/
{0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/
{0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00},/*"3",19*/
{0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24},/*"4",20*/
{0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/
{0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00},/*"6",22*/
{0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00},/*"7",23*/
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/
{0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,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,0x00,0xE0,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/
{0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"=",29*/
{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/
{0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00},/*"?",31*/
{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x2F,0x28,0x17,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,0x01,0x3E,0x01,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,0x10,0x28,0x28,0x30,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*/
{0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,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,0x04,0x38,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,0x04,0x00,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,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00},/*"a",65*/
{0x10,0xF0,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,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00},/*"e",69*/
{0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,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*/
{0x10,0xF0,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*/
{0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00},/*"k",75*/
{0x00,0x10,0x10,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,0x91,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/
{0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,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,0x10,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,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00},/*"v",86*/
{0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01},/*"w",87*/
{0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00},/*"x",88*/
{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,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,0x00,0xFC,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40},/*"{",91*/
{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/
{0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};


const Ascii6x12_t Ascii6x12[Ascii6x12_NUM] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"!",1*/
{0x00,0x04,0x03,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x90,0xFC,0x90,0xFC,0x90,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"#",3*/
{0x18,0x24,0xFE,0x44,0x88,0x00,0x01,0x02,0x07,0x02,0x01,0x00},/*"$",4*/
{0x38,0x44,0xF8,0xD0,0x2C,0xC0,0x00,0x03,0x00,0x01,0x02,0x01},/*"%",5*/
{0xC0,0x38,0xE4,0x18,0xE0,0x20,0x01,0x02,0x02,0x01,0x02,0x01},/*"&",6*/
{0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0xF8,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x00},/*"(",8*/
{0x00,0x01,0x06,0xF8,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x00},/*")",9*/
{0x90,0x60,0xF8,0x60,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00},/*"*",10*/
{0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x00},/*",",12*/
{0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0xC0,0x30,0x0C,0x02,0x04,0x03,0x00,0x00,0x00,0x00},/*"/",15*/
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"0",16*/
{0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"1",17*/
{0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00},/*"2",18*/
{0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"3",19*/
{0xC0,0xA0,0x98,0xFC,0x80,0x00,0x00,0x00,0x02,0x03,0x02,0x00},/*"4",20*/
{0x7C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"5",21*/
{0xF0,0x48,0x24,0x24,0xC8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"6",22*/
{0x00,0x04,0xC4,0x34,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"7",23*/
{0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"8",24*/
{0x38,0x44,0x44,0x24,0xF8,0x00,0x01,0x02,0x02,0x01,0x00,0x00},/*"9",25*/
{0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00},/*";",27*/
{0x00,0x60,0x90,0x08,0x04,0x00,0x00,0x00,0x00,0x01,0x02,0x00},/*"<",28*/
{0x50,0x50,0x50,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x04,0x08,0x90,0x60,0x00,0x00,0x02,0x01,0x00,0x00,0x00},/*">",30*/
{0x18,0x04,0xC4,0x24,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00},/*"?",31*/
{0xF0,0x08,0xE4,0xF4,0x84,0x78,0x00,0x01,0x02,0x02,0x02,0x01},/*"@",32*/
{0x00,0xE0,0x9C,0xF0,0x80,0x00,0x02,0x03,0x00,0x00,0x03,0x02},/*"A",33*/
{0x04,0xFC,0x24,0x24,0xD8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"B",34*/
{0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"C",35*/
{0x04,0xFC,0x04,0x04,0xF8,0x00,0x02,0x03,0x02,0x02,0x01,0x00},/*"D",36*/
{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"E",37*/
{0x04,0xFC,0x24,0x74,0x0C,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"F",38*/
{0xF0,0x08,0x04,0x44,0xCC,0x40,0x00,0x01,0x02,0x02,0x01,0x00},/*"G",39*/
{0x04,0xFC,0x20,0x20,0xFC,0x04,0x02,0x03,0x00,0x00,0x03,0x02},/*"H",40*/
{0x04,0x04,0xFC,0x04,0x04,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"I",41*/
{0x00,0x04,0x04,0xFC,0x04,0x04,0x0C,0x08,0x08,0x07,0x00,0x00},/*"J",42*/
{0x04,0xFC,0x24,0x50,0x8C,0x04,0x02,0x03,0x02,0x00,0x03,0x02},/*"K",43*/
{0x04,0xFC,0x04,0x00,0x00,0x00,0x02,0x03,0x02,0x02,0x02,0x03},/*"L",44*/
{0xFC,0x3C,0xC0,0x3C,0xFC,0x04,0x03,0x00,0x03,0x00,0x03,0x02},/*"M",45*/
{0x04,0xFC,0x30,0xC4,0xFC,0x04,0x02,0x03,0x02,0x00,0x03,0x00},/*"N",46*/
{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},/*"O",47*/
{0x04,0xFC,0x24,0x24,0x18,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"P",48*/
{0xF8,0x84,0x84,0x04,0xF8,0x00,0x01,0x02,0x02,0x07,0x05,0x00},/*"Q",49*/
{0x04,0xFC,0x24,0x64,0x98,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"R",50*/
{0x18,0x24,0x24,0x44,0x8C,0x00,0x03,0x02,0x02,0x02,0x01,0x00},/*"S",51*/
{0x0C,0x04,0xFC,0x04,0x0C,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"T",52*/
{0x04,0xFC,0x00,0x00,0xFC,0x04,0x00,0x01,0x02,0x02,0x01,0x00},/*"U",53*/
{0x04,0x7C,0x80,0xE0,0x1C,0x04,0x00,0x00,0x03,0x00,0x00,0x00},/*"V",54*/
{0x3C,0xC0,0x7C,0xC0,0x3C,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"W",55*/
{0x04,0x9C,0x60,0x9C,0x04,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"X",56*/
{0x04,0x3C,0xC0,0x3C,0x04,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"Y",57*/
{0x0C,0x84,0x64,0x1C,0x04,0x00,0x02,0x03,0x02,0x02,0x03,0x00},/*"Z",58*/
{0x00,0x00,0xFF,0x01,0x01,0x00,0x00,0x00,0x07,0x04,0x04,0x00},/*"[",59*/
{0x00,0x06,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x00},/*"\",60*/
{0x00,0x01,0x01,0xFF,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00},/*"]",61*/
{0x00,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08},/*"_",63*/
{0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x40,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"a",65*/
{0x02,0xFE,0x20,0x20,0xC0,0x00,0x00,0x03,0x02,0x02,0x01,0x00},/*"b",66*/
{0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"c",67*/
{0x00,0xC0,0x20,0x22,0xFE,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"d",68*/
{0x00,0xC0,0xA0,0xA0,0xC0,0x00,0x00,0x01,0x02,0x02,0x02,0x00},/*"e",69*/
{0x00,0x20,0xFC,0x22,0x22,0x04,0x00,0x02,0x03,0x02,0x02,0x00},/*"f",70*/
{0x00,0x40,0xA0,0xA0,0x60,0x20,0x00,0x05,0x0A,0x0A,0x0A,0x04},/*"g",71*/
{0x02,0xFE,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"h",72*/
{0x00,0x20,0xE6,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00},/*"i",73*/
{0x00,0x00,0x20,0xE6,0x00,0x00,0x08,0x08,0x08,0x07,0x00,0x00},/*"j",74*/
{0x02,0xFE,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x01,0x02,0x00},/*"k",75*/
{0x02,0x02,0xFE,0x00,0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00},/*"l",76*/
{0xE0,0x20,0xE0,0x20,0xC0,0x00,0x03,0x00,0x03,0x00,0x03,0x00},/*"m",77*/
{0x20,0xE0,0x20,0x20,0xC0,0x00,0x02,0x03,0x02,0x00,0x03,0x02},/*"n",78*/
{0x00,0xC0,0x20,0x20,0xC0,0x00,0x00,0x01,0x02,0x02,0x01,0x00},/*"o",79*/
{0x20,0xE0,0x20,0x20,0xC0,0x00,0x08,0x0F,0x0A,0x02,0x01,0x00},/*"p",80*/
{0x00,0xC0,0x20,0x20,0xE0,0x00,0x00,0x01,0x02,0x0A,0x0F,0x08},/*"q",81*/
{0x20,0xE0,0x40,0x20,0x20,0x00,0x02,0x03,0x02,0x00,0x00,0x00},/*"r",82*/
{0x00,0x60,0xA0,0xA0,0x20,0x00,0x00,0x02,0x02,0x02,0x03,0x00},/*"s",83*/
{0x00,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,0x03,0x02,0x02,0x00},/*"t",84*/
{0x20,0xE0,0x00,0x20,0xE0,0x00,0x00,0x01,0x02,0x02,0x03,0x02},/*"u",85*/
{0x20,0xE0,0x00,0xE0,0x20,0x00,0x00,0x00,0x03,0x00,0x00,0x00},/*"v",86*/
{0x60,0x80,0xE0,0x80,0x60,0x00,0x00,0x03,0x00,0x03,0x00,0x00},/*"w",87*/
{0x20,0x60,0x80,0x60,0x20,0x00,0x02,0x03,0x00,0x03,0x02,0x00},/*"x",88*/
{0x20,0xE0,0x00,0x00,0xE0,0x20,0x08,0x08,0x05,0x03,0x00,0x00},/*"y",89*/
{0x00,0x20,0xA0,0x60,0x20,0x00,0x00,0x02,0x03,0x02,0x02,0x00},/*"z",90*/
{0x00,0x00,0x20,0xFF,0x01,0x00,0x00,0x00,0x00,0x07,0x04,0x00},/*"{",91*/
{0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00},/*"|",92*/
{0x00,0x01,0xDF,0x20,0x00,0x00,0x00,0x04,0x07,0x00,0x00,0x00},/*"}",93*/
{0x02,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};


/**
  * @brief  获取12x12大小汉字的点阵数据指针
  * @param  str:字符指针
  * @retval 返回点阵数据首字节地址
  */
uint8_t* getHanZi12x12Mask(char* str){
    uint16_t i;
    for(i = 0; i < HanZi12x12_NUM; i++){
        if(str[0] == HanZi12x12[i].index[0] && str[1] == HanZi12x12[i].index[1]){
            return (uint8_t*)HanZi12x12[i].mask;
        }
    }
    return 0;
}


/**
  * @brief  获取16x16大小汉字的点阵数据指针
  * @param  str:字符指针
  * @retval 返回点阵数据首字节地址
  */
uint8_t* getHanZi16x16Mask(char* str){
    uint16_t i;
    for(i = 0; i < HanZi16x16_NUM; i++){
        if(str[0] == HanZi16x16[i].index[0] && str[1] == HanZi16x16[i].index[1]){
            return (uint8_t*)HanZi16x16[i].mask;
        }
    }
    return 0;
}


/**
  * @brief  获取6x12大小Ascii的点阵数据指针
  * @param  str:字符指针
  * @retval 返回点阵数据首字节地址
  */
uint8_t* getAscii6x12Mask(char* str){
    int16_t i = *str - 0x20;
    if(i>= 0 && i < Ascii6x12_NUM){
        return (uint8_t*)Ascii6x12[i].mask;
    }
    return 0;
}


/**
  * @brief  获取8x16大小Ascii的点阵数据指针
  * @param  str:字符指针
  * @retval 返回点阵数据首字节地址
  */
uint8_t* getAscii8x16Mask(char* str){
    int16_t i = *str - 0x20;
    if(i>= 0 && i < Ascii8x16_NUM){
        return (uint8_t*)Ascii8x16[i].mask;
    }
    return 0;
}