stm32实用篇3: 字符显示字库生成

在使用stm32显示文本时,首先要使用字模软件生成字库,如下:

stm32实用篇3: 字符显示字库生成_第1张图片

这里,使用的是Consolas字体,点阵大小为16*16(汉字),此时英文字体的大小为8*16,宽度为汉字字体的一半,然后设置选项参数(包括阴码、逐行扫描、十六进制等),具体配置如下:

stm32实用篇3: 字符显示字库生成_第2张图片

然后就可以生成字库,首先生成ASCII字库:

stm32实用篇3: 字符显示字库生成_第3张图片

会生成两个文件,即字库 + 索引:

stm32实用篇3: 字符显示字库生成_第4张图片

       因为ASCII编码表的0 ~ 31是不可见字符,从32(空格)33(感叹号!)...开始才是文本字符,因此为了节省空间,直接删去前面多余不用的不可见字符,操作如下:

stm32实用篇3: 字符显示字库生成_第5张图片

删除后:

stm32实用篇3: 字符显示字库生成_第6张图片

然后利用PCtoLCD取模软件重新加载txt文件生成字库:

stm32实用篇3: 字符显示字库生成_第7张图片

       利用WinHex软件打开字库,来看一下数据,如果生成正确的话,第一个16字节(英文为16,中文为32)应该为空格,第二个为感叹号:

stm32实用篇3: 字符显示字库生成_第8张图片

直接验证一下,这个生成的字符图案的正确性:

/* 生成的字模数据 */
uint8_t test_module[] = {
	0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,
	0x18,0x08,0x00,0X08,0X18,0X00,0X00,0X00
};


void Display_char_test(void)
{
	uint8_t i = 0, j = 0, k = 0;
	
	/* 字模数据有16行 */
	for (i = 0; i < 16; i++)
	{
		/* 每行16列,2字节 */
		for (j = 0; j < 1; j++)
		{
			/* 每个字节8位 */
			for (k = 0; k < 8; k++)
			{
				/* 对每个数据字节从高位到低位进行遍历 */
				if ((test_module[i * 1 + j] & (0X80 >> (k))) != 0)
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
		}
		printf("\n");
	}
}

串口打印结果如下:

stm32实用篇3: 字符显示字库生成_第9张图片

这和取模软件的图案一致:

stm32实用篇3: 字符显示字库生成_第10张图片

接下来,生成中文GB2312 宋体 的字库:

stm32实用篇3: 字符显示字库生成_第11张图片

stm32实用篇3: 字符显示字库生成_第12张图片

同样的,看一下生成的字库数据:

stm32实用篇3: 字符显示字库生成_第13张图片

stm32实用篇3: 字符显示字库生成_第14张图片

同理,根据生成的数据,尝试打印“顿号”:

stm32实用篇3: 字符显示字库生成_第15张图片

stm32实用篇3: 字符显示字库生成_第16张图片

至此,字库数据生成完毕。

你可能感兴趣的:(stm32专栏)