本帖最后由 nashui_sx 于 2022-3-28 20:41 编辑
//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
void TFT_Show_Font(u16 x,u16 y,u8 *font,u8 size)
{
u8 temp,t,t1;
u16 y0=y;
//u8 dzk[32*32/8];
u8 *dzk=mymalloc(SRAMIN,32*32/8);
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数
if(size!=12&&size!=16&&size!=24&&size!=32)return; //不支持的size
Get_HzMat(font,dzk,size); //得到相应大小的点阵数据
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
for(t1=0;t1<8;t1++)
{
if(temp&0x80)TFT_DrawPoint_Color(x,y,BRUSH_COLOR);
else TFT_DrawPoint_Color(x,y,BACK_COLOR);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
myfree(SRAMIN,dzk);
}
单独取模:阴码+逐列式+顺向
想办法把字的数组弄到dzk里面就行 如下 支持最大32 因为数组定义的u8 dzk[32*32/8]
//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
void TFT_Show_Font(u16 x,u16 y,u8 *font,u8 size)
{
u8 temp,t,t1;
u16 y0=y;
//u8 dzk[32*32/8];
//u8 *dzk=mymalloc(SRAMIN,32*32/8);
u8 csize=(size/8+((size%8)?1:0))*(size);//得到字体一个字符对应点阵集所占的字节数
if(size!=12&&size!=16&&size!=24&&size!=32)return; //不支持的size
//Get_HzMat(font,dzk,size); //得到相应大小的点阵数据
u8 dzk[]={0x02,0x00,0x42,0x00,0x33,0xFE,0x00,0x04,0x00,0x08,0x22,0x00,0x2A,0xFF,0x2A,0xA8,0x2A,0xA8,0xFE,0xA8,0x2A,0xAA,0x2A,0xA9,0x2A,0xFE,0x22,0x00,0x02,0x00,0x00,0x00};
for(t=0;t<csize;t++)
{
temp=dzk[t]; //得到点阵数据
for(t1=0;t1<8;t1++)
{
if(temp&0x80)TFT_DrawPoint_Color(x,y,BRUSH_COLOR);
else TFT_DrawPoint_Color(x,y,BACK_COLOR);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
myfree(SRAMIN,dzk);
}
|