LCD各引脚说明如下:RS为高电平时,DB7—DB0显示数据;RS为低电平时,DB7—DB0显示指令数。R/W为高电平时,数据被读到DB7—DB0;R/W为低电平时,DB7—DB0的数据被写到IR或 DR。E为使能信号线。当 E为高电平时,配合 R进行读数据或指令,当 E为低电平时,配合/W进行写数据或指令。PSB为高电平时,表示 8位或四位并口方式;PSB为低电平时,表示串口方式。RESET为复位信号输入端,低电平有效。DB7—DB0为三态数据线。 其中 RS与 R/W配合决定控制界面的四种模式:
另外,由于 FYD12864用 5V供电,所以液晶的 8位数据线不能直接与 DSP的外部扩展数据总线相连。本系统中采用 74ALVC16245来进行电平转换, 74ALVC16245是 16位的电源 转换芯片,采用 3.3V供电,该芯片有两个方向控制引脚( DIR1和 DIR2),DIR1由 CPLD的 I/O引脚供给,当 DSP从液晶读取数据时,DIR1为低电平,数据的传输方向是从液晶到 DSP;当 DSP往液晶写数据时,DIR1为高电平,数据传输方向是从 DSP到液晶。DIR2与 VCC相连,由 CPLD的 I/O引脚控制 LCD。 3 软件编程及实例
本系统中,CPLD部分采用 VHDL进行编程,主程序采用 C语言进行编程,便于程序的移植,并使其具有较高的可读性。首先解决 DSP与 LCD的时序匹配问题,时序匹配是 DSP控制 LCD最关键的问题,其实质是如何编写程序对 LCD的指令寄存器和数据寄存器进行读写操作,接口时序如图 3和图 4所示,
使用该显示模块时应注意以下几点:
(1)欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字母编码。(2)显示 ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加 1指向下一个字符位置,否则,显示的字符中将会有一个空 ASCII字符位置。(3)当字符编码为两字节时,应先写入高位字节,再写入低位字节。(4)模块在接收指令前,处理器必须先确认模块内部处于非忙状态,则读取BF标志,BF需为“0”,方可接收新的指令。如果在送出一个指令前不检查 BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
通过初始化液晶显示屏以及调用字库显示汉字和字符来具体说明 DSP控制液晶显示屏的设计思想。系统硬件上电复位后,首先完成 DSP的初始化,然后根据用户系统的需要对控制器的各项指令代码及其参数进行设置,以完成液晶模块的参数以及显示方式等一系列过程的初始化。液晶模块具体编程如下:
#include "DSP28_Device.h"
unsigned int * LcdComL = (unsigned int *) 0x5100;//命令寄存器低地址
unsigned int * LcdComH = (unsigned int *) 0x5200;//命令寄存器高地址
unsigned int * LcdDatL = (unsigned int *) 0x5300;//数据寄存器低地址
unsigned int * LcdDatH = (unsigned int *) 0x5400;//数据寄存器高地址
void WriteLcdCom(unsigned char c);//写命令
void WriteLcdDat(unsigned char d);//写数据
void delay(unsigned int t);//延时
void main(void)//主程序
{ InitSysCtrl();//初始化系统
DINT;// 关中断
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();//初始化
PIE InitPieVectTable(); //初始化