BOOL LCD_Busy()
{
BOOL result,;
P0=0XFF;
RS=0;
RW=1;
LCDE=1;
NOP;
NOP;
NOP;
NOP;
result=(BOOL)(P0&0X80);//这里是查看是否在繁忙状态。如果不忙STA7(接到P0^7)应该是0
return result;
}
void LCD_WriteDat(BYTE Dat)
{
while(LCD_Busy());
RS=1;
RW=0;
LCDE=0;
LCDE=1;
P0=Dat;
LCDE=0;
NOP;
NOP;
}
写指令的函数就不说了。反正大同小异。
我只是不明白这里写指令,写数据的时候为什么while(LCD_Busy());为什么要在忙的时候停在这里不动,而不能在不忙的时候进行写数据/指令。
void LCD_WriteDat(BYTE Dat)
{
while(LCD_Busy())//这个时候前面检测忙的时候忙返回0,不忙返回1;
{
RS=1;
RW=0;
LCDE=0;
LCDE=1;
P0=Dat;
LCDE=0;
NOP;
NOP;
}
}
前面有一个定义:
typedef unsigned char BYTE
typedef unsigned bit BOOL
------解决方案--------------------
不明白为什么你不明白。LED忙得时候写不进去,所以要等到它闲才可以写啊。
------解决方案--------------------
有时候这个忙是等不到的。。。
用个长延时代替试试
------解决方案--------------------
1 注意是忙返回1,不忙返回0
result=(BOOL)(P0&0X80);//这里是查看是否在繁忙状态。如果不忙STA7(接到P0^7)应该是0
return result;
2 如果不想在忙时等,只能用if语句判断,忙则退出,并返回一个不成功标志。主程序可以在一定时间后或空闲时重试。
3 无论如何,不应该在while循环里面写数据,你不需要也不应该多次写同一数据的