sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
用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');
}
}
这代码。。。