点阵屏显示UTF-8的汉字

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

点阵屏显示UTF-8的汉字

1:思路

由于UTF-8编码是不定长度编码,所以当接收到的字符中文英文混杂的时候,不能够清晰地判断哪几个字节表示一个字符,所以需要转换一下,统一表示。Unicode很好地解决这个问题,而且他们互相转换有规律可循。

英文大小写字母,中文字符,简体汉字这三类字符全部可以使用两个字节表示清楚。

UTF-8编码的字节——Unicode编码的字节(两个字节一个字符)——单片机显示字符到屏幕。2:UTF-8转Unicode(单片机完成)

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的Unicode码。

3)把下表中的UTF-8方式的二进制编码中,红色的代码连续起来,就是左边的Unicode编码。

Unicode编码(二进制)UTF-8编码方式(二进制)对应的字符

0X6211(0110001000010001)0XE68891(111001101000100010010001)我

0X0041(0000000001000001)0X41(01000001)A

0XFF01(1111111100000001)0XEFBC81(111011111011110010000001)!(中文感叹)0X3002(0011000000000010)0XE38082(111000111000000010000010)。(中文句号)4)单片机接收到一个UTF-8编码的字符串后,从以一个字节开始依次处理。如果这个字节的最高位是0,那么直接就是Unicode。如果是1,那么判断其高四位里有几个1,依据这个数字读取后续的字节数,再把后续字节里面的“10”去掉,剩下的二进制组合新的字节。得到的新的字节一般会是两个字节,就是我们需要的Unicode码。

3:Unicode取模(电脑完成)

Unicode码是按照编码规范编码的,每一个编码对应一个字符。下表列举部分:

Unicode码对应的字符Unicode码对应的字符Unicode码对应的字符0X4E00一0X4E04丄0X4E08丈0X4E01丁0X4E05丅0X4E09三0X4E02丂0X4E06丆0X4E0A上0X4E03七0X4E07万0X4E0B下上表可以得知:唯一的Unicode编码可以得到一个唯一的字符。如果我们把Unicode编码作为Flash的地址,对应的字符存储字符到单片机的Flash里面,那么当我们得到一个Unicode编码后直接去对应地址取数据即可。

这个对应关系要求我们取模的时候要注意字符顺序。取模的字符顺序必须要和Unicode编码的顺序排列一致。

Unicode编码方法包括了全球的主流语言文字,我们只关心简体中文部分,所以查资料得到下表:Unicode编码(HEX)Unicode(十进制)字符数量说明0X0021-0X007E33-12694个部分ASCII,如英文大小写,数字

0X4E00-0X9FA519968-4086920902个汉字部分,大部分汉字

0XFF01-0XFF5E65281-6537494个符号部分比如中文感叹号等0X3002122901个中文句号。较为特殊,需要使用的。

我们按照上表的顺序,将对应的字符全部输出到一个文本文件里面,那么这个文件里将会有21091个字符。我们再将这21091个字符取模,烧录进Flash里面即可。(使用Python编程,做好了这个码表文件,随本文档一起发布。)

4:显示Unicode字符(单片机完成)

得到Unicode编码后,首先判断其在上表中的那个区间,然后再计算其在存储地址中的偏移量。(比如取模后一个字符是32个字节,那么还需要再乘以32)直接依据地址读取数据,显示即可。

相关文档
最新文档