本帖最后由 kk8346 于 2013-6-1 21:16 编辑
我是这样做的,供你参考。
以16*16汉字为例:
1、将汉字的字模数据做成结构体,结构体中包括汉字内码和字模。如下:
/** @brief 汉字字库结构体(顺序必须与字库对应) */
typedef struct
{
uint8_t Font[32]; ///< 字模(字形数据)【汉字16x16,为32字节】
TYPE_CHAR_CODE Hanzi; ///< 汉字(内码)
} TYPE_HANZI;
定义一个字模数组,数组中的每个元素是一个结构体,对应一个汉字:
const TYPE_HANZI FONT_Hanzi16x16[] =
{
0xC0,0x80,0x80,0x00,0xFC,0x80,0x80,0x80,0xFC,0x80,0x80,0x80,0x80,0xFE,0x00,0x00,
0x00,0x03,0x01,0x30,0x7F,0x01,0x01,0x31,0x7F,0x01,0x01,0x01,0x61,0xFF,0x00,0x00, "主",
0x00,0x00,0xFE,0x30,0xF0,0x30,0x30,0x30,0xB0,0xF0,0x1F,0x06,0x80,0xC0,0x60,0x00,
0x0C,0x0C,0x0D,0x0C,0x7F,0x6C,0x6C,0x66,0x67,0x66,0x63,0x63,0x61,0x3E,0x18,0x00, "功",
0x0C,0x1C,0x6C,0xC6,0xFF,0xC6,0x00,0xFE,0xC6,0xFE,0xC6,0xFE,0xC6,0xC6,0xF6,0x66,
0x06,0x06,0x76,0x1E,0x67,0xE6,0x7E,0x00,0x06,0x76,0x1E,0x06,0x66,0xE6,0x7C,0x00, "能",
}
2、需要显示某个汉字时,给出汉字的内码,让函数在字模数组中查找相同的汉字内码,一旦找到相同的汉字内码,则就找到了字模数组的索引,然后就将该索引对应的字模数据送显示。以显示“主”字为例:
本函数为显示汉字函数:LCD_DisplayString("主要问题");
当遇到“主”字时(编译器对于“主”字,是以内码方式存储),程序要用“主”字的内码去字模数组FONT_Hanzi16x16[]中查找,一旦找到,则其索引就确定了,然后,对应的32个字节的字模数据就找到了,就可以送给液晶显示了。
例如:“主”字在上面的数组的FONT_Hanzi16x16[0],即其索引为0,则其字模数据都在FONT_Hanzi16x16[0]中。
回到你的问题上,“高高兴兴快快乐乐”,只需要在字库中存放“高兴快乐”4个汉字的结构体数据。
然后,调用时:LCD_DisplayString("高高兴兴快快乐乐");
在LCD_DisplayString()这个函数中,每遇到一个汉字,就去字库里查找,显示。直到把所有汉字都显示完。
我的做法就是这样,仅供参考。
|