怎样在lcd彩屏上显示汉字,我们习惯使用汉字库,也有很多自己做一个汉字库,我就习惯这一种。
介绍一下 我做的显示 “ 同一个世界! 同一个梦想!”
首先 在网上下一个提取点阵的的软件生成自己的字库,
const struct typFont16 Font16lib[]={
"梦", 0x0410,0x0410,0x7F7E,0x0C10,0x1638,0x7554,0x24D3,0x0430,
0x1FE0,0x0810,0x0430,0x024C,0x0180,0x00C0,0x0030,0x000E,
"测", 0x4002,0x43E4,0x4224,0x4A21,0x4AA2,0x4AAA,0x4AA8,0x4AA4,
0x4AA4,0x4AA4,0x4AA3,0x4082,0x4142,0x4242,0x5222,0x2012,
"同", 0x0000,0x3FFE,0x2002,0x2002,0x2FFA,0x2002,0x2002,0x27F2,
0x2412,0x2412,0x2412,0x27F2,0x2412,0x2002,0x2802,0x1002,
"一", 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x7FFE,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
"个", 0x0080,0x0080,0x0140,0x0240,0x0420,0x1890,0x7088,0x2086,
0x0080,0x0080,0x0080,0x0080,0x0080,0x0080,0x0080,0x0000,
"想", 0x0008,0x3F08,0x2108,0x3F7F,0x211C,0x3F2C,0x212A,0x210A,
0x3F09,0x0000,0x0080,0x2110,0x4114,0x4814,0x0FE6,0x0000,
"世", 0x0000,0x0848,0x0848,0x0848,0x0848,0x7FFF,0x0848,0x0848,
0x0848,0x0FC8,0x0848,0x0008,0x1008,0x3FF8,0x0000,0x0000,
"界", 0x1FF8,0x1088,0x1088,0x1FF8,0x1088,0x1088,0x1FF8,0x1188,
0x0240,0x0C20,0x7258,0x2246,0x0240,0x0220,0x0210,0x0208,
"!", 0x0000,0x0000,0x0000,0x0000,0x0008,0x0008,0x0008,0x0008,
0x0008,0x0008,0x0008,0x0008,0x0008,0x0000,0x0008,0x0000,
};
汉字的点阵结构体格式为:
typedef struct typFont16 // 汉字字模数据结构
{
uc8 Index[2]; //汉字
uc16 Msk[16]; //字模
} typFont16;
在uc8 index【2】里存放汉字 将会是以国标码的格式存储 ,我们就是根据这个搜索要显示的字在什么位置
void hz_write(u8 ox,u16 oy,uc8 *p)
{
unsigned char i,x=0;
//unsigned int x,y;
ox=ox*16;
while(*p)
{
i=0;
while(1)
{
if( (*p==Font16lib[i].Index[0]) && (*(p+1)==Font16lib[i].Index[1]))
{ //找到汉字,显示
//addr=oy*(320/8)+ox+SCREE_ONE_ENDADDR;
//hz(addr,Font16lib[i].Msk);
LCD_DrawCharhanzi(ox, oy, Font16lib[i].Msk);
oy-=16;
oy+=16; //下一个显示
p+=2;
//找下一个汉字
x++;
if((x == 20))//|| (oy == 15))
{
ox += 16;
oy = 319;
x = 0;
}
oy-=16;
break;
}
i++; //下一个汉字库
if(i >= 9) //超出字库范围
{
p+=2; //找下一个汉字
break;
}
}
}
}