论坛风格切换切换到宽版
  • 9438阅读
  • 87回复

LCD大屏,DIY设备的好东西 [复制链接]

上一主题 下一主题
离线BD7RC
发帖
3283
只看该作者 40楼 发表于: 2007-05-11
确定有背光的话,我也定两片,顺丰到付吧。农行打款,但是这几天过去看里面的人多得要晕倒。

收货地址:530006 广西南宁市大学路广西民族大学物电学院 李映超 电话13878829086
离线bd4iy
发帖
1215
只看该作者 41楼 发表于: 2007-05-12
屏已经收到 ,谢谢!
离线saul
发帖
407
只看该作者 42楼 发表于: 2007-05-12
开始引用别人的文章


点阵式液晶图形显示模块画图功能的实现(t6963c)
来源:电子产品世界/赵伟杰 范蟠果
核心器件: mpg240128a1-7t6963c


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

本文介绍的点阵式液晶显示模块是信利公司的mpg240128a1-7型,它的控制芯片是东芝公司的t6963c。

模块的特点

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

本液晶模块与mcu之间的数据传送可以通过串口方式,也可以通过并口方式来实现,图1是lcd模块与mcu80c196kc的并口方式下的接口图,其中:

d0~d7与mcu的ad0~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×8=3840个显示单元,一屏的地址范围是0_3839。命令控制字是24h和42h。有关命令字请详细参阅t6963c使用手册。

图形区宽度:它用来调整使用的有效显示窗口宽度,表示每行可有效显示的单元数。对于240×128的显示屏,最多每行有240/8=30个显示单元。命令控制字是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,4,8,12,16,19,22,25,27,29,30,30,30,29,28,26,24,21,18,14,10,6,2,-2,-6,- 10,-14,-18,-21,-24,-26,-28,-29, -30,-30,-30,-29,-27,-25,-22,-19,-16,-12,-8, -4,0}

因为画图的显示单元是1×8,一次画一个点,故画图时写入代码值是80h,40h,20h,10h,08h,04h,02h,01h,并且还要将正弦波的值转换为这几个值中的的一个,构造码值表格table_dot[8]={0x80,0x40,0x20,0x10,0x08,0x04,x02, 0x01}。

下面介绍坐标转换过程:

正弦波的幅值代表的是它离横坐标的距离。假设原点在lcd屏幕上的坐标值是(1,60),则将第i个点幅值转换为纵坐标的值是60- table_sin,它的横坐标是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);

下面是屏读函数,读出给出缓冲区地址的值,并返回结果:

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公斤),具有很强的实用性。
离线saul
发帖
407
只看该作者 43楼 发表于: 2007-05-12
给个实践ok的驱动范例给你, for the sake of "a month " :(


/* ============================================================================

  测试软件 for t6963  
                           
  long: 240 dots , width: 128 dots     ram : 32k

                              auther: microlcd   12 , may 2003

  ============================================================================= */

#i nclude   "reg52m.h"
#i nclude   "mapdat.h"

#i nclude <absacc.h>



//------------------------------------------- 使用直接总线方式控制t6963

#define reset   p3_5
#define ce     p3_4

//------ p0 口接 db0 ~ db7 , p0口需要上拉10k的电阻到+5v.

//------ rs接p2_7, /rd接3_7, /wr接p3_6




//------------------------ ram 地址选择寄存器
sfr auxr = 0x8e;



#define pdata     xbyte[0x0000]  
#define pcom     xbyte[0x8000]



#define t1 1
#define lt 40000  
#define st 50

/*--------------------- 延时 ------------------- */

void delay(uint times)
{
while(times)times--;
}

/*------------------- 状态 测试 ------------ */

/* 0 --> 测试sta0,sta1 状态 */
/* 1 --> 测试sta2,sta3 状态 */

void   checkbf()
{

ce=0;

while((pcom&0x23)!=0x23);

ce=1;

}


/*-------------- 写 指令 寄存器------ */

void wcode(uchar order)
{
ce=0;
pcom=order;
//delay(st);
ce=1;
}


/*-------------- 写数据   寄存器------ */

void wdata(uchar order)
{

ce=0;
pdata=order;
//delay(st);
ce=1;

}



/* ------------------------ 初始化子程序---------------------------------*/

void init()
{  


//rd=1;
//wr=1;



checkbf();   /* 格式:数据通道(参数1,参数2) + 命令代码 */
wdata(0x0);

checkbf();
wdata(0x0);
checkbf();
        wcode(0x40); /* 设置文本 显示区域首地址:0000h */

checkbf();
wdata(0x1e);
checkbf();
wdata(0x0);
checkbf();
        wcode(0x41); /* 设置文本宽度 30个字符,既一行显示所占字节数 */


checkbf();
wdata(0x0);
checkbf();
wdata(0x08);
checkbf();
        wcode(0x42); /* 设置图形 显示区域首地址:800h */

checkbf();
wdata(0x1e); /* 240 byte */
checkbf();
wdata(0x0);
checkbf();
        wcode(0x43); /* 设置图形宽度 240 个字节,既一行显示所占字节数 *



checkbf(0);
        wcode(0xa0); /* 定义光标大小, 1 格显示 */

checkbf();
        wcode(0x80); /* 设置显示方式 ,选定内部 cgrom,“或逻辑” */

checkbf();
        wcode(0x98); /* 仅打(图形) 显示*/
       


}


/* ----------------- 地址定位 ------------- */

void gps(uint l_addr)

{

uchar kl;

kl=l_addr%256;   /* 测定地位 */
wdata(kl);

  kl=l_addr/256; /* 测定高位 */  
  wdata(kl);  
         
          wcode(0x24);   /* 设置显示指针 800h */

}




/* ############################## main   programma ##################################*/

      void main()
{


uint n;
//uchar k;

auxr=0x03; //extram=0 --> 选择内部附加的ram; extram=1 --> 选择外部数据ram空间.

reset=0;   /* 低 电 平 复 位 */
delay(lt);
reset=1;
                               



init(); /* ---------------------------------------------------------------- 初始化 lcm */



//---------------- clear



/* ---------------------------------------++++++++ 以下是 t6963c 的图形测试区 ( 显示一幅图片) +++++++++++*/


gps(0x800); /* 显示 1 */

checkbf();    
wcode(0xb0);       /* 自动写模式 */

for(n=0;n<3840;n++) wdata(map1[n]);

checkbf();
wcode(0xb2);



while(1);

}
离线xiongjunfeng
发帖
1220
只看该作者 44楼 发表于: 2007-05-12
'
那就用别的快递公司.
'
申通快递是有的,我用过。可以么?
离线bellstudio
发帖
2820
只看该作者 45楼 发表于: 2007-05-12
楼主,下午款汇农行
发货地址:
北京市朝阳区酒仙桥东路1号m7楼
北京日立控制系统有限公司
邮编:100016
收件人:薛祖旭
手机:1三81o121八74
离线BD5FNA
发帖
2159
只看该作者 46楼 发表于: 2007-05-12
'
申通快递是有的,我用过。可以么?
'可以的,但这个公司到付价格很高的.
离线BD5FNA
发帖
2159
只看该作者 47楼 发表于: 2007-05-12
'
楼主,下午款汇农行
发货地址:
北京市朝阳区酒仙桥东路1号m7楼
北京日立控制系统有限公司
邮编:100016
收件人:薛祖旭
手机:1三81o121八74
'好的,我会尽快发出的.
离线xiongjunfeng
发帖
1220
只看该作者 48楼 发表于: 2007-05-12
'
可以的,但这个公司到付价格很高的.
'
是的是的,所以你问下,一共多少钱我一起寄给你。应该不会超过15的。
离线BD5FNA
发帖
2159
只看该作者 49楼 发表于: 2007-05-13
'
是的是的,所以你问下,一共多少钱我一起寄给你。应该不会超过15的。
'应该说不会少于15元.上次寄到陕西的就是20元.
离线BD5FNA
发帖
2159
只看该作者 50楼 发表于: 2007-05-14
'
楼主,下午款汇农行
发货地址:
北京市朝阳区酒仙桥东路1号m7楼
北京日立控制系统有限公司
邮编:100016
收件人:薛祖旭
手机:1三81o121八74
'今天已用顺丰发出,请注意查收!
离线bellstudio
发帖
2820
只看该作者 51楼 发表于: 2007-05-15
已经收到:d
离线xiongjunfeng
发帖
1220
只看该作者 52楼 发表于: 2007-05-15
'
应该说不会少于15元.上次寄到陕西的就是20元.
'
问下多少钱啊,反正比到付肯定便宜。我一起寄给你啊
离线maxing
发帖
27
只看该作者 53楼 发表于: 2007-05-15
楼主液晶屏还有吗?我想要两块~~
离线BD5FNA
发帖
2159
只看该作者 54楼 发表于: 2007-05-16
'
问下多少钱啊,反正比到付肯定便宜。我一起寄给你啊
'这样吧,你就多加15元邮费吧.
离线BD5FNA
发帖
2159
只看该作者 55楼 发表于: 2007-05-16
'
楼主液晶屏还有吗?我想要两块~~
'还有的.
离线maxing
发帖
27
只看该作者 56楼 发表于: 2007-05-16
楼主,怎么联系呀?给你发悄悄话了
离线xiongjunfeng
发帖
1220
只看该作者 57楼 发表于: 2007-05-16
'
这样吧,你就多加15元邮费吧.
'
好的,谢谢。星期六去银行寄钱
离线BD5FNA
发帖
2159
只看该作者 58楼 发表于: 2007-05-16
'
楼主,怎么联系呀?给你发悄悄话了
'已回信息!
离线xiongjunfeng
发帖
1220
只看该作者 59楼 发表于: 2007-05-19
怎么找不到银行卡号啊