求解:1602液晶显示一半正确,后一半是一堆乱码???

2020-02-04 09:12发布

#include<reg52.h>
#include<intrins.h>//包含_nop_()函数定义的头文件
sbit RS=P2^0; //寄存器选择位
sbit RW=P2^1;  //读写选择位
sbit E=P2^2;   //使能信号位
sbit BF=P0^7;  //忙碌标志位
unsigned char code string[]={"I    CARE    YOU"};
unsigned char code string1[]={"YOU    LOVE   ME"};
/**************************************************
      函数功能:延时1ms
*************************************************/
void delay1ms()
{
        unsigned char i,j;
        for(i=0;i<10;i++)
        for(j=0;j<33;j++)
           ;
}
/*****************************************
     函数功能:延时若干毫秒
      入口参数:n
****************************************/
void delay(unsigned char n)
{
        unsigned char i;
        for(i=0;i<n;i++)
        delay1ms();
}
/********************************************
      函数功能:判断液晶模块的忙碌状态
      返回值:result;result=1,忙碌;result=0,不忙
*******************************************/
unsigned char BusyTest(void)
{
        bit result;
        RS=0;
        RW=1;
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result=BF;
        E=0;
        return result;
}
/***************************************************************
      函数功能:将模式设置指令或显示地址写入液晶模块
              入口参数:dictate
**************************************************************/
void WriteInstruction(unsigned char dictate)
{
        while(BusyTest()==1);
        RS=0;
        RW=0;
        E=0;
        _nop_();
        _nop_();
        P0=dictate;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;
}
/******************************************************************
       函数功能:指定字符显示的实际地址
            入口参数: x
******************************************************************/
void WriteAddress(unsigned char x)
{
        WriteInstruction(x|0x80);
}
/**************************************************************************
          函数功能:将数据(字符标准ASCII码)写入液晶模块;
             入口参数:y(为字符常量)
*************************************************************************/
void WriteData(unsigned char y)
{
        while(BusyTest()==1);
        RS=1;
        RW=0;
        E=0;
        P0=y;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;
}
/***************************************************
    函数功能:对LCD的显示模式进行初始化设置
**************************************************/
void LcdInitiate(void)
{
        delay(15);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x0F);
        delay(5);
        WriteInstruction(0x06);
        delay(5);
        WriteInstruction(0x01);
        delay(5);
}
void main(void)
{
        unsigned char i;
        LcdInitiate();
        delay(10);
        while(1)
        {
                WriteInstruction(0x01);
                WriteAddress(0x00);
                i=0;
                while(string[1]!='')
                {
                        WriteData(string[i]);
                        i++;
                        delay(400);
                }       
                WriteAddress(0x40);
                i=0;
                while(string[i]!='')
                {
                        WriteData(string1[i]);
                        i++;
                        delay(400);
                }
                for(i=0;i<10;i++)
                delay(250);
        }
}
以上就是程序,为什么是只有前一半正确呢,后一半是一堆乱码呢??????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。