使用89C52控制LCD1602时,只显示第一排黑块

使用的是学校的一个实验仪器,其中需要使用89C52芯片控制LCD1602显示一定内容
在接线没有问题(单片机对应IO口与LCD1602对应的针脚之间电阻值均为个位数欧姆,肯定是没有接线错误和问题的)。
根据网上的说法是初始化问题,但是网上找到的所有的方法都没有解决问题。
1602的DB接的是52单片机的P1口,不是P0口,也没有拉电阻

sbit RS = P2^0;          //RS为寄存器选择:高电平时选择数据寄存器、低电平时选择指令寄存器。 
sbit RW = P2^1;                 //RW读写信号线:高电平时进行读操作,低电平时进行写操作
sbit EN = P2^2;             //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令

#define RS_CLR RS=0      //写指令
#define RS_SET RS=1         //写数据

#define RW_CLR RW=0     //写操作
#define RW_SET RW=1        //读操作
                        
#define EN_CLR EN=0          //下降沿指令命令
#define EN_SET EN=1         

#define DataPort P0     //数据端口

 void LCD_Write_Com(unsigned char com) 
 {  
 while(LCD_Check_Busy());          //忙则等待
EN_CLR;
 RS_CLR;                           //写指令     
 RW_CLR;                           //写操作     
// EN_SET; 
 DataPort= com;                    //命令数据

EN_SET; 
_nop_();
 EN_CLR;
DelayMs(1);
 }
/*------------------------------------------------
              初始化函数
------------------------------------------------*/
 void LCD_Init(void) 
{
     LCD_Write_Com(0x38);  //开显示
DelayMs(100);
    LCD_Write_Com(0x0C);  //开显示不显示光标
DelayMs(100);
//    LcdWriteCom(0x0F);  //显示光标并闪烁
    LCD_Write_Com(0x06);  //写入后指针右移
DelayMs(100);
    LCD_Write_Com(0x01);  //清屏
DelayMs(100);
    LCD_Write_Com(0x80);  //设置数据指针起点
DelayMs(100);
}
/*------------------------------------------------
                    主函数             
------------------------------------------------*/ 
void main(void) 
{ 
unsigned int i; 
unsigned char *p; 

LCD_Init(); 
 i = 0;
while (1)
{
DelayMs(100);
LCD_Write_String(8,1,'0');
DelayMs(100);
}
}

 请问如何解决问题?

引用 皆我百晓生 小程序回复内容作答:

从您提供的代码和描述来看,显示器可能无法正常工作的原因有几种可能的原因:

  1. 电源电压不足:请确保您提供LCD1602所需的电源电压为5V,并且电源稳定。

  2. 初始化命令错误:您可以尝试不同的初始化序列以确保正确配置LCD1602。尝试以下初始化序列:

    LCD_Write_Com(0x38);   //8位、两行模式
    DelayMs(5);
    LCD_Write_Com(0x0C);   //显示开,光标关
    DelayMs(5);
    LCD_Write_Com(0x06);   //写入后指针右移
    DelayMs(5);
    LCD_Write_Com(0x01);   //清除显示和设置指针起始位置
    DelayMs(5);
    LCD_Write_Com(0x80);   //设置数据指针起始位置为第一行
    DelayMs(5);
    
  3. P0端口无法正常工作或接触不良:可以尝试更换单片机或检查P0端口的接线和焊接是否正确。确保LCD1602与P0端口连接良好。

  4. LCD1602本身故障:尝试使用另一个LCD1602模块进行测试,看能否正常工作。如果另一个模块可以正常工作,可能是您当前使用的LCD1602模块存在问题,需要更换。

希望这些建议对您有所帮助!