振动信号波形在图形型液晶模块上的实现
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存放到二三
- 什么是module 以及如何写一个module(转)(04-23)
- 在Linux 2.6内核下编译可以加载的内核模块(04-23)
- 用DSP56F805 PWM模块输出高频正弦波(05-25)
- DSP与PC机的无线交换调制模块设计(09-17)
- 基于TMS320F28334的伺服系统模块设计(02-25)
- Linux安全模块(LSM)简介(06-12)