单片机串行控制12864lcd能不能读bf忙状态,我怎么读不了 50
4个回答
展开全部
LCD12864_PORT = 0x00;
这句话是什么意思?
你用的是51单片机,还是别的单片机?
为什么是给数据端口0x00,最起码要给0xff吧……
哦,刚才搜了一下,这篇文章非常好,很详细的说了IO的结构,在第6页。http://www.doc88.com/p-669125856416.html
这句话是什么意思?
你用的是51单片机,还是别的单片机?
为什么是给数据端口0x00,最起码要给0xff吧……
哦,刚才搜了一下,这篇文章非常好,很详细的说了IO的结构,在第6页。http://www.doc88.com/p-669125856416.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是可以读取忙信号的,但是一般都没有必要去读取,他的flash速度应该是够用的。直接清屏送显就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我把我的写程序给你参考下。
/******************************************************************************
检测12864忙函数,如果12864忙 等待
******************************************************************************/
void ReadLcdBusy(void)
{
LCD12864_PORT = 0x00;
LcdRs = 0;
LcdRw = 1;
LcdEn = 1;
while(LCD12864_PORT & 0x80);
LcdEn = 0; }
/******************************************************************************
12864写命令
******************************************************************************/
void WriteLcdCommand(unsigned char Value)
{
ReadLcdBusy();
LcdRs = 0;
LcdRw = 0;
LCD12864_PORT = Value;
LcdEn = 1;
_nop_();
_nop_();
LcdEn = 0;
}
/******************************************************************************
12864写数据
******************************************************************************/
void WriteLcdData(unsigned char Value)
{
ReadLcdBusy();
LcdRs = 1;
LcdRw = 0;
LCD12864_PORT = Value;
LcdEn = 1;
_nop_();
_nop_();
LcdEn = 0;
}
/******************************************************************************
检测12864忙函数,如果12864忙 等待
******************************************************************************/
void ReadLcdBusy(void)
{
LCD12864_PORT = 0x00;
LcdRs = 0;
LcdRw = 1;
LcdEn = 1;
while(LCD12864_PORT & 0x80);
LcdEn = 0; }
/******************************************************************************
12864写命令
******************************************************************************/
void WriteLcdCommand(unsigned char Value)
{
ReadLcdBusy();
LcdRs = 0;
LcdRw = 0;
LCD12864_PORT = Value;
LcdEn = 1;
_nop_();
_nop_();
LcdEn = 0;
}
/******************************************************************************
12864写数据
******************************************************************************/
void WriteLcdData(unsigned char Value)
{
ReadLcdBusy();
LcdRs = 1;
LcdRw = 0;
LCD12864_PORT = Value;
LcdEn = 1;
_nop_();
_nop_();
LcdEn = 0;
}
更多追问追答
追问
我是说串行控制,不是并行控制。
追答
/*****串行发送一个字节*****/
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i<8;i++)
{
SCLK = 0;
Dbyte=Dbyte<<1; //左移一位
SID = CY; //移出的位给SID
SCLK = 1;
SCLK = 0;
}
}
/*****
串行接收一个字节
*****/
uchar ReceiveByte(void)
{
uchar i,temp1,temp2;
temp1 = 0;
temp2 = 0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
SCLK = 0;
SCLK = 1;
SCLK = 0;
if(SID) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
SCLK = 0;
SCLK = 1;
SCLK = 0;
if(SID) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}
/****检测LCD忙状态*****/
void CheckBusy( void )
{
do SendByte(0xfc); //11111,RW(1),RS(0),0
while(0x80&ReceiveByte()); //BF(.7)=1 Busy
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询