振动信号波形在图形型液晶模块上的实现
扫描二维码
随时随地手机看文章
1 GDM12864E简介及其与MPU的接口
1.1 GDM12864E简介
点阵图形型液晶显示模块GDM12864E内嵌ST7920型中文字型点阵LCD控制/驱动器,通过对控制/驱动器写指令,可以显示数字、字母、汉字以及自定义图形。控制/驱动器ST7920的ROM中包括8192个16×16点的中文字型,以及128个16×8点半宽的数字、字母字型;RAM中包括 1个128×64点的软件绘图区域(GDRAM)和4个16×16点的软件造字区域(CGRAM)。
GDM12864E模块共有20个引脚。 1-VSS,系统地;2-VDD,系统电源(+5V);3-VO,显示对比度调节;4-RS,数据/指令寄存器选择信号;5-RW,读/写模块数据选择信号;6-E,使能信号端,上升沿(前沿)锁存选择信号,下降沿(后沿)读/写数据或命令:7~14为8位数据输入/输出总线;15~18为空;19-A,LED背光的电源正极:20-K,LED背光的电源地。
1.2 GDM12864E与80C196KC的接口
单片机与显示模块的接口就是单片机与显示模块的控制/驱动器ST7920的接口。ST7920与单片机的连接方式有两种:直接访问方式和间接访问方式。这里采用直接访问方式,即将LCD显示模块的接口作为单片机的一段片外存储器,通过对该段存储单元的存取操作来实现对液晶显示模块的控制。硬件接口如图1 所示。
在图1中,单片机的外部数据总线工作在8位方式。AD0~AD7分时复用作数据总线和地址总线的低8位,作为数据线时直接与液晶显示模块的数据口连接。单片机的高位地址线A10接至数据/指令寄存器选择信号端RS,A11接至读/写模块数据选择信号端RW。A10和A11组合成的四种状态所对应的功能如表 1所示。
E的上升沿(前沿)锁存所选择的信号,下降沿(后沿)执行读/写数据或命令。工作时序如图2所示。其中,对于控制/驱动器ST7920,使能信号E的宽度必须大于450ns。当晶振频率选为12MHz时,80C196KC单片机读/写信号WR/RD的宽度是550ns,能够满足要求。16MHz晶振不能满足要求。
1.3 显示模块占用地址的分配
这里将LCD显示模块作为单片机的一段外部存储单元,由接口电路知,LCD占用片外地址范围1000H~1FFFH。其中,对片外单元 1000H~13FFH只能进行写操作,向LCD模块发送指令;对片外单元1400H~17FFH只能进行写操作,向显示缓冲区某个单元写数据;对片外单元1800H~1BFFH只能进行读操作,读取LCD的忙碌标志;对片外单元1C00H~1FFFH只能进行读操作,读取显示缓冲区中某个单元的内容。这样做的好处是程序精简,从而提高显示速度。
例如:LDB R1,#08H
STB R1,1000H
完成对关显示命令08H的传送,其中地址1000H更换成段1000H~13FFH中其他单元地址同样有效。
LDB R1,1800H
将忙碌标志读到R1中。同样,地址1800H更换成段1800H~1BFFH中其他单元的地址同样有效。
2 波形显示的软件设计
在控制/驱动器ST7920中存在一个与液晶屏面相对应的显示缓冲区。利用LCD模块显示波形,最关键的就是确定该缓冲区的存储单元同液晶屏面上像素的对应关系。有了这个对应关系后,我们就可以通过将某个存储单元中的某一位置为1来实现在液晶屏上画出对应的一点。该缓冲区共有64行×16列=1024 个存储单元(每个单元8位),每一单元同液晶屏面上的水平连续的8个像素相对应,显示缓冲区中的每个存储单元的地址分为水平地址和垂直地址,该地址对应到液晶平面上就是连续8个像素的水平坐标和垂直坐标。
在测试仪的软件设计中,每次连续采集2K个数据存放在RAM中的8000H~87FFH单元内。而液晶显示器每次只能显示128个点,因此,我们可以通过改变在RAM中的读数间隔来控制信号波形的横向显示,即每显示完一个数据,RAM地址加 N(N的最大值16)。通过改变N的大小来实现对信号波形在水平方向上的拉伸或压缩,以便于观察。
以显示水平方向上从左至右第a(a的范围是1~128)个点为例。
第一步:从RAM中地址是8000H+(a-1)*N的单元中读取采样值k(10位采样精度)。
第二步:根据a的值计算液晶屏上a点在显示缓冲区中对应的位所在字节的水平地址x=80H+a/8,其中a/8取商的整数部分。
第三步:根据采样值k计算a点在显示缓冲区中对应的位所在字节的垂直地址y=80H+64*k/1024,其中k/1024取商的整数部分。
第四步:计算在上两步所确定的显示缓冲字节中需要存放的内容。取a/8的余数c,将8位二进制数10000000B向右移位c-1(c等于0时取c为 9)次得到d。为了避免该点所在缓冲字节中的其他位被改变,需要事先将该缓冲字节的内容读出来(ST7920有此功能)与d取或后作为最终需要存放的内容 e。
第五步:将e存放到二三两步所确定的缓冲字节中,点亮a点。
第六步:如果a点与前一点的幅值差距大于1,那么就会造成波形显示的不连续,影响视觉效果。解决此问题的办法是:每显示完一点后,判断它与前一点的幅值差距f,若f大于1就在两点间的竖直方向上连续插入f-1个点(若硬件允许,插入点的灰度低一些,效果更好)。为达到幅值差为正和负时插入点在水平方向上的对称,可这样解决:若当前点在前一点的上方就取前一点的水平坐标作为插入点的水平坐标,若当前点在前一点的下方,则取当前点的水平坐标作为插入点的水平坐标。
以上就是显示每个点所需的步骤,在具体编程时只需将上面步骤循环128次即可在液晶屏面上画出信号波形。由于篇幅有限,这里不再提供具体程序。
3 结束语
本文设计的信号波形显示方法,在轴承振动信号测试仪的研制中已经得到成功验证。该设计方法在硬件上有两大特点。一是将LCD模块的控制线与单片机的地址线相连,单片机输出地址时就可完成对LCD模块的功能选择,无需单独向控制线送数据。二是利用读写信号产生LCD的使能脉冲。该设计方法在软件上的特点是程序简单,显示速度快。这对解决智能型LCD模块绘图速度慢的问题很有帮助。这种设计方法在绘图速度上优于其他方法,具有很好的实用价值。
参考文献
[1]李维諟,郭强,周云仙.液晶显示应用手册[M].北京:电子工业出版社,2003.
[2]刘复华.8XC196KX单片机及其应用系统设计[M].北京:清华大学出版社,2002.