一种基于DSP控制的液晶显示屏的设计及实现_显示光电论文
关键词:dsp sed1335控制器 液晶显示屏
近年来,随着低价格、高性能dsp芯片的出现,dsp已越来越多地被应用于高速信号采集、语音处理、图像分析处理等领域中,并且日益显示其巨大的优越性。而液晶显示屏更以其显示直观、便于操作的特点被用作各种便携式系统的显示前端。传统的液晶显示往往采用单片机控制。但在系统有大量高速实时数据的情况下,单片机由于受到处理速度的限制就显得力不从心。为了解决这些问题,本文提出了一种基于dsp控制的液晶显示屏的设计,有效地解决以上所遇到的问题。
1 sed1335控制器的介绍
at-320240q1型液晶显示屏是由台北晶采用电科技股份有限公司生产的一款内嵌sed1335控制器的液晶显示屏。它由320×240点阵构成,具有高分辨率(点型为0.225mm×0.225mm)、接口方便(5v或3.3v)、设计简便(内嵌控制器)、功耗低、价格便宜等优点,常常用于各种便携式设备显示前端以及日用家电显示模块中。基于320×240点阵的显示屏具有多种扩展功能供用户选择,大大方便了用户,提高了系统的集成度与实用性。
sed1335控制器是由日本epson公司生产的一款液晶显示屏控制器,与同类产品相比,功能最强。其主要特点有:
·有较强功能的i/o缓冲器;
·指令功能丰富;
·四位数据并行发送;
·图形和文本方式混合显示。
sed1335控制器的指令集见表1。sed1335控制器具有13条指令,多数指令带有参数,参数值可由用户根据所控制的液晶显示模块的特征和显示的需要来设置。
表1 sed1335控制器指令表
功 能 | 指 令 | 代 码 | 说 明 | 参数量 |
系统控制 | system set | 40h | 初始化,显示窗口设置 | 8 |
sleep in | 53h | 空闲状态设置 | / | |
显示操作 | disp on/off | 59h/58h | 设置开关显示方式 | 1 |
scroll | 44h | 设置显示区域 | 10 | |
csrform | 4dh | 设置光标形状 | 2 | |
cgram adr | 4ch | 设置cgram起始地址 | 2 | |
csrdir | 4ch-4fh | 设置光标移动方向 | / | |
hdot scr | 5ah | 设置点单元水平移动量 | 1 | |
ovlay | 5bh | 设置合成显示方式 | 1 | |
绘制操作 | csrw | 46h | 设置光标地址 | 2 |
csrr | 47h | 读出光标地址 | 2 | |
存储操作 | mwrite | 42h | 将数据写入显示缓冲区 | / |
mread | 43h | 从显示缓冲区读出数据 | / |
sed1335控制器是应用于mpu系统与液晶模块之间的控制芯片,它接收来自mpu系统的指令与数据,并产生相应的时序及数据控制模块的显示。a0为lcd控制制寄存器的选择输入,分别选通指令输入缓冲器和数据输入缓冲器,类似于通常字符点阵lcd模块的rs或d/i。mpu把指令代码写入指令输入缓冲器内(即a0=1),指令的参数数据则随后通过数据输入缓冲写入(a0=0)。带有参数指令代码的作用之一就是选通相应的参数寄存器,任一条指令的执行(除sleepin、csrdir、csrr和mread外)都产生在附属参数的输入完成之后。mpu也可用写入新的参数与余下的旧参数有效地组合成新的参数组。需要注意的是,在实际使用指令时,如果该指令具有多个参数,则必须按顺序依次写入各个参数,不能随意省略。尤其在mpu操作sed1335及其控制的液晶显示模块时,必须首先写入systen set(40h)指令。如果该指令设置出现错误,则显示必定不正常。
这里着重介绍cpsdir指令。该指令的作用是规定光标地址指针自动移动的方向。sed1335所控制的光标地址指针实际也是显示ram的当前地址指针。在控制器执行完读写操作后,将自动修改光标地址指针。该指令有四个参数:4c/4d/4e/4fh,分别表示修改的四个方向,这样就具有了很强的作图功能,这也是很多液晶控制器所没有的。在at-320240q1型液晶显示屏的设计中,显示的顺序是从右向左,即显示屏上的一个8×1点阵从左至右依次对应内存单元中1bit数据的高位到低位。因此对于常规的字模来说,就会导致显示相反的现象,可通过控制光标地址指针的移动方向很好地解决这个问题。
2 dsp与液晶显示屏硬件接口的设计
由于该款液晶显示屏内嵌了sed1335控制器,并且将接口电路直接引出,因此对于用户而言,整体设计大大简化,只需考虑dsp同接口电路间的连接即可。
以下是dsp与该液晶显示屏硬件接口的一种设计方案,如图1所示。
在该系统的设计过程中,选用了ti公司的tms320c5402芯片。由于其内部rom不可写,所以外挂一片32k的27256 eeprom作为外部程序区来存储程序与外部字库。考虑到tms320c5402芯片具有高达1mbit的外扩空间,实际应用时用户可以根据需要改变rom的大小。对于液晶显示屏的数据接口,因为dsp与液晶显示屏均由3.3v供电,可以直接将二者数据线相连,这样dsp就能将rom或ram中的数据直接送入控制器的缓存中以便显示。液晶显示屏的控制信号由dsp地址线的第16位与第9位译码,因此在程序的设计中,指令口地址为8100h,数据口地址为8000h。由于dsp的读写管脚复用,当该管脚为高时,通过非门输出低电平选通液晶显示屏的读信号;当读管脚为低时,则直接选通液晶显示屏的写管脚。
3 dsp控制液晶显示屏的软件设计
这里通过液晶显示屏的初始化过程以及如何显示一幅图画来具体说明dsp控制液晶显示屏的软件设计。
需要显示的图片如图2所示。可以通过windows附带的画图工具制作这样一幅320×240的黑白位图。针对这款显示屏是由右向左显示的特点,需要将其垂直对称翻转,最后将处理过的图片以16进制文件的形式烧入外部27256中。该图片数据文件在dsp外部空间的起始地址为:0c000h。
由流程图(图3)可以看出,在系统硬件上电复位后,软件根据用户的需要自动对各项控制器指令代码及其参数进行设置,从而完成对液晶模块的参数(如液晶的行数、列数、扫描频率、光标的位置等)以及显示方式等一系列的初始化过程。在对系统进行正确的初始化以后,可以通过dsp将外部rom中的数据直接送至sed1335显示缓冲区,控制器就可以控制液晶屏显示出用户所要的图画。同时用户也可以根据自己的需要在主程序运行的过程中改变图片显示的形式,只需在表1中选择相应的指令代码以及参数即可。
设置系统指令及其参数的方法如下:根据用户硬件电路的设计,先将指令代码送到sed1335控制器的命令口地址;然后把该指令的参数依次送到数据口地址,经过系统指令及其参数的设置后,就可以把数据送到数据口地址。具体语法形式如下:
指令设置语句:
stm #xxh,ar0 ;xxh为指令代码
portw ar0,#8100h ;8100h为命令口地址
参数设置语句:
stm #xxh,ar0 ;xxh为指令参数
portw ar0,#8000h ;8000h为数据口地址
…………
数据输入语句:
stm #xxh,ar0 ;xxh为用户数据
portw ar0,#8000h ;8000h为数据口地址
…………
液晶显示屏的初始化程序如下:
init:
stm #40h,ar0 ;系统设置命令,指令代码:40h
portw wr0,#8100h
stm #10h,ar0 ;标准设置
portw ar0,#8000h
stm #87h,ar0 ;设置光标宽度为8
portw ar0,#8000h
stm #07h,ar0 ;设置光标高度为8
portw ar0,#8000h
stm #27h,ar0;设置lcd每行需要的字节数,
portw ar0,#8000h每行320个点,行数为320/8=40
stm #36h,ar0 ;设置液晶的扫描频率约为70hz
portw ar0,#8000h
stm #0f0h,ar0 ;设置lcd的点行数为240
portw ar0,#8000h
stm #28h,ar0 ;设置显示屏一行所占显缓的字节数
portw ar0,#8000h
stm #00h,ar0
portw ar0,#8000h
stm #44h,ar0 ;scroll指令,指令代码:44h
portw ar0,#8100h
stm #00h,ar0 ;确定第一显示区的首地址
portw ar0,#8000h
stm #00h,ar0
portw ar0,#8000h
stm #240d,ar0 ;设置第一显示区的行数
portw ar0,#8000h
stm #00h,ar0 ;确定第二显示区的首地址
portw ar0,#8000h
stm #40h,ar0
portw ar0,#8000h
stm #0f0h,ar0 ;设置第二显示区的行数
portw ar0,#8000h
stm #00h,ar0 ;确定第三显示区的首地址
portw ar0,#8000h
stm #80h,ar0
portw ar0,#8000h
stm #4ch,ar0 ;设置光标自动由左向右移动
portw ar0,#8100h
stm #5bh,ar0 ;设置显示屏为两层叠加显示方式
portw ar0,#8100h
stm #0dh,ar0
portw ar0,#8000h
…………
stm #42h,ar0 ;液晶显示屏显缓写指令
portw ar0,#8100h
ld #240d,a ;清屏程序
loop1:ld #40d,b
loop2:stm #00h,ar0
portw ar0,#8000h
sub #1h,b
bc loop2,bneq
sub #1h,a
bc loop1,aneq
ret ;初始化结束
显示图片的主程序如下:
amin:stm #800h,sp
call init ;调用液晶显示屏初始化程序
stm #0c03eh,ar1 ;位图数据相对于bmp文件头的地址
stm #42h,ar0
portw ar0,#8100h ;送液晶显示屏缓写指令
ld #240,a
cmp:ld #40,b
cmp1:portw ar1+,#8000h;将320×240的位图数据依次写入缓存区
sub #1,b
bc cmp1,bneq
sub #1,a
bc cmp,aneq
b $ ;主程序结束
以上就是该系统的软件设计。由于篇幅有限,这里省略了某些控制指令的设置,用户可根据实际需要添加设置。在实际的软件设计中,dsp汇编语言执行过程中由于本身延时而引起的数据丢失现象,可以适当地加入空指令(nop)来解决。同时,本程序中使用图片显示的例子只是用来说明控制器的利用方面就显得有些浪费而且灵活性较差。针对那些存储空间有限、效率要求高的系统,可以制作成字模存储在外部rom中供多次调用,当显示文字时只需计算出显示地址而后调用字模入口地址即可。
本文提出的基础dsp控制的液晶显示屏,作为示波表显示前端已在实际应用中取得了成功。该系统中所选用具有64k大容量缓存区的sed1335控制器,适用于多种点阵规格的显示屏使用,加之其内部固化的字符发生器可产生160种字模,以及具有通过改变指令参数可实现图像的闪烁、翻转、移动等特点,因此从总体性能方面而言其大大强于同类型的其它控制器,非常适用于各种便携式系统显示前端的设计。