/*-----------------------------------------------------------------------------
程序功能：1602液晶滚动显示
------------------------------------------------------------------------------*/

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;     //位定义液晶数据命令选择端
sbit wr=P3^6;     //位定义液晶读写选择端
sbit leden=P3^4;  //位定义液晶使能端
sbit dula=P2^6;   //数码管段选
sbit wela=P2^7;   //数码管位选
uint i,j;
uchar num;
uchar code table1[]="I LOVE YL-51 MCU";    //字符串用双引号刮起来，而不是单引号了
uchar code table2[]="WELCOME TO YUNLONGDZ";
void delay(uint x)  //延时
{
	for(i=x;i>0;i--)
	{
	for(j=120;j>0;j--);
	}
}

void write_com(uchar com)   //写命令函数
{
	rs=0;
	wr=0;
	leden=0;
	P0=com;
	leden=1;
	delay(5);
	leden=0;		
}

void write_data(uchar dat)   //写数据函数
{
	rs=1;
	wr=0;
	leden=0;
	P0=dat;
	leden=1;
	delay(5);
	leden=0;		
}

void init()      //1602液晶初始化设置函数
{
	write_com(0X38);
	write_com(0X08);
	write_com(0X01);
	write_com(0X06);
	write_com(0X0F);	
}

void main()
{
	P0=0;    //关闭数码管显示
	dula=0;
	wela=0;
	init();
	write_com(0X80+0X10);     //数据指针设置，在第一行的屏外第一格
	for(num=0;num<16;num++)   //写入I LOVE YL-51 MCU
	{
		write_data(table1[num]);
		delay(10);
	}
	write_com(0X80+0X50);    //数据指针设置，在第二行的屏外第一格
	for(num=0;num<20;num++)  //写入 WELCOME TO YUNLONGDZ
	{
		write_data(table2[num]);
		delay(10);
	}
	while(1)
	{
      	 	write_com(0x18);//整屏向左移动，若改为0x1C 是右移动
       		delay(500);
	}
}

