我的lcd1602不显示

sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;

img


unsigned char busycheck()
{ unsigned char status; RS=0; RW=1; EN=1; Dealy_1ms(1); status=P0; EN=0; return(status);}
void write_cmd(unsigned char cmd)
{ while((busycheck()&0x80)==0x80); RS=0; RW=0; EN=0; P0=cmd; EN=1; Dealy_1ms(1); EN=0; }
void write_data(unsigned char dat) { while((busycheck()&0x80)==0x80); RS=1; RW=0; EN=0; P0=dat; EN=1; Dealy_1ms(1); EN=0;}
void Init_LCD()
{ write_cmd(0x38);
Dealy_1ms(1);
write_cmd(0x08);
Dealy_1ms(1);
write_cmd(0x01);
Dealy_1ms(1);
write_cmd(0x06);
Dealy_1ms(1);
write_cmd(0x0c);
Dealy_1ms(1);}
void Stringshow(unsigned char lie,unsigned char hang,unsigned char *p)
{ unsigned char i=0; if(hang==0) write_cmd(0x80|lie); //di 0 hang de di ji lie if(hang==1) write_cmd(0xc0|lie); for(i=0;i<strlen(p);i++) { write_data(p[i]); }}

用proteus仿真了一下,你的程序有问题

sbit rs=P1^0;//Êý¾Ý/Ö¸ÁîÑ¡Ôñ¿ØÖÆÏß
sbit rw=P1^1;//¶Áд¿ØÖÆÏß
sbit en=P1^2;//ʹÄÜ¿ØÖÆÏß

bit busy(void)
{
    bit busy_flag = 0;
    rs = 0;
    rw = 1;
    en = 1;
    delay_ms(5);
    busy_flag = (bit)(P0 & 0x80);
    en = 0;
    return busy_flag;
}
 
void lcd_wcom(uchar com) //1602дÃüÁÊý
{
    while(busy());
    rs=0;
    rw=0;
    P0=com;
    delay_ms(5);
    en=1;
    delay_ms(1);
    en=0;
}
    
void lcd_wdat(uchar dat)//1602дÊý¾Ýº¯Êý
{
    while(busy());
    rs=1;
    rw=0;
    P0=dat;
    delay_ms(5);
    en=1;
    delay_ms(1);
    en=0;
}

void lcd_init()//1602³õʼ»¯º¯Êý 
{
    lcd_wcom(0x38);//8λÊý¾Ý£¬Ë«ÁУ¬5*7×ÖÐÎ
    lcd_wcom(0x0c);//¿ªÆôÏÔʾÆÁ£¬¹Ø¹â±ê£¬¹â±ê²»ÉÁ˸
    lcd_wcom(0x06);//ÏÔʾµØÖ·µÝÔö£¬¼´Ð´Ò»¸öÊý¾Ýºó£¬ÏÔʾλÖÃÓÒÒÆÒ»Î»
    lcd_wcom(0x01);//ÇåÆÁ
}

void lcd_showstring(uchar line,uchar pos,char *String)
{
    unsigned char i;
    if(line==1) lcd_wcom(0x80|(pos-1));
    else lcd_wcom(0x80|(pos-1+0x40));
    for(i=0;String[i]!='\0';i++)
    {
        lcd_wdat(String[i]);
    }
}

int LCD_Pow(int X,int Y)
{
    unsigned char i;
    int Result=1;
    for(i=0;i<Y;i++)
    {
        Result*=X;
    }
    return Result;
}

void lcd_shownum(uchar line,uchar pos,uint num,uchar length)//消前几位的0
{
    unsigned char i;
    unsigned char temp;
    unsigned char enshow=0;
    if(line==1) lcd_wcom(0x80|(pos-1));
    else lcd_wcom(0x80|(pos-1+0x40));
    
    for(i=length;i>0;i--)
    {
        //lcd_wdat(num/LCD_Pow(10,i-1)%10+'0');
        temp=num/LCD_Pow(10,i-1)%10;
        if(enshow==0&&i!=1)
        {
            if(temp == 0)
            {
                lcd_wdat(' ');
            }
            else
            {
                enshow=1;
                lcd_wdat(temp+'0');
            }
        }
        else lcd_wdat(temp+'0');
    }
}

void lcd_shownum1(uchar line,uchar pos,uint num,uchar length)//显示0
{
    unsigned char i;
    unsigned char temp;
    if(line==1) lcd_wcom(0x80|(pos-1));
    else lcd_wcom(0x80|(pos-1+0x40));
    
    for(i=length;i>0;i--)
    {
        temp=num/LCD_Pow(10,i-1)%10;
        lcd_wdat(temp+'0');
    }
}

这代码。。。