最近在准备做19年电子设计大赛本校的校赛题目 数字式相位测量仪,便开始用4.3寸的TFT LCD液晶屏开始显示所测量的相位差,周期,频率数据。然后便开始自己设计界面UI来了。之前一直想写此博客了,但是一直没时间然后拖到了现在。正点原子的视频教程上通过TFT液晶屏显示汉字是通过建立字库进行显示,个人感觉比较繁琐,况且在做比赛或者其它的显示的时候都只需要几个汉字就差不多了,所以不需要这么麻烦去建立字库,只需通过取模软件取出自己所需的汉字,简单明了。
一、汉字字模的数据结构定义(32x32字模)
1、// 汉字内码索引
2、 // 点阵码数据
二、建立汉字字模表
取模软件的设置如下:
可以看到我们上面的图片中写字体点阵为:宽x高=32x33,但是应该是32x32,也就是我们取模时会多出32个字节,那四位16进制一般都是0,所以我们直接把他给删掉。如下图红色圈出的部分:
三、汉字显示函数编写
//32X32汉字
void PutHZ3232(unsigned short x, unsigned short y, unsigned char c[2], unsigned int dcolor,unsigned int bgcolor){
unsigned int i,j,k;
//TFT_SetWindow(x,y,x+32-1, y+32-1); //选择坐标位置
LCD_Set_Window(x,y,32,32);
LCD_SetCursor(x,y);
LCD_WriteRAM_Prepare();
for (k=0;k<40;k++) { //15标示自建汉字库中的个数,循环查询内码
if ((codeHZ_32[k].Index[0]==c[0])&&(codeHZ_32[k].Index[1]==c[1])){
for(i=0;i<128;i++) {
unsigned short m=codeHZ_32[k].Msk[i];
for(j=0;j<8;j++) {
if((m&0x80)==0x80) {
LCD_WR_DATA(dcolor);
}
else {
LCD_WR_DATA(bgcolor);
}
m<<=1;
}
}
}
}
}
void showhz32str(unsigned int x1,unsigned int y1,unsigned char *str,unsigned int dcolor,unsigned int bgcolor)
{ unsigned char l=0;
while(*str)
{
PutHZ3232(x1+l*16,y1,(unsigned char*)str,dcolor, bgcolor);
str+=2;l+=2;
}
}
定义好了接着就可以在main函数里面使用了