
做技术支持,有很多初学者不知道TFTLCD的汉字,字符以及图片的显示,以及汉字的字体大小怎么调整。在这里特别的说明一下。1 R* E, Z5 ?' W- x 首先要知道不管是汉字、字符或者图片都需要点阵数据,才能在TFTLCD上显示。字符和汉字是的点阵数据是一位代表一个点的数据,其实也就是0或者1。取模后的点阵数据是1的像素点,需要显示画笔颜色,也就是点亮,数据为0的像素点,则显示背景颜色就可以了。这样颜色的对比就能够显示出汉字或者字符。而图片则不一样,图片的一个像素点的数据,和你的取模有关,因为图片是需要彩色显示的,所以图片的数据是直接把点阵数据送给彩屏进行显示。而汉字或者字符是通过判断每一位是0或者1,从而显示背景颜色或者画笔颜色。 在LCD上显示一个图片或者字符,需要一个显示区域,首先我们要确定其显示起点,然后是接下来的数据是沿着X轴还是Y轴进行发送数据也就是X轴或者Y轴地址的增长顺序以及方向。下面这张图显示的是在一个显示区域内,八种不同情况的显示起点以及X轴和Y轴地址的增长顺序以及方向。当我们要显示对应的字符或者图片的时候,我们只需要保证LCD屏的显示起点以及X轴和Y轴的增长顺序以及方向,和我们对字符或者汉字的取模的点阵数据的顺序保持一致,才能够正常显示我们想要的效果。1 _, S/ }$ B9 b8 G9 r; b( d; E% c ![]() 一般LCD的显示有两种方法可供选择: 第一种:就是每发送一个像素点的数据,设置一次地址,来控制发送下一个像素点的位置。比如下图的程序编程方法。 ![]() 在这段程序当中可以看到,我们通过两个for循环来发送数据,一个是控制行,一个控制列。横屏显示或者竖屏显示那就看你的for循环控制,是先发送X轴的数据,还是Y轴的数据,这全靠程序猿的算法。但是这种方法不好的地方就是每发送一个像素点的数据都要设置一次地址,显然导致屏幕的刷新很慢。但是好处是对于任意一种屏这种算法都适合。3 E8 m! A3 P. w 第二种:利用LCD的驱动芯片的地址自增功能来显示字符或者图片(一般LCD驱动芯片都有这个功能)。使用这个功能,首先我们要设置一个显示窗口,使其只能在LCD屏的某一区域进行显示,比如你要显示一个16*16的汉字,那你就把显示区域设置成16*16的大小,然后设置显示起点,也就是光标的位置,然后发送LCD的写数据命令,接下来就只需要发送像素点的数据,而不需要再设置地址,接下来发送的数据,则会依次显示在你设置的显示区域当中。比如下面的这段程序。3 ?7 x; ]" b% V+ {2 z ![]() 要使用第二种显示方法,之前必须要设置好显示区域的显示起点,以及LCD驱动芯片的地址自增方向,下面我以SSD1963和SSD1298两款芯片说明寄存器的设置。 首先是SSD1963,查阅SSD1963芯片的数据手册,可以找到一个寄存器是控制地址的自增方向。如下图: ![]() 可以看到是通过0x36这个命令来设置这个顺序的,这八种顺序和我们上面提到的是一样的。所以只要设置好对应关系即可。5 _: b; m: Q2 i; I9 ?; h$ w) v5 l# v/ O: ? SSD1298是一样的道理,也是通过设置寄存器来控制这个顺序,在数据手册中可以查到,如下图: ![]() 这个是ox11寄存器来控制器顺序的。) C$ y1 z+ a& b) W 另外需要注意的是:设置的窗口一定要和你要显示的图片或者汉字的显示区域一样,否则就会出现错位等现象。: N. t4 f$ H$ r6 y( ~" } 还有就是显示汉字或者字符的时候,不同字体大小,每一行要显示的像素点数是不一样的,一个字节是8个位,代表的是8个像素点,所以在使用for循环的时候,需要注意一下。不要把高低位弄反了,显示错位。注意高位先发送还是低位先发送,这和你的取模以及显示都有关系,需要一一对应。 2 l/ O6 K! T6 _8 ?8 T# t 写了这么多,希望对初学者有帮助,路过的各位高手能够指点一二。 |
RE:TFTLCD的图片以及汉字字符显示说明