字符介绍
字符分中文字符和英文字符,英文字符就是我们经常说的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;
}