摘 要: 液晶显示控制器" title="液晶显示控制器">液晶显示控制器" title="液晶显示控制器">液晶显示控制器T6963C的特点及其与单片机的接口电路。阐述了以模块化为基础的显示软件的设计,具体分析了状态位检测、显示初始化、英文及汉字显示等功能的程序设计。
关键词: T6963C 接口 编程 显示
液晶显示器件(LCD)由于具有显示信息多、体积小、重量轻、功耗低、寿命长、价格低、接口控制方便等优点,正在被测量及控制领域广泛地推广和应用。液晶显示器按其功能可分为笔段式和点矩阵式液晶显示器,后者又可以分为字符点阵式和图形点阵式液晶显示器。图形点阵式液晶显示器不仅可显示数字、字符等内容,还能显示汉字和任意图形。
目前用于图形液晶模块的控制器很多,本文以T6963C为例,简单地介绍液晶显示模块与CPU的接口以及软件编程问题。
1 T6963C及其构成的液晶显示模块
液晶显示控制器T6963C具有以下特点[1]:
(1)图形点阵式液晶显示控制器,能直接与80 系列的8 位微处理器接口。
(2)字符字体可由硬件或软件设置,其字体有4 种:5×8、6×8、7×8、8×8。
(3)占空比为1/16~1/128。
(4)可以图形方式、文本方式及图形和文本合成方式进行显示,以及文本方式下的特征显示,还可以实现图形拷贝操作等。
(5)具有内部字符发生器CGROM(共有128个字符),可管理64KB显示缓冲区及字符发生器CGRAM,并允许MPU 随时访问显示缓冲区,甚至可以进行位操作。
在内藏T6963C的液晶显示模块上已经实现了T6963C与行、列驱动器及显示缓冲区RAM 的接口,同时也已用硬件设置了数据传输方式、显示窗口长度和宽度等。内藏T6963C 的单屏点阵图形液晶显示模块结构如图1所示。该模块的初始化设置一般均由管脚设置完成。所以初始化时,由软件编写的指令就集中在显示功能的设置上。T6963C的指令可带1~2个参数,或无参数。若指令中含有参数,则执行每条指令时均须先送入参数,再送入指令代码。每次操作之前最好先进行状态字检测,因为状态位的作用不同,因此执行不同指令必须检测不同的状态位。
2 液晶显示模块与单片机的接口电路
在本例中选用80C320作为CPU,且在此设计中,不是将CPU与液晶显示模块直接相连,而是通过PSD813F1来连接。PSD813F1是由WSI公司研制的新一代可编程微控制器系统外围器件,具备完整的在系统可编程特性[2]。PSD813F1的功能比较强大,通过它还可以连接其他的器件和模块,如数据采集模块、键盘等,便于在原有基础上进行功能扩展。
将CPU的地址/数据线AD0~AD7、A8~A15与PSD813F1的AD0~AD15连接起来,由PSD813F1的PB口输出信号来选择和控制芯片。也就是说利用这些输出信号来片选LCD和数据缓冲器74LS245。同时CPU的地址/数据线AD0~AD7也接到74LS245的A端(A0~A7)上,而74LS245的B端(B0~B7)的输出连接到液晶显示模块的数据输入端DB0~DB7。这样,数据就可以先在CPU内完成处理,然后通过PSD813F1来选择74LS245,将数据转入74LS245完成缓冲,根据需要由PSD813F1选择LCD,此时数据就可以从74LS245送到LCD中显示了。液晶显示模块与单片机的接口电路如图2所示。
3 软件设计
3.1 状态位检测与数据/指令读写程序
在本例中用C语言编程[3]。
(1)状态位检测。由于LCD指令的执行是一个不断地检测状态、写指令和数据及读写数据的过程,因此可把指令编写成通用的函数,以便随时调用。
在进行分模块设计以前,首先必须了解各个模块中都要用到的状态位检测的编程。液晶显示控制器T6963C的状态位一共有8位,从低到高分别是STA0~STA7,其功能如下:
STA0——指令读写状态,1:准备好;0:忙。
STA1——数据读写状态,1:准备好;0:忙。
STA2——数据自动读状态,1:准备好;0:忙。
STA3——数据自动写状态,1:准备好;0:忙。
STA4——未用。
STA5——控制器运行检测可能性,1:可能;0:不能。
STA6——屏读/拷贝出错状态,1:出错;0:正确。
STA7——闪烁状态检测,1:正常显示;0:关。
进行状态位检测时,先从T6963C的状态寄存器中读取状态字,然后提取对应的状态值,通过判断决定下一步的操作。
(2)数据/指令的读写程序。读写数据和命令可以分为自动和非自动2种。由于非自动写命令或数据的步骤基本类似,均是在检测状态字的STA0和STA1二位是否准备好的情况下来决定写命令或数据到输出口,因此可把非自动写命令或数据流程图综合在一起,即如图3所示。非自动读数据的流程图如图4所示,也是在检测STA0和STA1已经准备好的基础上由输入口读取数据,然后将此数据返回,以便于其他程序调用。图5是自动写数据的程序流程图,它仅需要检测状态字的STA3即可。自动读数据时只须检测STA2,但自动读数据在本例中用得较少,故其流程图在此省略。
3.2 模块化设计
根据T6963C的特点,设计中采用模块化结构。这里主要介绍初始化、英文字符显示及汉字显示等模块。
(1)初始化模块。在T6963C中内嵌有128种字符点阵的CGROM(字符发生器ROM),同时T6963C还可管理一定大小的显示缓冲区。显示缓冲区RAM的具体大小由不同显示尺寸的模块决定,点阵越大, RAM越多。本设计采用的240×128模块是带有16KB的RAM。该显示缓冲区分为文本显示区、图形显示区和CGRAM区。文本显示区和图形显示区是2个不同性质的使用区域,是本设计的重点。CGRAM区是用户为方便制作特殊符号而在显示缓冲区内任意设置的一个区域,它可作为外扩的字符发生器。另外,对于文本显示区,如果需要特征显示,则需要同样大小的文本特征区,其中每个字节对应着文本区相同位置的那个字符,并可以控制该字符的特征显示。
初始化流程图如图6所示。从图中可以看到,对T6963C初始化时,在关显示后应该先确定采用哪种方式显示(文本/图形),再来设置显示缓冲区中图形区的首地址、宽度和文本区的首地址、宽度,然后再选择光标的形状,继而进行显示开关设置。
(2)英文显示模块。初始化时已经定义了文本区的首地址,此地址存放的是显示屏左上角(第1行第1列)的字符代码,每个字符位置对应1个字节,逐行对应至屏幕右下角。英文显示模块程序编制的任务就是把想要显示的字符代码送入与行列位置对应的文本显示缓冲区中。只需定位首字符地址,设置使LCD控制器的地址指针自动增1,然后连续向LCD的数据口送入显示数据即可。
英文显示程序比较简单,写单个字符时,只需确定显示字符的坐标位置(X,Y),然后按照T6963C的特点将此坐标写入控制器,接着写要显示的英文字符即可(显示的英文字符可以从T6963C自带的CGROM或外扩的CGRAM中选取)。但要注意使用的“写1次,地址不变”的方式。其程序流程如图7所示。
(3)汉字显示模块。液晶显示控制器T6963C可以按图形方式、文本方式及图形和文本合成方式进行显示。文本方式下可以显示字符等内容;图形方式下不仅可以显示图形,还能显示字符和汉字。本例采用直接在图形方式下显示汉字的方式。显示字符可以直接从T6963C自带的CGROM中选取。如要显示汉字则要建立汉字字模。字模建立方法有多种,可采用从UCDOS的汉字点阵字库中提取所需要汉字的16点阵字模,进而生成汉字库以备选取汉字之用。汉字字模在此汉字库中以一定的顺序存放,每一个汉字有其对应的一个顺序号,这个顺序号以变量HZH表示。
本例采用的240×128模块的汉字显示液晶屏幕,横向为240点,分成30个字节,纵向则是128行。若要显示16×16点阵的汉字,需占用32个字节,因而每行可显示15个汉字,共8行。下面是显示1个汉字的过程。
汉字显示的程序流程如图8所示。在计算要显示的汉字在汉字库中的位置HZADD时,首先把汉字库的地址赋给变量HZKADD,即HZADD=HZH×32+HZKADD。该汉字的显示位置即纵横坐标记为(X,Y),将此坐标换算成其在液晶显示屏幕上的地址并保存。在设置显示地址后,程序通过循环把1个汉字的32个字节一一写到输出口,就可以显示汉字了。
4 结束语
T6963C液晶显示控制器在应用中可以与各种型号的微控制器接口,实现控制和现场过程的动态显示。在本系统开发中,显示模块采用了T6963C液晶显示控制器来实现,上位接口电路采用了可编程微控制器系统外围器件PSD813F1,使系统易于进一步扩展功能。实践证明该系统具有良好的显示界面,同时也提高了液晶显示系统的可操作性。在软件设计中采用了模块化结构,使程序可占用较少的代码空间,提高了编程效率,便于开发。
本系统可灵活地嵌入各种大型设备或大规模系统中,用于显示必要的数据或执行参数设定。
参考文献
1 北京精电蓬远显示技术有限公司.内藏T6963C液晶显示模块使用手册(第二版).1999
2 武汉力源电子股份有限公司.可编程单片机外围器件PSD8XXF系列使用手册.1998
3 马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2001