打印

单片机开发液晶显示器中程序的困惑

[复制链接]
1715|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xuexiwen33 于 2010-6-8 16:24 编辑

本人最近在用51开发一款液晶显示器,控制器用的是T6963C,在网上有很多的T6963C的开发程序,但是我有一些疑惑之处,请高手指教。
控制器上有C/D,1为命令,0为数据,接的是P2.0,CE接P2.1,WR、RD接单片机WR、RD   还有一个状态字用来查询液晶操作是否准备好,闲话少说,上程序:
第一种:
//--------------------------------------------
//              写数据函数
//--------------------------------------------
void write_data(uchar dat)
{
CD=0;          //数据
CE=0;          //LCD使能
WRIT=0;        //写
DATA_PORT=dat; //把数据送到P口
delay(1);      //当晶振较高时加延时
WRIT=1;        //关写
CE=1;          //关使能
}
//--------------------------------------------
//              写命令函数
//--------------------------------------------
void write_com(uchar com)
{
CD=1;    //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay(1);    //当晶振较高时加延时
WRIT=1;
CE=1;
}
第二种//fnST01()函数用来判断状态位的
#define LCDDW XDATA[0XFC00];
#define LCDCW XDATA[0XFD00];
uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2)//  写双参数的指令
{
if(fnST01() == 0)
return 1;
LCMDW = uPar1;
if(fnST01() == 0)
return 2;
LCMDW = uPar2;
if(fnST01() == 0)
return 3;
LCMCW = uCmd;
return 0;// 返回 0 成功
}
这两种到底哪一个更合理一些?这两种方法相同吗?请高手指教!

clip_image002.jpg (13.82 KB )

时序图

时序图

相关帖子

沙发
ayb_ice| | 2010-6-8 15:19 | 只看该作者
完成功能就可以了,
好不好由需求决定

使用特权

评论回复
板凳
xuexiwen33|  楼主 | 2010-6-8 16:23 | 只看该作者
其实我要问的是这两种方法到底哪个好一些?第一种是每一位进行控制,第二种是直接对两个端口进行控制,困惑是这两种方法相同吗?2# ayb_ice

使用特权

评论回复
地板
江陵龙少| | 2010-6-8 20:51 | 只看该作者
本帖最后由 江陵龙少 于 2010-6-8 21:32 编辑

我也正在学习T6963,稍微说一下我的理解啊,
你的第一种方式是所谓的间接法,关键点在于 /WR和/RD由程序来控制
第二种方式为直接访问法,采用的是总线指令,就是说语句LCMDW = uPar2;在编译后的汇编代码为MOVX @DPTR,A,时序的控制是有单片自动完成的,
我个人对这两种方式用汇编语言都试过,可以看出你的T6963的总线是与p0口相连,在间接法中P0口是作为普通IO口来的,需要上拉排阻,而且,读P0口的状态时需先写1
而第二种方法省事得多,更重要的是第二种方式时序控制稳健,我在用间接法时,发现屏幕出现杂点,用直接法,也就是总线指令时,非常干净简洁
建议你采用第二种方式
以上是我的浅见,

使用特权

评论回复
5
xuexiwen33|  楼主 | 2010-6-9 09:35 | 只看该作者
谢谢,我用这两种试一下!:) 4# 江陵龙少

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

56

帖子

1

粉丝