资源描述
LCD字符显示,我们详细介绍了如何驱动LCD,对于在LCD屏上呈现各种简单的图形已经不是一件高不可攀的难事。 但如何绘制ASC码呢?,其实每一字符就是一幅图像,字符的大小对应于图像的大小,字符的笔画对应于图像的内容。 那么如何把字符转换为图像呢?,简单的方法是使用“字模提取”之类的软件,它能够把任意的字符转换为一个字节型的数组,数组元素中的每一位代表LCD上的一个像素点,当为1时,表示该位置为字符的一个笔画,需要上色,而为0时,表示不是笔画,不需要上色。,一个字符想要在168的面积上显示,即该字符的宽8个像素,高为16个像素,因为每一个像素用一位来表示,因此用字模提取软件生成的字节型数组,一共有168816个字节。,0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,/*“A“,0*/,1.在字模提取的过程中,顺序不同,得到的数组就不同,一般来说是从字符的左上角开始,从左向右,从上到下取模,这样程序编写上会方便一些。,2.相同字体大小的中文字符和ASCII码字符的宽度还有所不同,一般ASCII码字符的宽度是中文字符宽度的一半,所以显示中文字符的程序和显示ASCII码字符的程序还略有不同。,注意:,当把一个字符取模变成一个数组后,只要对该数组中每个元素的每一位依次进行判断,对值为1的位和值为0的位进行不同的上色处理,即可完成一个字符的绘制。,unsigned char ch= 0x09,0x00,0x09,0x80,0x11,0x04,0x13,0xFE,0x22,0x04,0x34,0x48,0x68,0x40,0xA2,0x50, 0x23,0x48,0x22,0x48,0x24,0x44,0x24,0x46,0x28,0x44,0x21,0x40,0x20,0x80,0x00,0x00,/*“你“,0*/,练习: 根据课件,通过取模软件取出自己的名字的字模,并在LCD上显示自己的名字。 在LCD上显示自己的英文名。,如果要在程序中显示大量的中文字符,是不是要把这些字符都取模啊?,是,但前人已经为我们完成了这一步,做成了数据库,并且进行了编码,只要按照编码规则调用该库文件,就可以检索到相要的字符。,编码规则:,每个汉字是由两个字节表示的, (第一个字节-0xa0) =区号, (第二个字节-0xa0) =位号 如: unsigned ch=“欢迎光临”; 欢的第一个字节是ch0-0xa0 欢的第二个字节是ch1-0xa0 为了把汉字跟ASCII码值区分,汉字的值 是从0xa0开始,所以要减去0xa0,那么汉字在汉字库中的位置为: 94(区号1)(位号1) 94表示的是每个区里一共有94个汉字, 减1表示的是数组是从0开始, 区号和位号是从1开始的。 具体到汉字在某一数据库中的位置,还需要乘以一个汉字字模所占的字节数, 即94(区号1)(位号1)一个汉字字模所占字节数。,一个字模大小为1616的宋体数据库,库里每个汉字所占的字节为1616832, 则每个汉字在该宋体数据库中的位置为: 94(区号1)(位号1)32。,ASCII码的字符调用比汉字字符要简单,只要把它乘以字模所占字节数即可找到该字符所在字库的位置, 如816的ASCII字库,ASCII码在该字库的位置为ASCII16。,unsigned char String=“; const unsigned char *mould; mould = ,如果中文字符和ASCII码混合在一样, 如何区分它们呢?,ASCII码的最高位是0,而中文的最高位是1,因此当读取到的一个字节的最高位是0,则该字节为ASCII码,它的下一个字节与这个字节无关; 当取得到的字节的最高位是1,则表示的是中文字符,并且该字节与它的下一个字节组合在一起表示完整的一个汉字。,练习: 在LCD上显示你的个人信息,如:,姓名:xxx 年龄:xx 电话号码: xxxx QQ: xxx EMAIL: ,
展开阅读全文