基于DSP和ST7920的液晶显示模块的实现
2008-04-18
作者:潘 敏,焦生杰,翁寅生
摘 要:提出了一种基于DSP和ST7920控制模块进行液晶显示的实现方法,介绍了液晶显示控制器ST7920的性能特点,给出了DSP与液晶显示屏LM3303A-B硬件接口设计、软件设计" title="软件设计">软件设计程序流程以及详细的液晶显示程序。设计的该显示模块能够应用于工程机械上。
关键词:DSP ST7920 液晶显示屏 接口
DSP是一种适合于数字信号处理的实时高速的高性能微处理器,已广泛应用于自动控制、图像处理、通信技术、网络设备、仪器、仪表和家电领域。液晶显示屏以其显示直观、便于操作的特点被用作各种便携式系统的显示终端。传统液晶大多用单片机控制,而单片机的数字信号处理能力远低于DSP芯片,使得其应用范围受到限制。基于此,本文选用TOPWAY公司生产的、以ST7920为控制芯片的128×64点阵3.3V简体中文字库的LM3303A-B型图形液晶,介绍了一种基于DSP和ST7920的液晶显示屏的设计。
1 ST7920控制器介绍
LM3303A-B型液晶显示屏是香港TOPWAY公司采用台湾铭创电子公司生产的ST7920控制器的液晶显示屏。它由128×64点阵构成、接口方便(3.3V)、设计简单、功耗低、价格便宜,可用于各种设备的显示终端[1]。
ST7920支持8位、4位并行或2线、3线串行两种接口方式" title="接口方式">接口方式,带有ZMB的中文字型" title="字型">字型CGROM,该字库ROM中含有8192个16×16点阵的中文字型,可利用代码简单方便地显示汉字。16KB的半宽字型HCGROM,提供了126个168点阵的ASCII字符库,便于英文和其他常用字符显示。64×16位元" title="位元">位元的字型产生CGRAM,用户可以根据需要构造生僻字。64×26位元的绘图GDRAM,方便构造图形。控制器具有绘图及文字画面混合显示功能。另外,控制器提供基本指令与扩充指令命令,功能强大。
2 DSP与液晶显示屏硬件接口设计
由于LM3303A-B具有串/并行多种接口方式,针对DSP外围I/O丰富且处理速度快的特点选用8位并行的接口方式,这种方式下虽然接线多,但是速度比串行要快得多,所以将PSB引脚接高电平。
DSP 与LM3303A-B之间的接口电路如图1所示。由于LM3033A-B是3.3V简体中文图形液晶,所以DSP与液晶之间不用电平转换。其中DSP 的IOPE0~IOPE7用作数据接口,与LCD模块的数据线DB0~DB7相连,完成与LM3303A-B 间的数据传送;IOPF0与RS相连,决定是数据(RS=0)还是命令(RS=1);IOPF1与R/W相连,决定是写入(RW=0)还是读出(RW=1); IOPF2与E相连,工作状态使能。IOPD0与/RST相连用于复位。VDD接+3.3V输入电源。A与K引脚间的电压为显示屏内部发光二极管提供电压,使其产生背光;参考文献[1]中要求调节显示屏的对比度是在V0与VOUT之间串接一个电位器,但在实际应用中无法实现,而是采用V0直接接+5V的上拉电阻且空出VOUT,可以有效地调节显示对比度。
3 DSP控制液晶显示屏的软件设计
从程序的可移植性和通用性方面考虑,选择C语言进行软件模块的设计实现。这里通过液晶显示屏的初始化过程以及如何显示文本和一幅图画来具体说明DSP控制液晶显示屏的软件设计。
3.1 软件设计程序流程
DSP要控制液晶显示屏系统运行,首先应将系统接通电源,系统自动复位。复位后进行系统初始化、液晶初始化。在初始化完毕后,系统可以通过控制器发出的指令调用相关函数,完成相应的显示功能。其主程序流程图如图2所示。
3.2 系统及液晶初始化
系统初始化禁止所有可屏蔽中断,并关总中断,在进行关键设置时不允许发生中断,以免产生干扰。允许符号位扩展,将B0配置为数据存储空间。设置IOPE0~IOPE7为LCD数据接口。
液晶初始化需首先进行复位清屏,如果液晶显示屏正常工作,便可写命令到LCD。其中用到用户定义的函数LCD_WriteCommand(uchar cmdcode)和函数LCD_Busy(),其作用分别为写命令到LCD和判断ST7920内部是否处于忙碌状态。这里值得注意的是,当ST7920在接受指令前,DSP必须先确认ST7920内部处于非忙碌状态,即读取BF标志位时BF需为0,方可接受新的指令。
3.3 ST7920的读写时序
在软件设计过程中,只有产生符合ST7920的读写时序后才能对液晶正确操作,否则液晶显示屏不会有任何输出。
本系统中的DSP主频为30MHz,相对而言,液晶属于慢速的外设,所以在读写子程序中应该插入一些延时等待。根据图3和图4中的时序图可以编写以下读写子程序(其中为了提高 程序的可移植性与可读性,在程序开头都用了宏定义,限于篇幅在此不再给出):
void LCD_WriteCommand(uchar cmdcode)//写命令到LCD
{
clr_LCD_RS;
clr_LCD_RW;
clr_LCD_E;
LCD_Out_Data(cmdcode);
set_LCD_E;
Delay(10);
clr_LCD_E;
Delay(100);
set_LCD_RW;
}
void LCD_WriteData(uchar lcddata)//写数据到LCD
{
set_LCD_RS;
clr_LCD_RW;
clr_LCD_E;
LCD_Out_Data(lcddata);
set_LCD_E;
Delay(10);
clr_LCD_E;
Delay(100);
set_LCD_RW;
}
/*忙判别*/
void LCD_Busy(void)
{
clr_LCD_RS;
set_LCD_RW;
clr_LCD_E;
for(;;) //若液晶空闲则停止等待
{
if(!(LCD_In_Data&0x80) )break;
}
set_LCD_E;
Delay(10);
clr_LCD_E;
Delay(100);
clr_LCD_RW;
}
3.4 液晶显示程序设计
液晶初始化完成后,可调用函数void dis_txt()进行文本的写入与显示。详细代码如下(其中函数void dis_hz(char*s)用来显示字符串):
void dis_hz(char*s)//显示文本字符串
{ while(*s>0)
{LCD_WriteData(*s++);Delay(10);}
void dis_txt()//DDRAM
{
LCD_Busy();
LCD_WriteCommand(0x01);//清屏
LCD_WriteCommand(0x82);//设定DDRAM地址为0x82
dis_hz(″TOPWAY″);//字母数字直接送ASCII即可
LCD_WriteCommand(0x90);//设定DDRAM地址为0x90
dis_hz(″LM3033 测试程序″);
LCD_WriteCommand(0x89);//设定DDRAM地址为0x89
dis_hz(″TMS320LF2407A″);
LCD_WriteCommand(0x9A);//设定DDRAM地址为0x9A
dis_hz(″实验系统″);
}
液晶显示屏显示图片,调用void Disp_Img(uchar*img)函数,先完成地址归位和清屏等相关工作,其后的关键功能代码实现如下:
LCD_WriteCommand(0x34);//选择8位数据流,扩充指令,绘图显示关
LCD_Busy();
for(y=0;y<32;y++)
{
for(x=0;x<8;x++)
{
LCD_WriteCommand(0x80+y);//先将垂直的位元组坐标(Y)写入GDRAM
LCD_WriteCommand(0x80+x);//再将水平坐标(X)写入GDRAM
LCD_WriteData(img [j++]);//将D15~D8写入到RAM中
LCD_WriteData(img [j++]);//将D7~D0写入到RAM中
}
LCD_WriteCommand(0x36);//选择8位数据流,扩充指令,绘图显示开
Delay (30);
}
本文对基于DSP和ST7920液晶显示模块" title="液晶显示模块">液晶显示模块的实现方法进行了探讨,对显示模块ST7920进行了有效的控制, 所应用程序均在TMS320LF240x系列的软件编译环境CCS V2.0下调试通过。液晶显示屏能够正常显示连续的汉字、字符以及图形,性能稳定。与同类型的其他图形点阵液晶显示模块相比,其硬件电路结构简单、方式灵活、对于其他型号的接口芯片也有参考价值。该显示模块能够应用于工程机械上。
参考文献
[1] LM3033A-0B LCD Module User Manual[Z].Shenzhen Top-way Technology Co.,Ltd.
[2] 刘和平.TMS320LF240xDSP C语言开发应用[M].北京航空 航天大学出版社,2005.
[3] 李敏,孟臣.串行接口中文图形点阵液晶显示模块的应用[J].中国电子网,2004.
[4] 王鑫,傅丰林,陈健.一种基于DSP控制的液晶显示屏的设计及实现[J].集成电路应用,2003,(5):64-66.
[5] 范艳开,张怡,赵芙蓉.基于DSP的液晶模块的显示原理及实现[J].集成电路应用,2004,(6):74-76.