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

lcd1602显示问题

时间:10-02 整理:3721RD 点击:
为什么只能在一行显示,不能再第二行显示,请大虾指点江山哇
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
uchar code table[]={"welcome!"};
uchar code table1[]={"we are fighting"};
/************延时函数*************************/
delay(uint x)
{
        uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/*************忙检查****************************/
uchar busy_check()
{
        uchar result;
        rs=0;
        rw=1;
        en=1;
        delay(1);
        result=(P0&0x80);
        en=0;
        return result;
}
/**************写命令***********/
uchar write_lcd_command(uchar cmd)
{
        while(busy_check());
        rs=0;
        rw=0;
        en=0;
        P0=cmd;
        en=1;
        delay(1);
        en=0;
        return cmd;
}
/*************lcd显示位置*********/
void set_disp_pos(uchar pos)
{
        write_lcd_command(pos/0x80);
}
/*************发送数据************/
void write_lcd_data(uchar dat)
{
        while(busy_check());
        rs=1;
        rw=0;
        en=0;
        P0=dat;
        en=1;
        delay(1);
        en=0;       
}
/*************lcd初始化****************/
void init_lcd()
{
        rs=0;
        en=0;
        write_lcd_command(0x38);
        delay(1);
        write_lcd_command(0x0c);
        delay(1);
        write_lcd_command(0x06);
        delay(1);;
        write_lcd_command(0x01);
        delay(1);
}
void main()
{
        uchar z;
        //uint num;
        init_lcd();
        delay(10);
        set_disp_pos(0x04);
        z=0;
        while(table[z]!='\0')
{
         write_lcd_data(table[z]);
                z++;
}
                set_disp_pos(0x41);
                z=0;
                while(table1[z]!='\0')
{
         write_lcd_data(table1[z]);
                z++;
}
while(1);
}

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

网站地图

Top