汉字显示在很多单片机产品中都需要用到,显示个别汉字可使用MCU的flash保存汉字字模,而显示更多的汉字就可能要在产品中保存一整个字库作为汉字储备.
目录
一、中文显示原理
已知字模是图形数据,而图形在计算机中是由一个个像素点组成的,所以字模实质是一个个像素点数据。为方便处理,我们把字模定义成方块形的像素点阵,且每个像素点只有0和1这两种状态(可以理解为单色图像数据),下图两个宽、高为16x16的像素点阵组成的两个汉字图形,其中的黑色像素点即为文字的笔迹。计算机要表示这样的图形,只需使用16x16个二进制数据位,每个数据位记录一个像素点的状态,把黑色像素点以“1”表示,无色像素点以“0”表示即可。这样的一个汉字图形,使用16x16/8=32个字节来就可以记录下来。
二、字模的生成
可以使用PCtoLCD2002生成字模,以下是下载链接
配置字模的解析顺序,解析顺序要和代码配套,否则会显示乱码。
生成后的字模数据如下,
彭(0) 于(1) 晏(2)
0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x08,0x80,0x10,0x1C,0xFE,0x3F,0x04,0x80,
0x00,0x02,0x80,0x08,0x01,0xF8,0x9F,0x00,0x00,0x40,0x10,0x00,0x00,0x38,0xF8,0x0F,
0x18,0x18,0x0C,0x04,0x18,0x0C,0x02,0x18,0x0C,0x01,0xF8,0xCF,0x20,0x18,0x06,0x70,
0x10,0x06,0x18,0x20,0x02,0x0C,0x60,0x11,0x06,0x20,0x0F,0x03,0xF8,0xC0,0x00,0x0C,
0x30,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,/*"彭",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xF0,0xFF,0x0F,0x00,0x18,0x00,0x00,
0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x10,0xFE,0xFF,
0x3F,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,
0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x80,0x19,0x00,0x00,
0x0E,0x00,0x00,0x04,0x00,0x00,0x00,0x00,/*"于",1*/
0x00,0x00,0x00,0x00,0x00,0x02,0xC0,0xFF,0x07,0x40,0x00,0x02,0xC0,0xFF,0x03,0x40,
0x00,0x02,0x40,0x00,0x02,0xC0,0xFF,0x07,0x40,0x04,0x02,0x00,0x18,0x00,0x00,0x18,
0x00,0xF0,0xFF,0x1F,0x18,0x0C,0x08,0x08,0x06,0x14,0xFE,0xFF,0x3F,0x00,0x83,0x01,
0x00,0x81,0x00,0x80,0xC1,0x00,0x00,0x7E,0x00,0x00,0xF0,0x00,0x00,0x98,0x07,0x00,
0x07,0x0E,0xFC,0x00,0x08,0x00,0x00,0x00,/*"晏",2*/
三、字模的使用方式
1、将“lcd_show_zn”模块添加到工程中 以下分别是 lcd_show_zn.c 和lcd_show_zn.h文件链接
2. 创建对应字体
打开lcd_show_zn.c文件,添加如下内容,该内容表示一组名字为“ZN_Font16x16”的字体,这组字体里边一共有“彭于晏”三个字,如果使用这组字体,只有存在字模数据的字才能正常显示。
编写完后,在头文件中添加:extern znsFONT ZN_Font16x16; 语句,这样就能调用ZN_Font16x16字体了
3.设置字体
使用“LCD_SetZNFont”函数设置字体,一般在main函数中while(1)之前调用一次即可,除非要更换字体则需重新调用。
LCD_SetZNFont(&ZN_Font16x16);
4. 使用字体
调用“LCD_DrawCharCN”函数显示中文字体,注意,必须是由字模数据的字才能显示,没有字模数据的字不会显示,所以想显示哪些中文字体,需要生成这些字模的字体并添加到代码中。
LCD_DrawCharCN(210,220,"彭于晏"); //在坐标点(210,220)显示“彭于晏”三个中文字体
5.中文和英文混合显示
LCD_DrawCharCN函数既可以显示中文也可以显示英文
LCD_DrawCharCN(210,220,"彭于晏 niubi");//显示 彭于晏 niubi
三、实验展示
大概展示代码如下
结论:以上是使用STM32lcd简单的实现显示汉字,以及排版的点位。