#include
#define LCD_DATA P0
sbit LCD_BUSY=LCD_DATA^7;
sbit LCD_RW=P3^3;
sbit LCD_RS=P3^2;
sbit LCD_EN=P3^4;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
unsigned char i=0;
void LCD_check_busy(void) //检测LCD状态
{
while(1)
{
LCD_RS=0;
LCD_RW=1;
LCD_EN=0;
LCD_DATA=0xff;
LCD_EN=1;
if(!LCD_BUSY)break;
LCD_EN=0;
}
}
void LCD_cls(void) //LCD清屏
{
LCD_check_busy();
LCD_EN=0;
LCD_RS=0;
LCD_RW=0;
LCD_DATA=0x01;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_instruction(unsigned char LCD_instruction)//写指令到LCD
{
LCD_check_busy();
LCD_EN=0;
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_data(unsigned char LCD_data)//输出一个字节数据到LCD
{
LCD_check_busy();
LCD_EN=0;
LCD_RS=1;
LCD_RW=0;
LCD_DATA=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
void LCD_initial()
{
LCD_write_instruction(0x38); //两行显示
LCD_write_instruction(0x0C); //显示开
LCD_write_instruction(0x06); //光标加1
LCD_write_instruction(0x01); //清屏
}
re() interrupt 4 //串行口通信中断
{
if(RI==1)
{
RI=0;
i=SBUF; // 接收数据
if(i==0||i==0x22||i==0x44||i==0x66||i==0x88||i==0xaa||i==0xcc||i==0xdd||i==0xee)
{
SBUF=1; //接收发过来 要修改的初值
}
else //接收正常通信的数据
{
LCD_write_instruction(0x80+i);
LCD_write_data('0'+i);
if(i==11)LCD_initial();
}
}
else if(TI==1)
{
TI=0;
TH1=i;TL1=i; //发送确认信号后 修改初值
}
}
void main()
{
TMOD=0x20;
TH1=0x00;TL1=0x00; //置初值
TR1=1;EA=1;ES=1; //使T1开始工作;开总中断、串行中断
SCON=0x50; //使T1工作在工作方式1
…………限于本文篇幅 余下代码请从51黑下载附件…………