这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 聊聊单片机系统的中文显示(转)

共3条 1/1 1 跳转至

聊聊单片机系统的中文显示(转)

高工
2009-03-16 18:39:47     打赏

如果你的产品或控制系统其最终用户是在我们国内,那么以某种中文形式提供用户人机界面是谁也不能逃过的一个问题。我们平时书写几个中文文字是最简单不过的一件事,尽管随着个人电脑的普及越来越多的人手写汉字象“蟹爬”(这两个字是我的小学中学老师对我手书质量的一致评价,上大学后利用无聊的党史课猛练钢笔字后变漂亮了些许)。但以单片机为控制核心的系统,要显示几个汉字并不轻而易举。
汉字就像图形一样复杂,真不知道这是我们祖先犯的错还是立的功。现在要用电脑语言描述,只有两种选择:矢量字体或点阵字体。矢量字体被用在高档的系统中,例如我们现在的电脑Windows系统用的Truetype-Font就是矢量字体。它可以用非常精细的壁画勾勒任何文字或字母,可任意放大而不失真。但其信息组成结构复杂,显示时需要经过一定的图形运算,需要较多的系统资源开销(运算带宽及内存容量)。点阵字体组成形式简单明了,显示操作容易,但放大后有棱角(点放大后是一个方块)。考虑到嵌入式系统的特点:系统紧凑,成本资源受限,显示的信息量一般不大,故而点阵字体被广泛采用,尤其针对低端应用。所以我们重点聊聊汉字的点阵显示方式。
如果你和我一样在上世纪80年代末90年代初就开始玩电脑,肯定知道一个关键词:CCDOS。CCDOS是PC在中国的发展史上一个里程碑式的玩意,因为它第一次在一统江湖的英文DOS操作系统下实现了汉字的输入和显示。在CCDOS的基础上后来又有增强型的UCDOS,提升了显示性能,增加了多种字体等。虽然我并没有花大量的时间在这些所谓的汉化系统上,但它们带给我的影响却延续至今:我所做的各类控制系统如果需要中文显示,所有点阵字体的来源就是UCDOS的几个点阵汉字库。这么多年过去了,电脑不知换了多少台,硬盘也用了不知多少个,可是这几个汉字库文件却一直被精心地保存下来。我之所以对这些老古董的字库念念不忘,一是早年混江湖时就靠这些字库做了很多应用软件换了工钱和一日三餐,小有成就感,故有一定感情;另外就是这些字库到现在还是非常有用,尤其是用单片机搞简单的人机界面时。
要比较清晰地显示汉字,至少需要12x12的点阵信息,早期的UCDOS也确实提供过这样一个点阵字库。但其显示质量的确有限,逐渐被弃之不用。现在一般的信息显示都用16x16点阵,提供标准1级和2级楷体字库;漂亮一点的还会用到24x24点阵,可以提多种不同字体。我现在用的主要就是16x16和24x24两种字库。网上有很多Windows下的点阵字模提取软件,我自己没有尝试过,但估计是利用Windows下的TrueType-Font分割成点阵型式来保存,最终的结果应该大同小异。
16x16点阵汉字生来就是为屏幕显示服务的,一个汉字用32字节,每行2个字节(16位),总共16行。如果以0-31对这一组字节编号的话,对应屏幕的点阵位置为:0-1两字节按字节数据位的高低从左至右代表第一行的32个点阵像素,… ,30-31两字节代表最后一行的32个点阵像素。
24x24点阵字库设计的初衷是为了打印。当年没有激光或喷墨打印机,只有点阵打印机,24点阵打印机算是好的了。打印头上只有一排垂直排列的打印针,所以24点阵的汉字占72字节(编号0-71),其排列顺序是垂直的:0-1-2三个字节组成第一列 ,… ,69-70-71组成最后一列。这样的组合非常不利于屏幕显示,所以要编个小程序,在不改变每个像素点位置和信息的前提下,将垂直排列的点阵字节数据变换成水平格式的字节数据,类似于上面的16点阵,只是每行3个字节,总共24行。




关键词: 聊聊     单片机     系统     中文     显示     点阵    

菜鸟
2009-03-23 22:25:43     打赏
2楼

现在有的是现存的字库,低端的单片机控制主要是控制显示控制器,不是很难吧.......


高工
2009-03-26 10:44:02     打赏
3楼
是的,可是除了液晶显示外,有时我们需要用LED点阵显示,这时我们就需要自己来烧写字库以及字库寻址了。

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]