基于T6963C的LCD与ARM7的接口设计
扫描二维码
随时随地手机看文章
0 引言
液晶模块作为普遍采用的显示器件,具有功耗低、显示内容多、控制灵活等特点。在中规模图形液晶显示模块中,内置T6963C控制器的LCD模块是目前较为常用的内置控制器型图形液晶显示模块。该模块可由硬件电路完成初始化设置,故可节省软件开销。软件上,T6963C控制器也提供了丰富的指令集,且控制方式灵活多样。而以ARM为内核的32位微处理器,则具备高性能和低功耗的特点,在工业控制领域应用广泛。因此,对于不带液晶接口的中低端ARM7芯片,可由其通用输入输出(GPIO,general purpose input andoutput)引脚来实现与LCD的连接,并控制LCD实现其显示功能。
1 LCD硬件接口设计
T6963C控制器可与液晶模块的行、列驱动器及显示缓冲区RAM连接,并可通过这种硬件连接方式设置好液晶屏结构(单、双屏)、显示窗口长度、宽度、字体等。内置T6963C的单屏结构点阵图形液晶显示模块的原理框图如图1所示。
图1中,数据总线和控制总线都直接与CPU的IO口线相连。液晶可采用SMG240128A点阵图形液晶显示模块;而CPU则可选用基于ARM7TD-MI-S核的32位微处理器芯片LPC2134。该芯片是基于RISC的原理设计,指令和译码简单方便。它采用三级流水线技术,CPU操作频率最大可达60MHz,并具备47个通用I/O口,同时含有丰富的外设资源,十分适合于工业测量及控制领域使用。该液晶模块与LPC2134的接口电路如图2所示。
图2中的液晶模块采用数据并行传输模式,通过两个驱动芯片74L3245和74HC14与LPC2134相连。其中74LS245是八位双向总线收发器,它可将液晶模块的数据总线与CPU的P0口的8条口线相连,负责控制数据的传输,并具备数据锁存和缓冲功能:74HC14为六输入反相驱动器,可驱动液晶模块的四条控制线。液晶模块的21脚为背光接地端,它由p0.23控制背光的开与关,通过电位器W2可调节背光亮度,用电位器W1则可控制调节液晶显示的对比度。FG引脚为边框地,须接地以防止静电和雷击。FS引脚接地,可将字体控制为8x8点阵。
2 显示功能的实现
液晶显示功能可通过LPC2134对液晶控制器T6963C的控制来实现,T6963C控制器内置丰富的指令集,可通过指令来设置显示功能。指令可带一个或两个参数,也可无参数。每条指令的执行都是先送入参数,再送入指令代码。每次操作之前,还需要先进行状态字的检测。
2.1 底层子函数设计
在程序层面,不管是状态字的检测,还是参数和指令代码的传送,都涉及到对液晶控制器的读写操作。根据T6963C说明书中提供的读写时序,并结合本系统的硬件设计方案,可得到如图3所示的读写时序图。
在设计程序时。可根据LPC2134的GPIO引脚模拟控制读写时序图来实现数据的传输。针对数据和读写类型,可设计四个底层子函数,以完成传输功能,其功能说明如表1所列。
其中写命令字子函数及读数据子函数的源代码如下:
事先在头文件中定义如下常量:
#define WR 1<<25//p0.25写控制位
#define CD 1<<17//p1.17数据指令选择控制位
#define RD 1<<26//p0.26读控制位
#define CE 1<<27 //p0.27 LCD片选
#define DIR 1<<22 //p1.22 74LS245数据传送方向控制位
#define DPT0xOff<<16//数据口
//写命令字子函数完整源代码
void LCD_WriteCommand(uint8 command)
{
uint32 com=0;//定义临时存储单元
com=command;
IOODIR=IOODIR | DPT;//设置输出数据
IOOSET=IOOSET | CD;//命令属性
IOOSET=IOOSET | WR:
IOOSET=IOOSET | RD;
IO1CLR=I01CLR | DIR;
//数据传输方向设定
IOOSET=(IOOSET&(~DPT))|(com<<16);
//数据写入口线
IOOCLR=(IOOCLR&(-DPT)|(((-com)&(0xOff)<<16);
IOOCLR=IOOCLR | CE;//选中LCD
IOOCLR=IOOCLR | WR;//写有效
IOOSET=IOOSET | WR;//写入完毕,写置低
IOOSET=IOOSET | CE;
}
//读数据子函数完整源代码
uint8 LCD_ReadData 0
{
uint8 data;
IO0DIR=IOODIR&(~DPT);//输入数据
I01CLR=I01CLR | CD;//数据属性
IO0SET=IO0SET | WR;
IO0SET=IO0SET | RD;
IO1SET=IO1SET | DIR;
//数据传输方向设定
IO0CLR=IO0CLR | CE;
IO0CLR=IO0CLR | RD;//读有效
data=(IO0PIN&DPT)>>16;
//由引脚状态寄存器读出数据
IOOSET=IOOSET | RD;//读无效
IO0SET=IO0SET | CE;
return (data);//返回值为读取的数据
}
至于读状态和写数据子函数的编写,设计时可参照该子函数来完成。
2.2 驱动层实现
接下来需要利用T6963C的指令来完成驱动层显示功能的设置。其中部分基本指令的定义如表2所列。事实上,驱动层子函数的编写都可通过调用写命令、写数据、读状态子函数来实现。
其液晶的初始化设置函数源代码如下:
void LCD_Initialize(void)
{
LCD_WriteTCommand3(LCD_TXT_STP,0x00,0x00);//文本模式RAM起始地址
LCD_WriteTCommand3(LCD_TXT_WID, 30,0x00);//设置文本模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
LCD_WriteTCommand3(LCD_GRH_STP,0x00,0x00);//图形方式RAM起始地址
LCD_WriteTCommand3(LCD_GRH_WID,30,0x00);//设置图形模式的宽度,宽度为N/6或N/8,N为宽度点数,如240
LCD_WriteTCommand 1(LCD_MOD_OR);//设置显示方式为”或”
LCD_WriteTCommandl(LCD_DIS_SW |0x08);//设置纯图形显示模式
}
2.3 汉字读写程序设计
初始化液晶后,就可设置显示区域、显示方式和显示状态。接下来应将待显示字符的字模数据写入显示缓冲区,以便实现显示功能。对于文本方式,可先将字模数据写入显示缓冲区并建立CGRAM,再由数据存储位置确定字符代码,然后通过写人对应代码即可显示字符;对于图形显示方式,则需将字模数据逐个字节的写入图形显示缓冲区来实现显示功能。二者相比各有特点,其中文本模式显示速度快。且内置CGROM中含128个ASCII字符,可直接调用,但需先建立CGRAM,而且容量有限,只能管理2K字节的数据,比较适合于显示字符不多的场合;而图形模式显示速度相对较慢,但无需建立CGRAM,用户只需将字模数据以字节为单位写入图形显示区即可,适用于所需显示内容较多的场合。在一般的工程应用中,汉字的显示是比较重要的内容,因此,本文主要介绍汉字显示的程序设计。
由液晶初始化程序,本系统采用图形模式作为显示方式。汉字的字体一般为16x16点阵,占32个字节,也可采用32x32点阵的字体,西文字符为16x8。由此编写的子函数程序如下:
本液晶屏上的横坐标x范围为0~29,纵坐标y范围为0~127。字模数据由造字模软件提供,写入字模数据的顺序应与其所代表的字符的结构位置相对应。读写显示数据时,要注意地址指针每读写一次会自动增一。修改其值时,必须先结束当前读写操作,然后再修改地址,这样才有效。其它子函数的编写与汉字显示子函数相同,不同字体的字符只是字模数据量不同,连续写可多次调用单独写函数实现,也可每行写入所有字符的对应字节数据。至于反白功能的实现,可先读出对应字符的数据字节,取反后再重新写入。
3 结束语
本文通过ARM7微处理器芯片LPC2134的GPIO实现了与内藏T6963C的液晶显示模块的接口设计,并在软件上实现了其基本显示功能,从而在满足了工程设计的要求。本文比较系统的阐述了液晶显示程序的设计过程,并对设计中的难点给出了源程序代码,以供参考。该程序的可移植性好,可适用LPC213x系列芯片、其它ARM7芯片以及内置T6963C的不同型号液晶显示模块。