驱动字库芯片GT23L24M0140

??

驱动字库芯片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);

??

时间: 2024-07-31 08:17:34

驱动字库芯片GT23L24M0140的相关文章

在emwin中显示字库芯片GT23L24M0140的字模

?? 在emwin中显示字库芯片GT23L24M0140的字模 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: stm32f407VGIGH6 emwin: STemWin5.22 字库芯片:GT23L24M0140 说明: 项目中需要显示生僻字,所以不能使用GB2312,选择字库芯片GT23L24M0140,支持GB18030标准. 难点在于在emwin中嵌入此字库芯片的字符,emwin

触摸按键--模拟I2C驱动TS12芯片

TS12芯片驱动 使用模拟I2C驱动TS12完成触摸按键检测功能: #include "stm8s.h" #include "global.h" #include "drv_key.h" uint8_t KeyByte; /******************************************************************************* // Function: I2C_Int // Descripti

驱动enc28j60芯片

官网的驱动需要多个文件,为了提取ENC28J60驱动,改写如下: 原数据类型定义: typedef unsigned char BYTE; /* 8-bit unsigned */ typedef unsigned short int WORD; /* 16-bit unsigned */ 现数据类型定义(types.h): typedef unsigned char INT8U; /* 8-bit unsigned */ typedef unsigned short int INT16U; /

高通标准点阵字库芯片在行业中的应用

目前一些企业在开发含有点阵文字显示或者打印的产品过程中,经常会遇到字库相关的技术问题.传统的方法是通过厂商自己制作字库或者从网络获取未认证的字库,然后再研究如何通过取字模软件进行调用.此类方法会导致:1.研发人员需要研究并了解字库技术和需求,而字库涉及到的国家标准较多,内部参数繁多,对于新接触此类技术的人员是个挑战.2.字库在国家是有对应的字型和字符集标准的,由于涉及文化传播,国家将此设为强制标准,以防错误的文字在民间传播以影响到文化传承.一些企业由于对国家标准不熟悉,从各种渠道获得了非认证的字

AP5003_LED驱动点烟器芯片

概述:单一ASIC芯片设计,外围元件极少,加工组装非常简单方便,纯硬件完成各种功能,无需烧写程序,节约生产工时,可以做到成本最低超强抗干扰性能,敲击,振动,高分贝声音和磁场等都不会影响开关的正常工作,性能非常稳定可靠方案耗电极小,静态电流≤5uA恒压输出,并带有发热丝短路保护功能宽电压4.3~5V充电,充电性能优越,可用普通5V火牛和USB接口充电完善的电池保护功能,电池电压小于3.3V时,会提醒要充电LED驱动芯片功能描述:上电:LED闪3次,立即进入省电模式点烟:LED渐亮,从不亮到最亮0.

TMS320VC5509驱动74HC595芯片

1. 5509A有2个MCBSP模块,其中模块0可以配置成SPI模式,不过实际使用的时候需要把CLKX1和CLKR1接在一起,暂时没搞明白原因 MCBSP有6个引脚,DR0 RX0 作为数据的输入输出,CLKX0 CLKR0 发送和接收时钟,FSR0 FSX0发送和接收帧同步. 2. 刚开始搞得没有波形,对比其他工程,发现我犯了两个错误,第一如下,工程设置里面的宏定义错误,应该是CHIP_5509A 其次库也是csl5509ax.lib,这样的话工程就不用再另外添加了. 3. 看下波形,不过测试

高通基于STM832的128 64 LCD点阵字库显示

本方案主控采用STM8S207C8T6,1.7寸12864 lcd字库显示,LCD驱动芯片采用UC1701(可兼容ST7565),字库显示采用高通GT20L16S1Y点阵字库芯片, 以实现LCD界面上的显示.以下分别是STM8S207C8T6,UC1701和GT20L16S1Y在原理图中的模块电路.* 液晶显示部分: 原理图是依据datasheet中的阐述所绘制,其中主控电路是使用了stm8s207c8t6芯片绘制的最小系统,显示屏部分是根据设置BM0和BM1来选择总线模式绘制的电路.这里我使用

为OLED屏添加GUI支持3:字库

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM32F103 说明: GUI中有字库方能显示汉字.英文,数字等.英文数字等ASCII码128个字符保存显示easy.但汉字数万,假设不用字库芯片,用软件保存.则flash明显不够.所以仅仅加入须要显示的汉字. 本GUI用的显示方法,能够easy的显示不同字体,不同字号的汉字和ASCII码. 源码及步骤: 1.用工具FontCvt.exe

基于DM642 RAW采集格式的视频驱动开发及应用

摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频驱动,使其优化后适用于RAW采集格式,在此基础上开发了基于多级缓存管理机制的应用程序,最终达到采集速率至少每秒15帧的要求.    ?关键词:视频驱动:DM642:CCD高清传感器:RAW采集格式:缓存管理机制  ?中图分类号: TP311.11 文献标志码:A  ?  Abstract: To s