stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)

最近在准备做19年电子设计大赛本校的校赛题目 数字式相位测量仪,便开始用4.3寸的TFT LCD液晶屏开始显示所测量的相位差,周期,频率数据。然后便开始自己设计界面UI来了。之前一直想写此博客了,但是一直没时间然后拖到了现在。正点原子的视频教程上通过TFT液晶屏显示汉字是通过建立字库进行显示,个人感觉比较繁琐,况且在做比赛或者其它的显示的时候都只需要几个汉字就差不多了,所以不需要这么麻烦去建立字库,只需通过取模软件取出自己所需的汉字,简单明了。

 


一、汉字字模的数据结构定义(32x32字模

1、// 汉字内码索引

2、 // 点阵码数据

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第1张图片

 






二、建立汉字字模表

取模软件的设置如下:

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第2张图片

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第3张图片

 

 

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第4张图片

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第5张图片

 

可以看到我们上面的图片中写字体点阵为:宽x高=32x33,但是应该是32x32,也就是我们取模时会多出32个字节,那四位16进制一般都是0,所以我们直接把他给删掉。如下图红色圈出的部分:

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第6张图片

 






三、汉字显示函数编写

//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函数里面使用了

stm32f1 TFT LCD液晶屏显示汉字不需要建立全字库(可取字模32x32,16x16)_第7张图片

 

具体的工程代码请移步:

https://download.csdn.net/download/qq_40987215/11171566

你可能感兴趣的:(stm32)