#include<reg52.h>
#include<stdlib.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar xian,flag;
uint time=0;
#define Lcd_data P0
sbit RS = P2^6; //(數據命令)寄存器選擇輸入
sbit RW = P2^5; //液晶讀/寫控制
sbit EN = P2^7; //液晶使能控制
sbit PSB = P3^2; //串/并方式控制
uchar code dis1[]={" 長恨歌 "};
uchar code dis2[]={"在天愿作比翼鳥"};
uchar code dis3[]={"在地愿為連理枝"};
uchar code dis4[]={"自古多情空余恨"};
uchar code dis5[]={"此恨綿綿無絕期"};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//寫指令到LCD
void write_com(uchar com)
{
RS=0;
RW=0;
EN=0;
P0=com;
delay(1);
EN=1;
delay(1);
EN=0;
}
//寫指令到LCD
void write_data(uchar dat)
{
RS=1;
RW=0;
EN=0;
P0=dat;
delay(1);
EN=1;
delay(1);
EN=0;
}
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)X=0x80;
else if(X==1)X=0x90;
else if(X==2)X=0x88;
else if(X==3)X=0x98;
pos=X+Y;
write_com(pos);
}
void display(uchar p[],uchar a)
{
uchar*display1;
display1=p;
lcd_pos(a,0);
while((*display1)!='\0')
{
write_data(*display1);
display1++;
}
}
void init()
{
TMOD=0x02;
EA=1;
ET0=1;
TH0=6;
TL0=6;
TR0=1;
time=0;
xian=0;
}
void lcd_init()
{
PSB=1;//并口方式
write_com(0x30); //設置8位數據
delay(5);
write_com(0x0c);//顯示開,光標關
delay(5);
write_com(0x01); //清除顯示內容
delay(5);
}
main()
{
init();
delay(10);
lcd_init();
while(1)
{
switch(xian)
{
case 0:display(dis1,0); break;
case 1:display(dis2,1); break;
case 2:display(dis3,2); break;
case 3:display(dis4,3); break;
case 4:display(dis5,0); break;goto a;
default:break;
}
}
a:
while(1);
}
void timer0() interrupt 1
{
time++;
if(time==4000)
{
time=0;
xian++;
if(xian==5)xian=0;
}
}
|