假如不使用字库,那就得自己生成点阵汉字。
比方说我生成一个“啊” 根据自己选择的字体大小与点阵大小(目前使用16*16的)。生成的二维数组为
const unsigned char HzLib[2][16] = { //2是点阵数组的行数 16为列数
{0x00,0x00,0x07,0x7E,0xF7,0x7E,0xF5,0x04,0xD5,0x74,0xD6,0x74,0xD6,0x54,0xD5,0x54},
{0xD5,0x54,0xF5,0x74,0xF5,0x74,0xD7,0x54,0xC4,0x04,0x04,0x1C,0x04,0x18,0x00,0x00},/*"啊",0*/
}
主函数的内容如下
int main()
{
char string[] = "啊";
u32 *temp;
temp = (u32 *)string;
ili9328_PutChinese(10, 10, *temp,0x0000,0xffff); //显示该文字
while(1);
}
汉字显示的代码如下: //“啊”转换成u32类型后,它的值为 0xalb0. 所以我们下面做算法的时候通过减去该数值确定该文字所在的数组位置。
void ili9328_PutChinese(u16 x,u16 y,u32 c,u16 charColor,u16 bkColor)
{
u8 i, j , h;
u16 tmp_char;
for(h = 0; h < 2;h++) //通过两次显示全部数组内容
{
for(i = 0; i < 8; i++)
{
tmp_char = HzLib[(c - 0xa1b0)/128 + h][2 * i];
tmp_char <<= 8;
tmp_char |= HzLib[(c - 0xa1b0)/128 + h][2 * i + 1];
for (j = 0; j < 16; j++)
{
if ( (tmp_char >> 15 - j) & 0x01 == 0x01)
{
ili9328_SetPoint(x + j, y + i + 8*h, charColor); // 字符颜色
}
else
{
ili9328_SetPoint(x + j, y + i + 8*h, bkColor); // 背景颜色
}
}
}
}
}