初出茅庐的小李第111篇博客之中英文点阵字符显示原理

字符介绍

字符分中文字符和英文字符,英文字符就是我们经常说的ASCII字符,中文字符就是指汉字以及一些中文常用的汉字和符号

显示原理

其实在嵌入式显示设备上想要显示一个字符本质上就是打点,通过在一定的区域内描绘出这个字符的形状从而显示出这个字符的形状。

英文字符

在这里插入图片描述
这里以这个字符“H”为例,可以发现在总共816的小格子里显示了一个字符,第一行全是不显示,第二行也是不显示,第三行也是一样,第四行就是有显示的有不显示的 如果我们把显示的地方编码成1,把不显示的地方编码成0那么第一行数据就可以拜尼马成00000000,第二行数据也是00000000,第三行同理00000000,第四行111001111,这样一来十六行数据就都可以用这种方法去表示,那么这十六行的数据就是H这个字符的字模编码数据,我们通常把这些数据写成十六进制,比如第一行写成0x00,第二行也是0x00,依次类推,以16号字体为例总共需要816个格点也就是 16个字节的数据,因为一个字节就是八个格点。

中文字符

在这里插入图片描述
同样的道理,但是不同的是同样的一个字符占用的格点数不一样,这里需要的字节数就变成了16*16个,字节数也变成了32个字节。同理字模数据也就32个字节。

ASCII字符集

把ASCII字符的字模(有规律的字节数据)做成一个集合就是ASCII字符集。

中文字符集

把中文字符的字模(有规律的字节数据)做成一个集合就是中文字符集。常见的中文字符集合有GB2312字符集GBK字符集等等。

字库文件

把字符集合的数据写到一个文件里这个文件就叫字库文件,有单独的ASCII字库文件也有,也有单独的中文字库文件,还有用这二者合成的字符文件。

在这里插入图片描述

字符文件的读取和显示

在这里插入图片描述

  • 英文字符显示

  • 在这里插入图片描述

  • 中文字符显示
    在这里插入图片描述

显示效果

英文
在这里插入图片描述
中文
在这里插入图片描述

显示代码

int main(void)
{
	char ch = 'A'; 
	char BUFF[2] = {"李"};  
	uint8_t AB     = 0x00;
	uint8_t CD     = 0x00; 
	int ZK_NUM     = 0; 
	int GB2312_NUM = 0;
	int ASCII_NUM  = 0;
	char *p = &BUFF[0];
    int i   = 0;
	AB = (uint8_t)*p;
	CD = ((uint8_t)*(p+1));
	//GB2312_NUM = ((AB-0xa1)*94+(CD-0xa0)-1); 
	printf("%X %X %d \r\n",AB,CD,GB2312_NUM);  //fseek(fp,(1445*32),SEEK_SET);
	char Table_Text[32]={0};
	//FILE *fp0 = fopen("C:/Users/23206/Desktop/ASC16.bin","r+");
	//FILE *fp1 = fopen("C:/Users/23206/Desktop/HZK16.bin","r+");
	FILE *fp = fopen("C:/Users/23206/Desktop/ZK16.bin","r+");
	for(ZK_NUM = 128;ZK_NUM<150;ZK_NUM++) 
	{
		printf("\r\n*GB2312_16_16_ZK第%-4d个字符字模*\n",ZK_NUM);
		printf("\n");
		if(ZK_NUM*16<0x00000806)
		{
		printf("\r\n*GB2312_16_16_ZK第%-4d个英文字模*\n",ASCII_NUM);
			fseek(fp,(ASCII_NUM*16),SEEK_SET);
			fgets(&Table_Text[0],16+1,fp); 
			Printf_ASCII(&Table_Text[0],16);
			ASCII_NUM++;
			printf("ASCII_NUM = %d\r\n",ASCII_NUM);
		}
		else
		{
		printf("\r\n*GB2312_16_16_ZK第%-4d个中文字模*\n",GB2312_NUM);
			fseek(fp,((GB2312_NUM)*32+0x00000806),SEEK_SET);
			fgets(&Table_Text[0],32+1,fp); 
			Printf_HZ(&Table_Text[0],16);
			GB2312_NUM++;
			printf("GB2312_NUM = %d\r\n",GB2312_NUM);
		} 
        printf("\n");
        mssleep(10);
        //sleep(1);
	}
	fclose(fp);
	return 0; 
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值