lcd1602乱码

2019-07-15 13:20发布

有时能正常亮,但过一会儿,关闭电源再打开和复位后就又乱码了,让他循环跑后,跑个三十、四十遍又可以了,这是什么原因,求解????????????




#include<reg52.h>
sbit RS=P3^5;
sbit RW=P3^6;
sbit E=P3^7;

/**********************************
延时
**********************************/
void delay(int x)
{
        x=x*20;
        for(;x>0;x--)
        ;

}

/**********************************
写指令
**********************************/
void order(int x)
{
        E=0;
        RS=0;
        RW=0;
        P0=x;
        delay(10);
        E=1;
        delay(20);
        E=0;
}

/*****************************
读出数据
*****************************/
void out(char y)
{
        E=0;
        RS=1;
        RW=0;
        P0=y;
        delay(10);
        E=1;
        delay(20);
        E=0;
}

/****************************************
主函数
****************************************/
void main()
{
        int x,y,z;
        int code a[]={0x4d,0x79,0x20,0x6e,0x61,0x6d,0x65,0x20,0x69,0x73,0x20};
        int code b[]={0x59,0x75,0x20,0x50,0x65,0x6e,0x67};
        int code c[]={0x49,0x20,0x4c,0x4f,0x56,0x45,0x20,0x59,0x4f,0x55};
        int code d[]={0x28,0x5e,0x6f,0x5e,0x20,0x29};
          while(1)
          {
                                /******************
                                初始化
                                ******************/
                                delay(300);
                                order(0x38);
                                delay(100);
                                order(0x38);
                                delay(100);
                                order(0x38);
                                delay(100);
                                order(0x01);
                                order(0x0c);
                                order(0x06);
                               
               
               
                        y=0x80;                         //显示地址
                        order(y);
                        delay(400);
               
                        /*******************************
                        My name is
                        *******************************/
                        for(x=0;x<11;x++)
                        {
                                                  //输出字符所在地址
                                delay(200);
                                out(a[x]);                  //输出字符
                        }
               
                        y=0xc8;                         //显示地址
                        delay(400);
                        order(y);
               
                        /*******************************
                        Yu Peng
                        *******************************/
                        for(x=0;x<7;x++)
                        {
                                delay(200);
                                out(b[x]);                  //输出字符
                        }
                       
                        for(z=0;z<50;z++)
                        {
                                delay(6000);
                        }
               
               
                                /******************
                                初始化
                                ******************/
                                order(0x38);
                                delay(300);
                                order(0x38);
                                delay(300);
                                order(0x0c);
                                delay(300);
                                order(0x06);
                                delay(300);
                                order(0x01);
                                delay(300);
               
               
               
                        y=0x80;                                   //显示地址
                        delay(400);
                        order(y);
               
                        /**********************************
                        I LOVE YOU
                        **********************************/
                        for(x=0;x<10;x++)
                        {
                                delay(200);
                                out(c[x]);                  //输出字符
                        }
               
                        y=0xc8;                         //显示地址
                        delay(400);
                        order(y);
               
                        /**********************************
                        ( ^O^ )
                        **********************************/
                        for(x=0;x<6;x++)
                        {
                                delay(200);
                                out(d[x]);                  //输出字符
                        }


        }
       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。