|
|
当我采用延时的办法时,protues仿真1602液晶能正常显示字符,但当我用查忙函数时,1602液晶只亮不显示字符。查忙后程序如下:
#define DATAPORT P0
#define BUSY 0x80
void ini() //LCD初始化{
rw=0;
en=0;
P2=0xff;
writeCG();
write_order(0x38,1);
write_order(0x0c,1);
write_order(0x06,1);
write_order(0x01,1);
}
void lcd_wait(void)
{
DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
en=1;
rs=0;
rw=1;
_nop_();
_nop_();
_nop_();
while(DATAPORT&BUSY)
{ en=0;
_nop_();
_nop_();
en=1;
_nop_();
_nop_();
}
en=0;
}
void write_order(uchar com,uchar BusyC)
{
/* rs=0;
P2=order;
delay(4);
en=1;
delay(4);
en=0; */
if(BusyC)lcd_wait();
DATAPORT=com;
rs=0; // 选中指令寄存器
rw=0; // 写模式
en=1;
_nop_();
_nop_();
_nop_();
en=0;
}
void write_date(uchar date)
{
/* rs=1;
P2=date;
delay(4);
en=1;
delay(4);
en=0; */
lcd_wait( ); //检测忙信号
DATAPORT=date;
rs=1; // 选中数据寄存器
rw=0; // 写模式
en=1;
_nop_();
_nop_();
_nop_();
en=0;
}
|
-
3.png
(146.56 KB, 下载次数: 54)
-
2.png
(89.37 KB, 下载次数: 39)
-
1.png
(60.41 KB, 下载次数: 54)
|