点阵液晶显示器的汉字显示原理与应用
发布时间:2012-03-13 来源:文档文库
小
中
大
字号:
点阵式液晶显示屏显示汉字吴婷婷P201102094
引言•世界中,有很多物质都可以看作是由很小很小的点(例如:分子、原子)组成的,当然,字符也不例外。假设我们把一个字符分成若干个可视的点组成,换句话来说,就是一个个点组成了我们看到的字符。假设您的电脑显示器是液晶的,每一个字符或图形都是由一个个的点组成的,只是这些点很小,小得让您不容易发现而已;由此,我们引入点阵字符的概念,从微观的电子信号0 或1 ,到宏观可视的字符.
•点阵式液晶显示器以重量轻,体积小,电压低,功耗小,显示内容丰富等特点正在被广泛的应用,点阵式液晶显示器的核心是其控制器,他的功能很强,能直接与微机接口,使用方便。与点阵液晶板,液晶显示驱动器,显示贮存器组合就可以构成完整的显示系统。
•首先,从我们常用的计算机系统谈起,再扩展到我们要开发设计的点阵LCD&LED 显示系统中去,其实单片机系统的显示原理和计算机是一样的。在计算机中,所有的数据(包括指令等)都是以0 和1 来表示的,这意味着,如果我们想要在显示器上显示字符,那么这些字符的信息将也会是以0 、1 来保存显示的。
•对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。那么计算机是如何来存贮显示字符的呢?
•那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状。
例如英文A在字模的记载方式如图1所示
而中文“你”的字模图如下
•每一个小方格代表一个点,黑色的为0 ,白色为1 ;单元内为一的点表示为点亮,单元内为0的位不亮,每一个点看作为一位(bit )。字节中能够显示的位数可用编程设置,范围是1-16,如果小于8个字节,每个字节的低位不起显示作用,例如设置显示单元为6,每个字节显示6位,那么屏幕上的显示单元为1x6点。
•据此可以描绘出“你”字的位(bit )信息。采用行扫描的方式,每八位(bit )为一个字节,这里采用十六进制表示,这样就得到了字模数据。由上述的示例,我们可以清晰的了解到可视字符、位信息与字模数据之间的关系。清楚了上面的关系之后,我们就可以自己编写一个字模数据生成工具了。
点阵异常处理•假设字符的点阵不是8 的倍数怎么办呢?通常情况下可以不计或在后面以4 个0 位补足8 位都可,例如:12x12 点阵的汉字,先假设对12x12的点阵字符进行扫描,第一行的前8位为一个字节,第一行的后面4位形成一个字节,以后的每行逐次类推,直到扫描到最后一行,行成一个完整可用的字模数据。
•在编写软件代码之前必须要先掌握汉字取模的方法。要得到上表中的文字,我们可以借助取模软件来完成。目前点阵LCD的取模软件有很多,我们以本开发板配套的取模软件为例来介绍一下汉字的取模方法。
打开取模软件出现如下显示界面
•在文字输入区中输入文字,我们以输入一个欢迎的“豪”字为例,了解其取模过程。在文字输入区中输入“欢”后按CTRL+ENTER组合键后就看到“欢”字已经在模拟显示区显示出来了
在“取模方式”中选择“C51格式”就可以在“点阵生成区”得到你要的汉字“豪”的显示代码。
放大显示代码可以清楚的看到
•经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字“豪”了,其它汉字也用同样的方法。取完要显示的全部汉字代码后我们就可以编程了。
在计算机中如何显示一个字符•其实字符的显示过程是字模数据创建的逆过程。首先我们要明白字模数据的排列扫描方式,然后再把16 进制的字模数据变成位(bit )信息,最后才能根据位信息按照字模数据给定的扫描方式逐个把点描绘出来,在计算机中显示一个“豪”字,我们可以使用字模软件来创建一个字模数据,
设定为行扫描、16x16 点阵、宋体、11 号字,创建如下字模数据:•unsigned char hao0[]={•0x00,0x00, 0x00,0x80, 0x3F,0xFC, 0x00,0x00,0x07,0xF0, 0x04,0x10, 0x3F,0xFE, 0x20,0x02,0x4F,0xF4, 0x05,0x20, 0x1A,0xC0, 0x04,0xA0,0x1B,0x58, 0x04,0x46, 0x19,0x80, 0x00,0x00•};
则C 语言全部显示代码描述如下:•unsigned char cmp_w[8]={128,64,32,16,8,4,2,1}; // 用于取位•unsigned char hao0[]={ /* 字模数组*/•0x00,0x00, 0x00,0x80, 0x3F,0xFC, 0x00,0x00,•0x07,0xF0, 0x04,0x10, 0x3F,0xFE, 0x20,0x02,•0x4F,0xF4, 0x05,0x20, 0x1A,0xC0, 0x04,0xA0,•0x1B,0x58, 0x04,0x46, 0x19,0x80, 0x00,0x00•};void FontDisplay(int x, int y, unsigned char * FontModule{/*x: 水平偏移坐标,y: 垂直偏移坐标*/•/*16x16 单个字符行扫描函数*/••
•••••••••••••for(int row=0;row<16;row++{for(int c=0;c<8;c++if((FontModule[row*2]&cmp_w[c]!=0putpixel(c+x,row+y,15;/* 画一个点*/for(c=0;c<8;c++if((FontModule[row*2+1]&cmp_w[c]!=0putpixel(c+8+x,row+y,15;}} main({/* 调用显示主程序*/FontDisplay(5,5, hao0 ;}
•假设你的系统需要显示的字符不多,直接使用上面的代码或稍做修改,直接编译烧写到芯片里,即可满足一般点阵字符显示的需求,而不需要制作大的文件字库,节省有限的ROM 空间,编程又极其简单。假设我们要显示一串字符,把这一串字符拷贝到字模工具软件里,字模软件会为每个字符产生一个字模数组,我们在程序里按字符显示的顺序依次调用FontDisplay(int x,int y, unsigned char * FontModule 即可连续把字符显示出来
以12864点阵型液晶显示屏为例•12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵汉字。•下面对其简单的介绍•1号管脚VSS----电源池(lever为0)•2号管脚VDD----