#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD_DB P0
uchar dat0[]={" gaoyankai "};
uchar dat1[]={" 20132815859 "};
uchar table[6];
uchar sedtab[11]={"20132815859"};
uchar flag; //显示标志位
uint num;
sbit LCD_RS=P2^0; //端口可根据需要更改,以下同
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
//********US延时函数************
void delay_n40us(uint n)
{
uint i;
uchar j;
for(i=n;i>0;i--)
for(j=0;j<2;j++);
}
//********MS延时函数************
void delay(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
//********写指令函数************
void LCD_write_command(uchar com)
{
LCD_DB=com;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us(1);
}
//********写数据函数*************
void LCD_write_data(uchar dat)
{
LCD_DB=dat;
LCD_RS=1;//数据
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;
delay_n40us(2);
}
//*******显示一个字符函数*********
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
uchar address;
if(y==1)
address=0x80|x;
else
address=0xc0|x;
LCD_write_command(address);
LCD_write_data(dat);
}
void LCD_init()
{
LCD_write_command(0x38);//设置 8位格式,2行,5x7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
LCD_write_command(0x01);//清除屏幕显示
delay_n40us(100);// 2ms
}
//在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//串口接收中断允许,发送中断禁止
void Uart_Init() //串口初始化函数
{
SCON=0x50; //串口方式1 ,允许接收
TMOD=0x20; //T1工作于方式2
PCON=0x00; //波特率不倍增
TL1=0xfd; //波特率9600
TH1=0xfd; //波特率设置
EA=1; //开总中断
ES=1; //开串口接收中断
TR1 = 1; //定时器开启
}
void PutStr(uchar *pstr,uchar len) //字符发送函数
{
uchar i;
for(i=0;i<len;i++)
{
SBUF=*pstr;
pstr++;
while(TI==0);
TI=0;
}
}
//********主函数************
void main()
{
uchar i,j,k;
Uart_Init(); //串口初始化
while(1)
{
if(flag==0) //液晶不显示
{
}
else
{
LCD_init(); //液晶初始化
for(j=0;j<40;j++)
{
LCD_write_command(0x1c); //设置全屏左移
for(i=0;i<16;i++)
{
LCD_disp_char(i+16,1,dat0[i]); //写入数据
LCD_disp_char(i+16,2,dat1[i]);
}
delay(100); //延时
}
for(k=0;k<6;k++) //清空接收数组
{
table[k]='0';
}
flag=0; //标志位
num=0;
}
}
}
void Com() interrupt 4 //串口接受中断处理函数
{
if(RI==0) return; //如果没有接收中断标志,返回
ES=0; //关闭串口中断
RI=0; //清串行中断标志位
table[num++] = SBUF; //接收缓冲器中的字符
if(table[0]==0xB8 && table[1]==0xDF && table[2]==0xD1 && table[3]==0xE5 && table[4]==0xBF && table[5]==0xAD) //读取初始状态
{
flag=1; //显示
PutStr(sedtab,11); //发送学号
}
else
{
flag=0; //不显示
}
ES=1; //开启串口中断
} |