基于总线方式的液晶驱动系统设计
2010-06-22李少波
李少波
(上海海事大学,上海200135)
李少波(硕士研究生),研究方向为检测技术与自动化装置。
引 言
相比于采用MCU的Ⅰ/O口对液晶进行数据传输,采用总线方式驱动液晶有一系列好处:第一,软件编程中不需要手动设置DDR寄存器值,降低了编程难度;第二,可以提供给人们一种新的思考问题方式。本文介绍了总线方式驱动液晶的硬件电路和软件设计。软件设计中,主要介绍了一些基本的总线定义方式,以及基本的驱动函数编写方法。
1 硬件电路设计
主控MCU采用AT90CAN128控制芯片,可以工作在16MHz频率下。要驱动的液晶型号为OCMJ15X20D。OCMJ15X20D支持双层显示,带内置中文字库的RA8803控制器;内部有256个8位缓存器,控制液晶各种显示模式和其他功能(具体功能请参照D系列中文液晶显示模块说明书),使得液晶可以显示丰富的内容。
AT90CAN128的RAM空间中,前4352个字节分配给芯片内部的通用寄存器、Ⅰ/O寄存器和4KB的内部SRAM。起始的32个地址为通用寄存器文件,然后是64个Ⅰ/O寄存器和160个扩展的Ⅰ/O寄存器,最后是4096字节的内部数据SRAM。所以,外部并行扩展总线的有效地址是从0x1100至0xFFFF。当MCU对0x0000~0x10FF范围的SRAM地址空间操作时,实际上是对芯片内部的SRAM或寄存器操作,尽管会影响地址总线、数据总线和ALE,但此时/WR和/RD信号不受影响。因此,处在相应这段地址范围内的外部扩展的存储器、设备不会响应AT90CAN128的指令。
74LS138译码器电路如图1所示。采用并行接口扩展的方式,AT90CAN128的A端接口作为液晶的8位数据总线接口,C端口的部分引脚PC4~PC7(图1中的A12~A15)作为控制液晶的使能位,添加了74LS138的输出引脚/CS_LCD。引脚/RAM用来控制扩展外部RAM的高4位地址,这样外扩RAM的总线地址可以为0x1100~0x8FFF;/Backup 1~/Backup 6可以当作备用,或者驱动其他设备(例如另外一块液晶)。
图1 74LS138译码器电路
液晶接口电路如图2所示。AT90CAN128的C端口PC3引脚(图2中A11)作为控制液晶数据的输入/输出位。其中,74LS245是8路同相三态双向总线收发器,可双向传输数据;J1是液晶的引脚接口。这样,LCD占用的MCU总线地址为0x9000~0x97FF和0x9800~0x9FFF。
图2 液晶接口电路
液晶OCMJ15X20D各个引脚功能定义如表1所列。
2 驱动软件设计
如果MCU对液晶模块缓存器进行读取操作,则必须通过总线以数据方式先送出缓存器的地址,然后才能在总线上读液晶取缓存器的资料;如果是进行写入操作,则必须通过总线以数据方式先送出缓存器的地址,然后再以同样方式送出要写入的资料。当MCU对液晶模块的显示RAM区域进行资料的读取时,MCU能直接在数据总线上读取显示RAM的资料;当MCU对显示RAM区域进行资料的写入时,MCU可以直接在数据总线上送出要写入的资料。
表1 OCMJ15X20D引脚功能定义
根据硬件电路的设计,虽然液晶占用MCU的16位总线地址的区间0x9000~0x97FF和0x9800~9FFF,但是对于液晶来说有效的地址只是16位地址的高5位。这样,总线送到液晶的数据与总线地址的低8位发生冲突,但是液晶是以在信号的上升沿接收到的数据为准。也就是说,最后液晶接收到的数据(或者液晶缓存器地址)是MCU通过总线方式送过来的数据,而不是MCU总线的低8位地址。
定义地址0x9000(0x9001~0x97FF将不能用作其他用途)为写液晶缓存器和读液晶缓存器的总线地址;定义地址0x9800为写液晶显示RAM和读液晶显示RAM的总线地址。代码如下:
进行上述定义之后,就可以采用总线的方式方便地对液晶进行读、写数据和命令。对缓存器进行读写操作时,首先使用“CmdWritePort=Buffer Address”命令写入缓存器在液晶内部的地址,然后使用“CmdWritePort=Buffer Command”命令将数据写入缓存器。也就是说,液晶第一次接收到的是内部缓存器地址;第二次接收到的是写入缓存器的命令。
往液晶缓存器写数据的函数如下:
读取液晶缓存器数据的函数定义如下:
往液晶寄存器写数据的函数定义如下:
读取液晶寄存器数据的函数定义如下:
定义了4个基本的读、写液晶缓存器和显示RAM的函数后,就可以方便地对液晶进行各种操作。液晶缓存器地址00H的bit3为“1”时,液晶为文字模式;bit3为“0”时,液晶为位图模式。液晶内部X、Y坐标对应的内部缓存器地址分别为60H、70H,对显示RAM区域进行读写操作时,首先需要设置光标缓存器的值,然后写入数据。例如,让液晶坐标为(3,4)显示位图字符“A”,可以使用下面语句实现:
结 语
本文介绍了通过总线方式驱动液晶的方法,较直接采用Ⅰ/O驱动的方式有很大改进。由于占用了大量总线空间,此液晶驱动的设计适用于不需要太多外扩RAM的电路;也可在液晶接口和MCU之间添加锁存器和一些门电路来优化总线设计,但会增加一定的成本。
[1]吕勇.基于CAN总线的多电机同步控制系统设计之硬件设计[J].伺服控制,2008(10):51-56.
[2]江杰,范宇.基于AT90CAN128单片机的某车型CAN总线系统设计[J].机电之家,2009(3):24-26.
[3]金鹏电子有限公司.D系列中文液晶显示模块,2006:11-20.
[4]Texas Ⅰnstrument Ⅰnc.TMS320LF/LC240xA DSP Controllers Reference Guide,2002:10-42.