访问电脑版页面

导航:老古开发网手机版其他

点阵式液晶图形显示模块画图功能的实现

导读:
关键字:

 
点阵式液晶显示模块相对于段码式LCDLED的区别在于不仅它可以显示字符,更重要的是可以画图。在很多的测试类设备中,需要设备能够实时的显示曲线以判断被测设备的工作状况,如果采用先保存数据然后送给上位机处理,会加重成本,而且很不方便,而采用段码式LCDLED显然不能胜任,用点阵式图形液晶显示器可以方便的实现这些功能。
本文介绍的点阵式液晶显示模块是信利公司的MPG240128A1-7型,它的控制芯片是东芝公司的T6963C

模块的特点
T6963C
是点阵式液晶图形显示器,可以图形方式、字符方式、图形和字符合成方式显示,以及实现字符方式下的特征方式显示,还可以象CAD一样进行屏拷贝操作。本文中的液晶模块是240×128点阵。

硬件实现
本液晶模块与MCU之间的数据传送可以通过串口方式,也可以通过并口方式来实现,图1LCD模块与MCU80C196KC的并口方式下的接口图,其中:
D0~D7
MCUAD0~AD7相连,用来传送数据。
C//D
可以与MCU的低位地址线相连,本例是连接AD1,用它区分送给LCD控制器的是命令(Code)还是数据(Data)
/RESET
在本图中也与VCC电源相连,含义是不使用硬件复位。
/RD
/WR分别连接MCU的读和写信号。
/CE
连接MCU的译码地址。
VO
LCD需要的负电压。

关键步骤
LCD
初始化
LCD
初始化包括设置显示图形区首地址,图形区宽度,显示开关设置。
图形区首地址:在点阵式液晶图形显示器中,LCD屏幕上的每个显示单元对应一个地址,从左上角开始,从左到右,从上到下。在图形显示方式下,显示单元的单位是1×8点阵(即一个字节),对应于240×128的屏幕,它有240×128×83840个显示单元,一屏的地址范围是0_3839。命令控制字是24H42H。有关命令字请详细参阅T6963C使用手册。
图形区宽度:它用来调整使用的有效显示窗口宽度,表示每行可有效显示的单元数。对于240×128的显示屏,最多每行有240/830个显示单元。命令控制字是43H
显示开关设置是将相应的显示方式打开,例如要显示图形,则将图形方式控制位置1。命令控制字是98H。图2是初始化流程图。
屏读指令
要画出需要的图形,则必须知道图形每个点的坐标值,显然画图要按点控制。我们知道控制器的显示单元是1×8点阵,也就是一次只能画一行8个点。这似乎有矛盾,但T6963C控制器提供了屏读指令,它可以将当前地址所指向的显示单元的值读到控制器的缓冲区,我们再通过数据总线读到MCU,这样我们把将要写入每个单元的值与原来的值相或,那么既不会破坏原来的值,又可以将新值写入,以实现我们所需要的按点控制的方式。屏读命令控制字是E0H

软件实现
我们以正弦波为例说明具体画图过程。
LCD屏幕上画正弦波,我们可以事先按一定采样率算出相应的点值。然后转换为LCD屏幕上点的坐标值,因为这样可以很直观地控制将要给相应位置显示的信息。以240×128的屏幕为例,它的标范围是纵坐标0_127,横坐标0~29。要在240×128的屏幕上画两个完整的正弦波,幅值为30(纵向30个点),每个周期采样45个点,并带有横坐标和纵坐标。构造正弦波表格:
TABLE_SIN[45]={ 0
4812161922252729303030292826242118141062-2-6-10-14-18-21-24-26-28-29 -30-30-30-29-27-25-22-19-16-12-8 -40}
因为画图的显示单元是1×8,一次画一个点,故画图时写入代码值是80H40H20H10H08H04H02H01H,并且还要将正弦波的值转换为这几个值中的的一个,构造码值表格TABLE_DOT[8]={0x800x400x200x100x080x04x020x01}
下面介绍坐标转换过程:
正弦波的幅值代表的是它离横坐标的距离。假设原点在LCD屏幕上的坐标值是(160),则将第i个点幅值转换为纵坐标的值是60-TABLE_SIN[i],它的横坐标是i/8的商数,代码值是TABLE_DOT[i/8的余数],这样我们调用画图程序就可以实现画正弦波。下面是具体画图的几个主要函数。
在主程序中有以下调用语句:
for(i=10;i<110;i++)//
画横坐标
graphic(0x80,2,i);
for(i=1;i<29;i++)//
画纵坐标
graphic(0x0ff,i,64);
for(i=0;i<118;i++)//
画正弦波
graphic(TABLE_DOT[i%8],2+i/8,64-TABLE_SIN[i]);
下面是屏读函数,读出给出缓冲区地址的值,并返回结果:
unsigned char pindu(x,y)
unsigned char x,y;{
unsigned char value;
w2d(x,y,0x24);
wd(0x0e0);
value=r1d();//
LCD缓冲区读数据
return value;
}
下面是在屏幕上画一个点的画点函数:
void graphic(code,x,y)
unsigned char code,x,y;//x
坐标0~29
{ unsigned int xy;//
坐标变换中间变量
unsigned char oo,code1;
//
计算显示RAM地址
xy=y*30+x;//240
为液晶屏一行显示的字符数
x=xy%256;
y=8+xy/256;//
图形缓冲区在高地址
w2d(x,y,0x24);//
写入LCD
code1=pindu(x,y);
code=code1;
w1d(code,0x0c0);
写入LCD}
变量说明读者可以根据使用情况判断,函数r1d()w2d()w1d()分别是从LCD缓冲区读一个值,给缓冲区写两个数,写一个数函数。

应用
笔者在给长庆油田开发的双参数测井仪设备中,采用了本液晶模块,里面需要画两个图形,一个是要测出抽油杆油梁的受力情况,根据画出图形判断油梁是否工作正常,另一个是画出微音传感器采样的声波波形来判断油井的大概深度。整个仪器小巧方便(重量只有2公斤),具有很强的实用性。

参考文献:
1.
北京德彼克电子工程公司,T6963C控制器点阵图形液晶显示模块使用手册,1998
2.
孙函芳主编,INTEL16位单片机,北京航空航天大学出版社,1995
3.
程军,Intel 80C196单片机应用实践与C语言开发, 北京航空航天大学出版社2000

来源:电子产品世界   作者:赵伟杰 范蟠果  2005/10/20 16:17:00
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!