驱动字库芯片GT23L24M0140
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:
主机:WIN8
开发环境:MDK5.13
mcu: stm32f407VGIGH6
字库芯片:GT23L24M0140
说明:
GT23L24M0140是一款支持GB18030标准的字库芯片,有多种大小的字体可供选择。
本文驱动了其中常用的字体。
源代码:
drv_font.h
/*********************************************************************
* 字库芯片驱动层头文件
* (c)copyright 2013,jdh
* All Right Reserved
*新建日期:2015/2/2 by jdh
*修改日期:2015/2/3 by jdh
**********************************************************************/
/*********************************************************************
硬件连接说明
电路标号 单片机引脚 特殊功能
SPI1_NSS PA4 SPI1_NSS
SPI1_MISO PA6 SPI1_MISO
SPI1_MOSI PA7 SPI1_MOSI
SPI1_SCK PA5 SPI1_SCK
**********************************************************************/
#ifndef _DRV_FONT_H_
#define _DRV_FONT_H_
/*********************************************************************
* 头文件
**********************************************************************/
#include "stm32f4xx.h"
/*********************************************************************
* 函数
**********************************************************************/
/*********************************************************************
* 初始化字库芯片
**********************************************************************/
void drv_font_init(void);
/*********************************************************************
* 打开SPI使能
**********************************************************************/
void drv_font_enable(void);
/*********************************************************************
* 关闭SPI使能
**********************************************************************/
void drv_font_disable(void);
/*********************************************************************
* spi发送一个字节
*参数:dat:数据
*返回:spi接收到的字节
**********************************************************************/
uint8_t drv_font_send_byte(uint8_t dat);
#endif
drv_font.c
/*********************************************************************
* 字库芯片驱动层文件
* (c)copyright 2015,jdh
* All Right Reserved
*新建日期:2015/2/2 by jdh
*修改日期:2015/2/3 by jdh
**********************************************************************/
/*********************************************************************
* 头文件
**********************************************************************/
#include "drv_font.h"
/*********************************************************************
* 静态函数
**********************************************************************/
/*********************************************************************
* 初始化spi
**********************************************************************/
static void init_spi(void);
/*********************************************************************
* 函数
**********************************************************************/
/*********************************************************************
* 初始化字库芯片
**********************************************************************/
void drv_font_init(void)
{
//初始化spi
init_spi();
}
/*********************************************************************
* 打开SPI使能
**********************************************************************/
void drv_font_enable(void)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
}
/*********************************************************************
* 关闭SPI使能
**********************************************************************/
void drv_font_disable(void)
{
GPIO_SetBits(GPIOA, GPIO_Pin_4);
}
/*********************************************************************
* spi发送一个字节
*参数:dat:数据
*返回:spi接收到的字节
**********************************************************************/
uint8_t drv_font_send_byte(uint8_t dat)
{
while ((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);
SPI1->DR = dat;
while ((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
return (SPI1->DR);
}
/*********************************************************************
* 初始化spi
**********************************************************************/
static void init_spi(void)
{
//定义IO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure ;
//定义SPI初始化结构体
SPI_InitTypeDef SPI_InitStructure ;
//配置CS
//初始化时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_SPI1);
//管脚模式:输出口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
//类型:推挽模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//上拉下拉设置
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//IO口速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//管脚指定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
//初始化
GPIO_Init(GPIOA, &GPIO_InitStructure);
//关闭使能
drv_font_disable();
//初始化SPI
//关闭SPI
SPI_Cmd(SPI1,DISABLE);
//初始化SPI时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
//设置IO口时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);
//管脚模式:输出口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//类型:推挽模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//上拉下拉设置
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
//IO口速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
//管脚指定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
//初始化
GPIO_Init(GPIOA, &GPIO_InitStructure);
// SPI配置
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master ;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b ;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge ;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;
//SPI波特率分频设置
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16 ;
//SPI设置成LSB模式
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB ;
SPI_InitStructure.SPI_CRCPolynomial = 7 ;
SPI_Init( SPI1, &SPI_InitStructure ) ;
//启动SPI
SPI_Cmd(SPI1,ENABLE);
}
inf_font.h
/*********************************************************************
* 字库芯片接口层头文件
* (c)copyright 2015,jdh
* All Right Reserved
*新建日期:2015/2/3 by jdh
*修改日期:2015/2/5 by jdh
*修改日期:2015/2/6 by jdh
**********************************************************************/
#ifndef _INF_FONT_H_
#define _INF_FONT_H_
/*********************************************************************
* 头文件
**********************************************************************/
#include "drv_font.h"
/*********************************************************************
* 宏定义
**********************************************************************/
/*********************************************************************
* 字体定义
**********************************************************************/
/*********************************************************************
* 7*8点阵ASCII标准字符
**********************************************************************/
//字体
#define ASCII_7X8 1
//起始地址
#define ASCII_7X8_ADDR_BASE 0x080300
//宽,位数
#define ASCII_7X8_WIDTH 8
//高,位数
#define ASCII_7X8_HEIGHT 8
//字节数
#define ASCII_7X8_SIZE 8
/*********************************************************************
* 7*8点阵ASCII粗体字符
**********************************************************************/
//字体
#define ASCII_BOLD_7X8 2
//起始地址
#define ASCII_BOLD_7X8_ADDR_BASE 0x080600
//宽,位数
#define ASCII_BOLD_7X8_WIDTH 8
//高,位数
#define ASCII_BOLD_7X8_HEIGHT 8
//字节数
#define ASCII_BOLD_7X8_SIZE 8
/*********************************************************************
* 6*12点阵ASCII标准字符
**********************************************************************/
//字体
#define ASCII_6X12 3
//起始地址
#define ASCII_6X12_ADDR_BASE 0x080900
//宽,位数
#define ASCII_6X12_WIDTH 8
//高,位数
#define ASCII_6X12_HEIGHT 12
//字节数
#define ASCII_6X12_SIZE 12
/*********************************************************************
* 8*16点阵ASCII标准字符
**********************************************************************/
//字体
#define ASCII_8X16 4
//起始地址
#define ASCII_8X16_ADDR_BASE 0x080D80
//宽,位数
#define ASCII_8X16_WIDTH 8
//高,位数
#define ASCII_8X16_HEIGHT 16
//字节数
#define ASCII_8X16_SIZE 16
/*********************************************************************
* 8*16点阵ASCII粗体字符
**********************************************************************/
//字体
#define ASCII_BOLD_8X16 5
//起始地址
#define ASCII_BOLD_8X16_ADDR_BASE 0x081580
//宽,位数
#define ASCII_BOLD_8X16_WIDTH 8
//高,位数
#define ASCII_BOLD_8X16_HEIGHT 16
//字节数
#define ASCII_BOLD_8X16_SIZE 16
/*********************************************************************
* 12*24点阵ASCII标准字符
**********************************************************************/
//字体
#define ASCII_12X24 6
//起始地址
#define ASCII_12X24_ADDR_BASE 0x081B80
//宽,位数
#define ASCII_12X24_WIDTH 12
//高,位数
#define ASCII_12X24_HEIGHT 24
//字节数
#define ASCII_12X24_SIZE 48
/*********************************************************************
* 16*32点阵ASCII标准字符
**********************************************************************/
//字体
#define ASCII_16X32 7
//起始地址
#define ASCII_16X32_ADDR_BASE 0x082D80
//宽,位数
#define ASCII_16X32_WIDTH 16
//高,位数
#define ASCII_16X32_HEIGHT 32
//字节数
#define ASCII_16X32_SIZE 64
/*********************************************************************
* 16*32点阵ASCII粗体字符
**********************************************************************/
//字体
#define ASCII_BOLD_16X32 8
//起始地址
#define ASCII_BOLD_16X32_ADDR_BASE 0x084580
//宽,位数
#define ASCII_BOLD_16X32_WIDTH 16
//高,位数
#define ASCII_BOLD_16X32_HEIGHT 32
//字节数
#define ASCII_BOLD_16X32_SIZE 64
/*********************************************************************
* 12*12点阵GB18030汉字
**********************************************************************/
//字体
#define GB18030_12X12 9
//起始地址
#define GB18030_12X12_ADDR_BASE 0x093D0E
//宽,位数
#define GB18030_12X12_WIDTH 12
//高,位数
#define GB18030_12X12_HEIGHT 12
//字节数
#define GB18030_12X12_SIZE 24
/*********************************************************************
* 16*16点阵GB18030汉字
**********************************************************************/
//字体
#define GB18030_16X16 10
//起始地址
#define GB18030_16X16_ADDR_BASE 0x114FDE
//宽,位数
#define GB18030_16X16_WIDTH 16
//高,位数
#define GB18030_16X16_HEIGHT 16
//字节数
#define GB18030_16X16_SIZE 32
/*********************************************************************
* 24*24点阵GB18030汉字
**********************************************************************/
//字体
#define GB18030_24X24 11
//起始地址
#define GB18030_24X24_ADDR_BASE 0x1F43DE
//宽,位数
#define GB18030_24X24_WIDTH 24
//高,位数
#define GB18030_24X24_HEIGHT 24
//字节数
#define GB18030_24X24_SIZE 72
/*********************************************************************
* 数据结构
**********************************************************************/
/*********************************************************************
* 字体结构
**********************************************************************/
struct _Font_Type
{
uint8_t type;
uint32_t addr_base;
uint8_t width;
uint8_t height;
uint8_t size;
};
/*********************************************************************
* 函数
**********************************************************************/
/*********************************************************************
* 初始化字库芯片
**********************************************************************/
void inf_font_init(void);
/*********************************************************************
* 读取字库
*参数:font:字体
* ch:待读取的字符
* buf:读取的数据
*返回:读取数据的字节数
**********************************************************************/
uint8_t inf_font_read(uint8_t font,uint16_t ch,uint8_t *buf);
/*********************************************************************
* 将ASCII码转换成GB18030编码
*说明:在emwin中调用中文字库,如果其中有ascii码,则必须先调用此函数转换
*参数:dst:输入字符串
* src:输出字符串
**********************************************************************/
void inf_font_asc2gb18030(char *dst,char *src);
#endif
inf_font.c
/*********************************************************************
* 字库芯片接口层文件
* (c)copyright 2015,jdh
* All Right Reserved
*新建日期:2015/2/3 by jdh
*修改日期:2015/2/5 by jdh
*修改日期:2015/2/6 by jdh
**********************************************************************/
/*********************************************************************
* 头文件
**********************************************************************/
#include "inf_font.h"
#include "string.h"
/*********************************************************************
* 宏定义
**********************************************************************/
/*********************************************************************
* 字体数量
**********************************************************************/
#define FONT_NUM 5
/*********************************************************************
* 静态变量
**********************************************************************/
/*********************************************************************
* 字体结构
**********************************************************************/
static struct _Font_Type Font_Type[FONT_NUM];
/*********************************************************************
* 静态函数
**********************************************************************/
/*********************************************************************
* 初始化字体类型
**********************************************************************/
static void init_font_type(void);
/*********************************************************************
* 得到地址
*参数:font:字体
* ch:待读取的字符
*返回:地址
**********************************************************************/
static uint32_t get_address(uint8_t font,uint16_t ch);
/*********************************************************************
* 得到字体地址
*参数:ch1:字符编码第1个字节
* ch2:字符编码第2个字节
* ch3:字符编码第3个字节
* ch4:字符编码第4个字节
*返回:地址
**********************************************************************/
static uint32_t get_address_GB18030_12X12(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4);
/*********************************************************************
* 得到字体地址
*参数:ch1:字符编码第1个字节
* ch2:字符编码第2个字节
* ch3:字符编码第3个字节
* ch4:字符编码第4个字节
*返回:地址
**********************************************************************/
static uint32_t get_address_GB18030_16X16(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4);
/*********************************************************************
* 函数
**********************************************************************/
/*********************************************************************
* 初始化字库芯片
**********************************************************************/
void inf_font_init(void)
{
//初始化字库芯片
drv_font_init();
//初始化字体类型
init_font_type();
}
/*********************************************************************
* 读取字库
*参数:font:字体
* ch:待读取的字符
* buf:读取的数据
*返回:读取数据的字节数
**********************************************************************/
uint8_t inf_font_read(uint8_t font,uint16_t ch,uint8_t *buf)
{
uint32_t address = 0;
uint8_t i = 0;
uint8_t ch1 = ch >> 8;
uint8_t ch2 = ch;
//开始读取
drv_font_enable();
drv_font_send_byte(0x03);
//得到地址
address = get_address(font,ch);
//读取数据
drv_font_send_byte(address >> 16);
drv_font_send_byte(address >> 8);
drv_font_send_byte(address);
for (i = 0;i < Font_Type[font].size;i++)
{
buf[i] = drv_font_send_byte(0);
}
//关闭读取
drv_font_disable();
}
/*********************************************************************
* 将ASCII码转换成GB18030编码
*说明:在emwin中调用中文字库,如果其中有ascii码,则必须先调用此函数转换
*参数:dst:输入字符串
* src:输出字符串
**********************************************************************/
void inf_font_asc2gb18030(char *dst,char *src)
{
uint8_t len = strlen(src);
uint8_t i = 0;
uint8_t j = 0;
uint16_t temp = 0;
for (i = 0;i < len;i++)
{
if ((uint8_t)src[i] < 0x80 && (uint8_t)src[i] != 0)
{
temp = (uint8_t)src[i] + 0xa380;
dst[j++] = temp >> 8;
dst[j++] = temp;
}
else
{
dst[j++] = src[i];
}
}
}
/*********************************************************************
* 初始化字体类型
**********************************************************************/
static void init_font_type(void)
{
Font_Type[ASCII_7X8].addr_base = ASCII_7X8_ADDR_BASE;
Font_Type[ASCII_7X8].width = ASCII_7X8_WIDTH;
Font_Type[ASCII_7X8].height = ASCII_7X8_HEIGHT;
Font_Type[ASCII_7X8].size = ASCII_7X8_SIZE;
Font_Type[ASCII_BOLD_7X8].addr_base = ASCII_BOLD_7X8_ADDR_BASE;
Font_Type[ASCII_BOLD_7X8].width = ASCII_BOLD_7X8_WIDTH;
Font_Type[ASCII_BOLD_7X8].height = ASCII_BOLD_7X8_HEIGHT;
Font_Type[ASCII_BOLD_7X8].size = ASCII_BOLD_7X8_SIZE;
Font_Type[ASCII_6X12].addr_base = ASCII_6X12_ADDR_BASE;
Font_Type[ASCII_6X12].width = ASCII_6X12_WIDTH;
Font_Type[ASCII_6X12].height = ASCII_6X12_HEIGHT;
Font_Type[ASCII_6X12].size = ASCII_6X12_SIZE;
Font_Type[ASCII_8X16].addr_base = ASCII_8X16_ADDR_BASE;
Font_Type[ASCII_8X16].width = ASCII_8X16_WIDTH;
Font_Type[ASCII_8X16].height = ASCII_8X16_HEIGHT;
Font_Type[ASCII_8X16].size = ASCII_8X16_SIZE;
Font_Type[ASCII_BOLD_8X16].addr_base = ASCII_BOLD_8X16_ADDR_BASE;
Font_Type[ASCII_BOLD_8X16].width = ASCII_BOLD_8X16_WIDTH;
Font_Type[ASCII_BOLD_8X16].height = ASCII_BOLD_8X16_HEIGHT;
Font_Type[ASCII_BOLD_8X16].size = ASCII_BOLD_8X16_SIZE;
Font_Type[ASCII_12X24].addr_base = ASCII_12X24_ADDR_BASE;
Font_Type[ASCII_12X24].width = ASCII_12X24_WIDTH;
Font_Type[ASCII_12X24].height = ASCII_12X24_HEIGHT;
Font_Type[ASCII_12X24].size = ASCII_12X24_SIZE;
Font_Type[ASCII_16X32].addr_base = ASCII_16X32_ADDR_BASE;
Font_Type[ASCII_16X32].width = ASCII_16X32_WIDTH;
Font_Type[ASCII_16X32].height = ASCII_16X32_HEIGHT;
Font_Type[ASCII_16X32].size = ASCII_16X32_SIZE;
Font_Type[ASCII_BOLD_16X32].addr_base = ASCII_BOLD_16X32_ADDR_BASE;
Font_Type[ASCII_BOLD_16X32].width = ASCII_BOLD_16X32_WIDTH;
Font_Type[ASCII_BOLD_16X32].height = ASCII_BOLD_16X32_HEIGHT;
Font_Type[ASCII_BOLD_16X32].size = ASCII_BOLD_16X32_SIZE;
Font_Type[GB18030_12X12].addr_base = GB18030_12X12_ADDR_BASE;
Font_Type[GB18030_12X12].width = GB18030_12X12_WIDTH;
Font_Type[GB18030_12X12].height = GB18030_12X12_HEIGHT;
Font_Type[GB18030_12X12].size = GB18030_12X12_SIZE;
Font_Type[GB18030_16X16].addr_base = GB18030_16X16_ADDR_BASE;
Font_Type[GB18030_16X16].width = GB18030_16X16_WIDTH;
Font_Type[GB18030_16X16].height = GB18030_16X16_HEIGHT;
Font_Type[GB18030_16X16].size = GB18030_16X16_SIZE;
Font_Type[GB18030_24X24].addr_base = GB18030_24X24_ADDR_BASE;
Font_Type[GB18030_24X24].width = GB18030_24X24_WIDTH;
Font_Type[GB18030_24X24].height = GB18030_24X24_HEIGHT;
Font_Type[GB18030_24X24].size = GB18030_24X24_SIZE;
}
/*********************************************************************
* 得到地址
*参数:font:字体
* ch:待读取的字符
*返回:地址
**********************************************************************/
static uint32_t get_address(uint8_t font,uint16_t ch)
{
uint32_t address = 0;
uint8_t ch1 = ch >> 8;
uint8_t ch2 = ch;
switch (font)
{
case ASCII_7X8:
case ASCII_BOLD_7X8:
case ASCII_6X12:
case ASCII_8X16:
case ASCII_BOLD_8X16:
case ASCII_12X24:
case ASCII_16X32:
{
address = Font_Type[font].addr_base + (ch - 0x20) * Font_Type[font].size;
break;
}
case ASCII_BOLD_16X32:
{
//芯片bug,弄反了几个符号的ascii
do
{
if (ch == ';')
{
ch = ':';
break;
}
if (ch == ':')
{
ch = ';';
break;
}
if (ch == '_')
{
ch = '^';
break;
}
if (ch == '^')
{
ch = '_';
break;
}
} while (0);
address = Font_Type[font].addr_base + (ch - 0x20) * Font_Type[font].size;
break;
}
case GB18030_12X12:
{
address = Font_Type[font].addr_base + get_address_GB18030_12X12(ch1,ch2,0,0) * Font_Type[font].size;
break;
}
case GB18030_16X16:
case GB18030_24X24:
{
address = Font_Type[font].addr_base + get_address_GB18030_16X16(ch1,ch2,0,0) * Font_Type[font].size;
break;
}
}
}
/*********************************************************************
* 得到字体地址
*参数:ch1:字符编码第1个字节
* ch2:字符编码第2个字节
* ch3:字符编码第3个字节
* ch4:字符编码第4个字节
*返回:地址
**********************************************************************/
static uint32_t get_address_GB18030_12X12(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4)
{
uint32_t h = 0;
if (c2 == 0x7f)
{
return h;
}
if (c1 >= 0xA1 && c1 <= 0xa9 && c2 >= 0xa1)
{
//Section 1
h = (c1 - 0xA1) * 94 + (c2 - 0xA1);
}
else
{
if (c1 >= 0xa8 && c1 <= 0xa9 && c2 < 0xa1)
{
//Section 5
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0xa8) * 96 + (c2 - 0x40) + 846;
}
}
if (c1 >= 0xb0 && c1 <= 0xf7 && c2 >= 0xa1)
{
//Section 2
h = (c1 - 0xB0) * 94 + (c2 - 0xA1) + 1038;
}
else
{
if (c1 < 0xa1 && c1 >= 0x81 && c2 >= 0x40 )
{
//Section 3
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0x81) * 190 + (c2 - 0x40) + 1038 + 6768;
}
else
{
if(c1 >= 0xaa && c2 < 0xa1)
{
//Section 4
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0xaa) * 96 + (c2 - 0x40) + 1038 + 12848;
}
}
}
return h;
}
/*********************************************************************
* 得到字体地址
*参数:ch1:字符编码第1个字节
* ch2:字符编码第2个字节
* ch3:字符编码第3个字节
* ch4:字符编码第4个字节
*返回:地址
**********************************************************************/
static uint32_t get_address_GB18030_16X16(uint8_t c1,uint8_t c2,uint8_t c3,uint8_t c4)
{
uint32_t h = 0;
if (c2 == 0x7f)
{
return h;
}
if (c1 >= 0xA1 && c1 <= 0xa9 && c2 >= 0xa1)
{
//Section 1
h = (c1 - 0xA1) * 94 + (c2 - 0xA1);
}
else
{
if (c1 >= 0xa8 && c1 <= 0xa9 && c2 < 0xa1)
{
//Section 5
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0xa8) * 96 + (c2 - 0x40) + 846;
}
}
if (c1 >= 0xb0 && c1 <= 0xf7 && c2 >= 0xa1)
{
//Section 2
h = (c1 - 0xB0) * 94 + (c2 - 0xA1) + 1038;
}
else
{
if (c1 < 0xa1 && c1 >= 0x81 && c2 >= 0x40 )
{
//Section 3
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0x81) * 190 + (c2 - 0x40) + 1038 + 6768;
}
else
{
if(c1 >= 0xaa && c2 < 0xa1)
{
//Section 4
if (c2 > 0x7f)
{
c2--;
}
h = (c1 - 0xaa) * 96 + (c2 - 0x40) + 1038 + 12848;
}
else
{
if(c1 == 0x81 && c2 >= 0x39)
{
//四字节区1
h = 1038 + 21008 + (c3 - 0xEE) * 10 + c4 - 0x39;
}
else
{
if(c1 == 0x82)
{
//四字节区2
h = 1038 + 21008 + 161 + (c2 - 0x30) * 1260 + (c3 - 0x81) * 10 + c4 - 0x30;
}
}
}
}
}
return h;
}
测试代码:
uint8_t buf[30] = {0};
inf_font_read(ASCII_6X12,'b',buf);