微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > lcd1602乱码

lcd1602乱码

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


#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]);                  //输出字符
                        }

        }
       
}

没有忙检查函数。液晶屏属于慢显示器件。

查忙,可以解决这个问题

LCD初始化判忙看看.

你这个  
for(z=0;z<50;z++)
                        {
                                delay(6000);
                        }
6000超区了,你delay里面是*20,你自己看一下,然后你自己检查一下,是不是有检测lcd的busy状态.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top