单片机/MCU论坛
直播中

MCUFANSer

11年用户 14经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 光电显示 控制/MCU
私信 关注
[问答]

LCD1602清屏问题

以下是我编写的程序,这个程序能够显示wlecom to和I LOVE MCU,但之后显示的就是乱码了,屏幕没有清屏,而且之后的显示不是从指定位开始的,论坛的大神们麻烦给点意见
LCD显示情况 QQ截图20171106131851.png
#include
#include
typedef unsigned char BYTE;
typedef bit  BOOL;

***it LCD_RS=P2^6;
***it LCD_RW=P2^5;
***it LCDE=P2^7;

BYTE code dis1[] = {"   WELCOME  TO   "};
BYTE code dis2[] = {"I LONE MCU  "};
BYTE code dis3[] = {"   OT  EMOCLEW   "};
BYTE code dis4[] = {" UCM EVOL I  "};



delay(int ms)
{
        int i;
        while(ms--)
        {
                for(i=0;i<250;i++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
        }

}

BOOL LCD_bz()
{
        BOOL result;
        LCD_RS=0;
        LCD_RW=1;
        LCDE=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result=(BOOL)(P0&0x80);
        LCDE=0;
        return result;
               
}

LCD_wcmd(BYTE cmd)

{
        while(LCD_bz())        ;
        LCD_RS=0;
        LCD_RW=0;
        LCDE=0;
           _nop_();
        _nop_();
        P0=cmd;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCDE=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCDE=0;


}

LCD_pos(BYTE pos)
{
        LCD_wcmd(pos|0x80);

}

LCD_wdat(BYTE dat)
{
        while(LCD_bz());
        LCD_RS=1;
        LCD_RW=0;
        LCDE=0;
        P0=dat;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCDE=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        LCDE=0;
}

void init()

{
        LCD_wcmd(0x38);
        delay(1);
        LCD_wcmd(0x0c);
        delay(1);
        LCD_wcmd(0x06);
        delay(1);
        LCD_wcmd(0x01);
        delay(1);

               
}

main()
{
        BYTE i;
        init();
        delay(10);

        while(1)
        {
                LCD_wcmd(0x06);
                LCD_pos(0);
                i=0;
                while(dis1!='')
                {
                        LCD_wdat(dis1);
                        i++;
                        delay(30);
                               
                }
        LCD_pos(0x40);
        i=0;
        while(dis2[1]!='')
        {
                LCD_wdat(dis2);
                i++;
                delay(30);
                       
        }


                delay(800);
                LCD_wcmd(0x01);
            delay(1);
                LCD_wcmd(0x04);
                LCD_pos(15);
                i=0;
                while(dis3!='')
                {
                        LCD_wdat(dis3);
                        i++        ;
                        delay(30);
        }
                LCD_pos(0x4F);
                i=0;
                while(dis4!='')
                {
                        LCD_wdat(dis4);
                        i++;
                        delay(30);
                }

                        delay(800);
                        LCD_wcmd(0x01);
                        delay(200);                  

        }

}


回帖(3)

川楠

2017-11-6 19:02:25
顶一个~~~~~~~~~~~~~~~~~~
举报

人中狼

2017-11-6 19:26:29
  while(dis2[1]!='')
        {
                LCD_wdat(dis2);
                i++;
                delay(30);
                       
        }
这里的while里的dis2[1]!=''与其他的不同,多了一个下标,或者下标应该是i
举报

MCUFANSer

2017-11-6 19:36:56
引用: 人中狼 发表于 2017-11-6 19:26
  while(dis2[1]!='')
        {
                LCD_wdat(dis2);

谢谢,我仔细看了一下,是这的问题,中括号中应该是i,我写成了1,自己没检查出来,谢谢大神
举报

更多回帖

×
20
完善资料,
赚取积分