如何在lcd1602上显示两行字符,求大神解决,谢谢?

2019-07-15 09:11发布

这是我编写的一个只能显示一行的代码
#include "LCD1602.h"
#include "Delay.h"
/*sbit RS=P20;
        sbit RW=P21;
        sbit LE=P22;
        DATA-->P1
*/
void lcd1602_busy()
{
        RS=0;
        RW=1;
        P1=0xff;
        while(1)
        {
                LE=1;
                if(P1<0x80) break;   //P^7!=0ʱ£¬ÖÕÖ¹
                LE=0;
        }
        LE=0;
}

void Lcd1602_Init()
{
        delay_ms(15);
        WR_cmd(0x38);//ÉèÖÃÏÔʾģʽ
        delay_ms(5);
        WR_cmd(0x38);
        delay_ms(5);
        WR_cmd(0x38);
        WR_cmd(0x38);
        
        lcd1602_busy();//¼ìæ
        WR_cmd(0x08);  //¹ØÏÔʾ
        lcd1602_busy();
        WR_cmd(0x01);    //ÏÔʾÇåÆÁ
  lcd1602_busy();
        WR_cmd(0x06);    //ÏÔʾ¹â±êÒƶ¯ÉèÖÃ
        lcd1602_busy();
        WR_cmd(0x0c);     //ÏÔʾ¿ª¼°¹â±êÉèÖÃ

}

void WR_data(uchar dat)
{
        RS=1;
        RW=0;
        P1=dat;
        
//        LE=0;
        LE=1;
        
        delay_ms(1);
        LE=0;
        
        delay_ms(1);
        
        return;
}

void WR_cmd(uchar cmd)
{
        RS=0;
        RW=0;
        P1=cmd;
        
//        LE=0;
        LE=1;
        
        delay_ms(1);
        LE=0;
        
        delay_ms(1);
        
        return;
}

//        void LCD_dis_char(uchar x,uchar y,uchar dat)
//        {
//        uchar address;
//        if(y==1)
//                address=0x80+x;
//        else
//                address=0xc0+x;
//        WR_cmd(address);
//        WR_data(dat);
//        }

void LCD_dis_str(/*uchar x,*/uchar y,uchar *str)//xΪ×ø±ê£¬yΪÐкÅ
{
        uchar address;
        if(y==1)
//        address=0x80+x;
        address=0x80;
        else
//                address=0xc0+x;        
        address=0xc0;
                WR_cmd(address);
        while( *str != '')
        {
                WR_data(*str);
                str++;
        }
        
}

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