打印

哪位大侠来解救小弟啊?1602液晶问题

[复制链接]
1902|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flyqqm|  楼主 | 2010-4-4 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我编写的一个1602液晶,照着书上编的一个,原理都知道,接线是数据线接P2,RS,RW,EN分别是P1^0,P1^1,P1^2。
我用的是在线SST仿真,外部晶振是11.0592MH,可是连清屏都没有反应,一直显示一行黑,请大侠们指点,感激不尽:) 。
程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Data P2
#define by 0xff
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;
void Daley5ms()
{
uint i=5552;
while(i--) ;
}
void Daley400ms()
{
uchar i=5;
uint j;
while(i--)
{
  j=7269;
  while(j--) ;
};
}
/*void WaitEnable()
{
Data=0xff;
lcdrs=0;
lcdrw=1;
_nop_();
lcden=1;
_nop_();
_nop_();
while(Data&by);   //why??
lcden=0;
}  */
void WriteCommand(uchar com,uchar attribc)
{
// if(attribc)
// WaitEnable();
lcdrs=0;
lcdrw=0;
_nop_();
Data=com;
_nop_();
lcden=1;
_nop_();
_nop_();
lcden=0;
}
void LocateXY(char posx,char posy)
{
uchar temp;
temp=posx&0xf;
posy&=0x1;
if(posy)
temp|=0x04;
temp|=0x08;
WriteCommand(temp,1);
}
void WriteData(char dataw)
{
// WaitEnable();
lcdrs=1;
lcdrw=0;
_nop_();
Data=dataw;
_nop_();
lcden=1;
_nop_();
_nop_();
lcden=0;
}
void LcdReset()
{
WriteCommand(0x38,0);
Daley5ms();
WriteCommand(0x38,0);
Daley5ms();
WriteCommand(0x38,0);
Daley5ms();
WriteCommand(0x38,1);
WriteCommand(0x08,1);
WriteCommand(0x01,1);
WriteCommand(0x06,1);
WriteCommand(0x0c,1);
}
void WriteLocateChar(uchar x,uchar y,uchar wdata)
{
LocateXY(x,y);
WriteData(wdata);
}

void main()
{
void LcdReset();
WriteCommand(0x01,1);
while(1);
}

相关帖子

沙发
qufo| | 2010-4-5 12:34 | 只看该作者
可能延时不够吧。

使用特权

评论回复
板凳
tcc8073| | 2010-4-5 12:56 | 只看该作者
访问的时候要查询LCD的忙信号,LCD不忙的时候才可以进行操作

使用特权

评论回复
地板
hyg1984| | 2010-4-5 13:39 | 只看该作者
_nop_只有1us,可能不够,建议看时序图!忙信号也没有检测

使用特权

评论回复
5
adofu2008| | 2010-4-5 21:19 | 只看该作者
时序不对!

使用特权

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

本版积分规则

0

主题

1

帖子

1

粉丝