摘要介绍了基于T6963C控制器的液晶显示模块的硬件结构、特点和使用方法以及单片机控制下的硬件接口电路;叙述了T6963C的状态字和指令集在软件编程中的作用和特点,说明了基于该控制器的液晶显示模块图形方式下的字符汉字显示技术。
关键词T6963C;液晶显示器;图形方式;显示技术
T6963C是一种点阵式液晶图形显示控制器,可直接与8位微处理器接口。T6963C的字符字体格式由硬件设置,具体格式为:5×8,6×8,7×8,8×8等4种。T6963C能以图形方式、文本方式及图形和文本合成方式进行显示。较多厂家的液晶图形显示器采用了该控制器。下面以北京青云创新科技发展有限公司的图形液晶显示模块LCM2401286为例介绍了基于T6963C控制器的液晶显示模块图形方式下字符汉字显示技术LCM2401286是黄绿模式的240×128点阵式LCD图形显示器,可显示15×8行16×16点阵的汉字,其主控芯片为T6963C。正确使用该种显示器需了解其硬件结构和软件编程特点。
1 基于液晶模块的硬件技术
1.1 引脚说明
由于基于T6963C控制器液晶模块的诸多功能设置均是通过硬件来实现的,即通过不同引脚的电平状态来设置,但基于T6963C控制器的各厂家的液晶模块,由于各自的特点不同,故各厂家或各型号的液晶模块主要引出脚也各不相同,因此要对这些重要引脚加以说明。T6963C的QFP封装共有67个引脚,以LCM2401286显示器为例,在T6963C控制器上的复位引脚,在LCM2401286显示器引出脚中表示为,在T696 3C控制器上的单双屏显示模式选择引脚DUAL,在LCM2401286显示器中DUAL端直接接高电平,设置为单屏结构。在T6963C控制器上的显示窗口长度设置引脚MD7、MD3,通过两引脚不同的电平状态可设置不同的显示窗口长度,如表1所示,在LCM2401286显示器中MD2,MD3端均接高电平,设置为每行字符数为32。
在T6963C控制器上的显示窗口宽度(行)设置引脚MDS、MD1、MD0,其组合功能如表2所示,在LCM2401286显示器中MDS,MD1,MD0设置100,即字符行16,总行数为128,占空比为1/128。
在T6963C控制器上显示字符的字体选择引脚FS1,FS0,通过这两个引脚不同电平状态的组合可选择不同的字体模式,如表3所示。
1.2 电源和对比度调节端的连接方式
LCM2401286显示器的电源连接和对比度调节端有两种接线方式,如图1所示。调节图1中的电位器,可改变液晶显示器的对比度,从而使背景色和图形文字的色比达到最佳。
1.3 LCM2401286显示器接口电路
LCM2401286显示器接口电路如图2所示,其中,电位器W3=20 kΩ可调节显示器的底色,显示器的背光电源A、K直接为有效。对比度调节端接线方式采用图1(b)的方法。
2 液晶模块的软件设计
2.1 T6963C的状态字和指令集
由于T6963C为可编程芯片,因此要求编程控制LCM2401286显示器正常显示,首先需掌握T6963C的状态字和指令集。由于T6963C控制器指令集模块的初始化通常由硬件设置完成,因此其指令系统将集中于显示功能的设置上。T6963C的指令可带一个或两送入指令代码,每次操作前先检测状态字,以确保指令的正确执行。T6963C的状态字如表4所示,其中,STA0为指令读写状态,STA1为数据读写状态,STA2为数据自动读状态,STA3为数据自动写状态。由于各状态位的作用不同,所以执行不同指令时必须检测不同的状态位。在MPU每次读写指令和数据时,STA0和STA1要同时有效。当MPU读写数组时,需判断STA2或STA3状态。屏读、屏拷贝指令应使用STA6。而STA5和STA7则反映T6963C内部运行状态。
T6963C的指令包括指针设置指令、显示区域设置指令、显示开关指令、光标形状选择指令、数据自动读/写方式设置指令、数据一次读/写方式指令和位操作指令等。指针设置指令主要用于设置光标指针、CGRAM偏置地址和地址指针。显示区域设置指令主要用于设置文本区和图形区首地址以及文本区和图形区的宽度。文本区和图形区首地址对应显示屏左上角字符位或字节位,修改该地址可产生卷动效果。文本区宽度设置和图形区宽度设置用于调整一行显示所占显示RAM的字节数,从而确定显示屏与显示RAM单元的对应关系。显示开关指令主要用于设置光标闪烁、光标显示、文本显示及图形显示的开启。正确使用上述指令可保证显示正常进行。
2.2 图形方式下字符、汉字显示技术
在编写显示程序时,首先要编写一些预处理程序和液晶显示器的初始化程序。预处理程序包括:状态字中的状态位判断程序、写无参数指令程序、写双参数指令程序、写数据指令程序、设置当前地址程序和设置当前显示行列程序。液晶显示器初始化程序包括:工作状态初始化程序和清屏程序。工作状态初始化程序即设置显示器为图形显示方式,同时关闭文本显示,设置图形显示区首地址为00H,设置图形显示区宽度为20 H(即32 Byte),设置光标的形状为8点1行。显示器清屏程序是通过程序对显示缓冲区写零来达到清屏目的。
上述工作完成后便可编写字符、汉字显示程序。字符、汉字显示程序流程如图3所示。为适应显示内容长度不固定的情况,可设置和使用可变长参数。使用可变参数步骤如下:(1)为了访问变长参数列表中的参数,必须声明va_list类型的一个对象,首先在函数里定义一个va_li st型的变量,即arg_ptr,这一变量是指向参数的指针。(2)用va_start宏初始化这一变量arg_ptr,这个宏的第2个参数是第一个可变参数的前一个参数,是一个固定参数,使arg_ptr指向第一个可选参数,以固定参数的地址为起点确定变参的内存起始地址。va_start是访问变长参数列表中的参数前所使用的宏,其初始化用va_list声明的对象,初始化结果供宏va_arg和va_end使用;va_arg:展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用va_arg均会修改用va_list声明的对象,从而使该对象指向参数列表中的下一个参数;然后用va_arg返回可变的参数,并赋值给整数变量。va_arg的第2个参数是要返回参数的类型。(3)va_end将arg_ptr指针清为NULL,函数体内可多次遍历这些参数,但必须以va_start开始,并以va_end结尾。va_end宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回。va在此是vairable argument(可变参数)的意思。
为确保输出显示的内容尤其是数字能按照格式化方式显示,可采用函数vsprintf()将格式化字符串和数字值输出到指定的内存缓冲区内,该函数类似于sprintf()函数,但其只接受一个指向变量表的指针而不是一个变量表。返回值为实际写入到输出字符串中的字符数。
字符、汉字显示程序又分成字符部分和汉字部分,其流程图如图3所示。由标准的ASCII字符表可知,字符的ASCII值在0~127范围内,而汉字内码的ASCII值均处于128以上。因此可通过判断要显示内容的ASCII值是否<128来区分要显示的内容是字符或是汉字。
若要显示的内容是字符(ASCII值≤128),则又分为非显示字符和显示字符。非显示字符包括控制字符和通讯专用字符。显示字符包括符号、字母和数字。
由标准ASCII字符表可看出,非显示字符的ASCII值在0~31范围内,因此可通过判断显示内容的ASCII值是否<32来区分非显示字符和显示字符。
若是非显示字符(ASCII值<32),则执行相应的控制功能,若是显示字符(ASCII值≥32)则送显相应的字符。显示字符按16×8点阵显示,即一个可显示字符占16个点阵行,每行1 Byte,每个可显示字符的字模为16 Byte。
若要显示的内容是汉字(ASCII值>128),则按16×16点阵显示,即一个汉字占16个点阵行,每行2 Byte,每个汉字字模为32 Byte。字符、汉字的字体及大小是由其字模决定的,其字模由专门的字模生成软件生成。字符和汉字的字库分开造,无论字符或汉字,若其字体或大小不同,则字库需分开造,显示时分别调用。
3 结束语
文中介绍的基于T6963C控制器的液晶显示模块图形方式下的字符汉字显示技术,具有通用性和普遍性,适于所有采用T6963C控制器的液晶显示模块,其基本思想也适合于采用其他控制器的液晶显示模块。