1602仿真为何这样显示,求解答

程序如下,求大神解答
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LOVE YOU!";
uchar code table1[]="XXX.TNMCU.COM";
sbit lcden=P3^4; //液晶使能端
sbit lcdrs=P3^5; //液晶数据命令选择端
uchar num;
void delay(uint m)
{
uint x,y;
for(x=m;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0; //选择写命令模式
P0=com; //将写的命令送到数据总线
delay(5);
lcden=1; //使能端给高脉冲,因为初始化函数中已经将lcden置为0
delay(5);
lcden=0; //将使能端置0以完成高脉冲
}
void write_date(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口
write_com(0x0f); //设置开显示,不显示光标
write_com(0x06); //写一个字符后地址指针加一
write_com(0x01); //显示清0,数据指针清0
}
void main()
{
init();
write_com(0x80);
for(num=0;num<11;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<13;num++)
{
write_date(table1[num]);
delay(5);
}
while(1);
}
