关于TFT汉字显示一些经验总结

假如不使用字库,那就得自己生成点阵汉字。

比方说我生成一个“啊” 根据自己选择的字体大小与点阵大小(目前使用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); // 背景颜色
}
      }
}
}


}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小竹浮生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值