#include<reg51.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit p3_0=P3^0;//位申明
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar code tab1[]="dear VIP your number is";
uchar code tab2[]="customer your number is";
uchar code tab3[]="is in front of you ";
uchar a[]="123456789";
uchar b[]="123456789";
uchar x1='0';
uchar x2='0';
uchar *p1=&a[0];
uchar *q1=&a[0];
uchar *p2=&b[0];
uchar *q2=&b[0];
uchar num,len1,len2,len3,i=0,j,k=0;
void delay(uint x)//延时子程序
{
while(--x);
}
bit busy()//忙碌检查
{
bit result;
RS=0;
RW=1;
EN=1;
delay(1);
result=(bit)(P0&0x80);
EN=0;
return result;
}
void write_cmd(uchar cmd)//写命令子程序
{
while (busy());
RS=0;
RW=0;
EN=1;
delay(500);
P0=cmd;
delay(500);
EN=0;
}
void write_dat(uchar dat)//写数据子程序
{
while (busy());
RW=0;
RS=1;
EN=1;
delay(500);
P0=dat;
delay(500);
EN=0;
}
void init_lcd()//1602液晶初始化
{
write_cmd(0x38);//显示设置
delay(1);
write_cmd(0x0c);//显示开关
delay(1);
write_cmd(0x06);//屏幕不移动
delay(1);
write_cmd(0x01);//清屏
delay(1);
}
main()
{
for(;;)
{
EA=1;EX0=1;
if(p3_0==0)
{delay (100);
if(p3_0==0)
{
p2++;
x2++;
init_lcd();
len2=sizeof(tab2);
write_cmd(0x80+0x10);//将第一行字符写入缓冲区
for(num=0;num<len2-1;num++)
{
write_dat(tab2[num]);
delay(100);
}
write_cmd(0x80+0x60);//将第二行字符写入缓冲区
write_dat(b[k]); k++; delay(100);
for(j=0;j<2;j++) //重复两次
{
for(num=0;num<32;num++)//屏幕整体左移
{
write_cmd(0x1b);
delay(20000);
}
}
}
}
}
}
void int0 (void) interrupt 1
{
*p1=x1;
p1++;
x1++;
init_lcd();
len1=sizeof(tab1);
write_cmd(0x80+0x10);//将第一行字符写入缓冲区
for(num=0;num<len1-1;num++)
{
write_dat(tab1[num]);
delay(100);
}
write_cmd(0x80+0x60);//将第二行字符写入缓冲区
write_dat(a[i]); i++; delay(100);
for(j=0;j<2;j++) //重复两次
{
for(num=0;num<32;num++)//屏幕整体左移
{
write_cmd(0x1b);
delay(20000);
}
}
TR0=0;
}
评论0