原创 如何在液晶屏上显示汉字?

2010-4-4 11:52 7512 11 4 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 


1、汉字的点阵码


我现在知道的是:(1汉字可以以点阵的形式存储。2液晶可以在屏上画点。这两者结合起来就可以在液晶屏上显示汉字。最简单的方法,可以在程序中事先存储号点阵码的字符,然后要用的时候显示出来。


举个例子,小这个汉字,它的点阵码是这样的:


 6bf34fae-6a8e-4764-b0cb-9941042994da.jpg


它对应的点阵字符码是:0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00,


0x01,0x00,0x05,0x40,0x05,0x20, 0x09, 0x10,


0x09,0x08,0x11,0x04,0x21, 0x04,0x41,0x00,


0x01,0x00,0x01,0x00, 0x05,0x00,0x02,0x00


32个字节,其扫描的顺序是从左到右,从上到下。在显示的时候,再把字符点阵按相同的顺序显示在液晶屏上,就看到了小字。


2、中文文档的存储方式


那么我们看到的中文文档,它们全部都是存储的这种点阵码吗?


不是的。汉字在计算机内容实际是存储的一种特定编码。比如“小”这个字,在文档内我们在对应位置看到的可能是“D<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0 A1,也可能是“5C0F,也就是可以有不同的编码表示“小”这个汉字,这就是汉字的编码方式。


我现在听过的概念有:区位码、国标码、内码、unicodeUTF-8,还有GBKGB2312(这两个好像与国标码是相关的,具体怎么对应,我的理解还不是很清晰)。除了UTF-8适合在网络上传输,这里不管它。其它几种编码方式都是16位的,其大致关系如下:


内码 = 国标码 + 0x80  国标码 = 区位码 + 0x20


国标码 = GB2312 GBK好像是国标码的最新扩展。


汉字在计算机内部文档里面一般是以内码的形式存储。而文件系统里中文文件名一般以unicode编码的形式存储。


以上这些理解不知对不对?再去百度一下加深对这些概念的理解。


GB2312GBK都是中文的内码,GB18030好像是最新的扩展(还包括了少数名族的字符),Big5是繁体汉字的内码。嵌入式系统上一般用GB2312就行了。


D0 A1就是:“小”的内码,是一种GB2312,当然由于GBKGB18030的继承性,同样的汉字其编码是一样的。


3、中文字库的作用


当计算机程序读取一个中文文档时,它读到的是内码,为什么能够在屏幕上显示其字形呢?


方法是在计算机内部存储了一个汉字字库,存储了大部分汉字的字形点阵。而且对于每一个汉字来说,它在字库里点阵的位置 与其 内码存在着一一对应关系。也就是说只要知道了内码,就可以在字库文件里找到其点阵码,然后进行显示。


GB2312型的内码是通过以下的换算找到其在字库中的位置的,以“小”字为例:


它的内码是“D0 A1,别减去“A0 A0得到其区位码,“30 01”。字库的组织方式就是根据区位码排列的,在0x30区,序号29,每个区94个汉字,一次其序号为:(0x30-1*94 + 01-1)。当然从字节的存储位置来说,还要乘以32,(每个汉字16*16点阵,占据32个字节),综合起来,公式可以写成:


CharPos = NH-0xA1* 94 + ( NL-0xA1) * 32


我现在也不能完全确认这就是对的,我在网上下了UCDOSHZK16文件,很快就要编写一个测试程序来检验。


 


4、我们在键盘上是怎么样输入汉字的


实际上我们在键盘上的 “键入组合”,在“中文输入法”的干预下,将被转换为内码。好像有的时候,这种键入组合也可以称之为外码。


比如,我们怎么样在键盘上输入汉字“小”呢?以最常用的拼音输入法为例,我们要一次键入“xiao”四个字符,这个应该就叫做“外码”,当时起主导作用的输入法通过“查表”或“其它算法”,将这个组合方式转变成了“小”字的内码“D0 A1存储在文件内,或在计算机上传输。比如串口,你输入“小”的时候,串口实际发出的是“A1”,“D0”。(小端字节应该是这样发的吧)。


 


 


5、第一个测试程序的规划


添加一个命令mctestSTM32开发接受到这个命令后,等待串口终端的输入。若输入一个汉字,则命令处理程序打开汉字库文件,找到点阵码,在液晶上显示汉字若输入英文字符,也要能显示英文。当按下“ESC”键的时候,命令处理程序退出。


 


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户806954 2011-4-8 23:07

很通俗易懂呀,
相关推荐阅读
nthq2004 2010-05-08 20:04
USB自定义设备驱动02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  本来还想编写应用程序测试一下自定...
nthq2004 2010-05-07 21:35
USB自定义设备驱动01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、USB设备驱动入门1、学习目...
nthq2004 2010-05-04 21:01
智林开发板上实现自定义的USB HID设备
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、自定义HID设备的相关概念1...
nthq2004 2010-05-01 21:58
U盘例程在智林开发板上的移植
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、移植前的准备工作1、有哪些操...
nthq2004 2010-04-30 19:19
U盘实现流程跟踪分析02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   二、追踪USB大容量设备的实现...
nthq2004 2010-04-27 21:51
U盘实现流程跟踪分析01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   一、追踪USB大容量设备的实现...
EE直播间
更多
我要评论
1
11
关闭 站长推荐上一条 /3 下一条