五、案例使用
5.1 读取GBK字库文件(LCD汉字显示)
产品开发中,如果设备带有LCD显示屏,一般会显示各种文字提示,或者机器操作说明,显示中文需要字库,为了方便字模的提取,可以将字库文件制作好之后放到SD NAND上,通过文件系统打开字库文件,读取字模进行显示。
下面贴出文件系统读取字模的核心代码:
/*
函数功能: 显示GBK字库数据
u32 x 范围0~319
u32 y 范围0~479
u32 size 数据的宽度(必须是8的倍数) 是正方形
u8 *p 中文
说明: 取模横向坐标必须保证是8的倍数
*/
void ILI9341_DisplayGBKData(u32 x,u32 y,u32 size,u8 *p)
{
FIL fp;
UINT br;
u8 L,H;
u32 Addr;
u16 font_size=size/8*size; //字体占用的点阵码字节大小
u8 *buff=NULL;
H=*p;
L=*(p+1);
if(L<0x7f)L=L-0x40;
else L=L-0x41;
H=H-0x81;
Addr=(190*H+L)*font_size; //中文在字库里的偏移量
buff=malloc(font_size); //使用的堆空间
if(buff==NULL)return;
switch(size)
{
case 16:
if(f_open(&fp,"0:/font/gbk16.DZK",FA_READ)!=FR_OK)
{
printf("f_open error.\r\n");
}
f_lseek(&fp,Addr);
f_read(&fp,buff,font_size,&br);
f_close(&fp);
break;
case 24:
f_open(&fp,"0:/font/gbk24.DZK",FA_READ);
f_lseek(&fp,Addr);
f_read(&fp,buff,font_size,&br);
f_close(&fp);
break;
case 32:
break;
}
//显示中文
ILI9341_DisplayData(x,y,size,size,buff);
//释放空间
free(buff);
}
这是读取字模,显示的效果:
全部回复 0
/1 