|
回复 6楼 open82977352 的帖子
有了上述程序,就可以方便地在uPD16682A上指定位置显示设定的图案和字符了。如果用户需要动态地展示信号波形和曲线,还可设计出专用的画点和画线函数,从而大大提高了字符液晶显示屏的动态图形显示能力。通常而言,液晶显示屏上的一点对应液晶显示驱动器显示RAM中的一位。显示RAM中的某位为1,则在液晶显示屏上的相应点即为点亮状态;而要想实现在液显示屏上动态的显示点和曲线,必须用到显示RAM中的数据。通常的做法是读取指定点周围的数据,然后在这些点中的某个指定位置插入1位,从而将液晶显示屏上的指定点点亮,这就是基本的画点原理。但是,在串行方式下,uPD16682A不具备数据读出能力。为此,我们仿照显示RAM显示的方式,在MSP430F149的数据区开辟了一块和uPD16682A显示RAM同样大小的内存块,在向uPD16682A显示RAM写入显示数据的同时,也向该内存块的对应位置写入同样的数据,保证了该内存块的内容和uPD16682A显示RAM中的数据是同步刷新的。因此在画点函数中,我们直接从该内存块中取出需要的显示数据进行处理,然后再通过自定义串行总线送往uPD16682A进行显示。用这种方式,我们实现了在液晶显示屏的任意位置画出一个点,并且还可以利用这种方式编制自己的画线函数,这样就使uPD16682A具备了动态显示波形的能力,也就扩展了字符液晶显示屏动态曲线波形的显示功能。以下是uPD16682A编写的画点函数:
void DrawPointXY(unsigned char x,unsigned char y){
unsigned char page,dot,dat,CouL,CouH;
dot=0x01;
page=y/8; /*计算当前点页地址、列地址*/
r_page=page; /*点亮当前点并保持周围点信息不变*/
r_column=x;
page|=0xB0;
dat=y%8;
dot=dot<
CouH=(x&0xF0)>>4;
/*通过自定义串行总线向uPD16682A发送数据*/
CouH=CouH|0x10;
CouL=(x&0x0F);
Write_Command(page);
Write_Command(CouH);
Write_Command(CouL);
dat=DisplayRam[r_page][r_column];
dat|=dot;
Write_DisplayData(dat); /*向显示RAM写入数据*/
}
程序中的二维全局数组DisplayRam[][]即为在MSP430F149中开辟的内存块,用于保存当前uPD16682A显示RAM中对应位置的显示数据。全局变量r_page和r_column分别保存8位显示数据的页地址和列地址。
如果想进一步实现曲线的显示,程序中则需要计算两个点之间在X方向和Y方向上的偏差,并依据偏差大小来插入要显示的点。本系统中,用这种设计方法获得了平滑的曲线显示效果。
3 应用
经实践证明,本文所介绍的利用微控制器的I/O端口实现微控制器和液晶显示驱动器之间的自定义串行总线的设计方案,取得了很好的应用效果。设计的液晶显示系统工作稳定可靠,开发的在字符型LCD下动态显示曲线波形的技术,扩展了字符型LCD动态显示曲线的功能,也为液晶显示驱动器的应用开发提供了一种新的途径。本文所提出的用软件模拟串行总线的方法具有很强的通用性,为实现I2C串行接口提供了一种新方式。 |
|