//+++ LCD1602 在 ISIS 中仿真不显示的错误函数 +++
void LCD_CheckBusy (void)
{
LCD_EN = 0;
P0 = 0xff;
LCD_RW = 1;
LCD_RS = 0;
LCD_EN = 1;
//+++++++++++++++++++++++++++++++++++
// 在 ISIS 中死等,傻等,不会有结果的!
// 但在实际中 LCD 却能显示
//+++++++++++++++++++++++++++++++++++
while (P0_7 == 1)
{
_nop_ ();
_nop_ ();
_nop_ ();
}
}
//+++ 以下是正确的函数 +++
/*-----------------------------------
LCD1602 控制器忙检测 函数
控制器空闲则返回
读数据时:RS=L, RW=H, E=H, 输出:D0-D7= 数据
D7=1: 忙;D7=0: 闲
------------------------------------*/
void LCD_CheckBusy (void)
{
LCD_EN = 0;
LCD_RW = 1;
LCD_RS = 0;
while (TRUE)
{
P0 = 0xff;
LCD_EN = 1; // +++ 要不停地检测 +++
_nop_ ();
_nop_ ();
_nop_ ();
if (P0_7 == 0) // LCD 空闲则退出
{
LCD_EN = 0;
break;
}
LCD_EN = 0;
}
}