求助,c51上位机通过按键给下位机发送数据显示在lcd1602上。下边是程序,现在1602显示不了串口发送的数据。
时间:10-02
整理:3721RD
点击:
跪求知道是什么原因。
#include <reg52.h>
#include"1602h.h"
#define uchar unsigned char
#define uint unsigned int
uchar i=0,dat,q,playflag;
uchar buf[]={" "};
void serial() interrupt 4
{
ES = 0; //关闭串口中断
if(RI==1)
{
RI = 0; //清楚串口接受标志
if(dat!=0) //判断SBUF中是否有数据,如果没有则不进行发送数据
{ playflag=1; //显示标志位
dat=SBUF;
for(i=0;i<3;i++)
{
dat=SBUF;
if(dat>0)
buf[ ]=dat;
}
}
}
ES=1; //允许串口中断
}
void display() //显示串口接收数据
{
if(playflag)
{
write_com(0x80);
write_data(buf[0]);
write_data(buf[1]);
write_data(buf[2]);
playflag=0;
}
}
void main(void)
{
init(); //lcd初始化
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1工作与8位自动重装模式
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
delay_ms(5);
while(1)
{
display(); //显示串口发送的数据
}
}
#include <reg52.h>
#include"1602h.h"
#define uchar unsigned char
#define uint unsigned int
uchar i=0,dat,q,playflag;
uchar buf[]={" "};
void serial() interrupt 4
{
ES = 0; //关闭串口中断
if(RI==1)
{
RI = 0; //清楚串口接受标志
if(dat!=0) //判断SBUF中是否有数据,如果没有则不进行发送数据
{ playflag=1; //显示标志位
dat=SBUF;
for(i=0;i<3;i++)
{
dat=SBUF;
if(dat>0)
buf[ ]=dat;
}
}
}
ES=1; //允许串口中断
}
void display() //显示串口接收数据
{
if(playflag)
{
write_com(0x80);
write_data(buf[0]);
write_data(buf[1]);
write_data(buf[2]);
playflag=0;
}
}
void main(void)
{
init(); //lcd初始化
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1工作与8位自动重装模式
EA=1;
ES = 1; //允许串口中断
TL1=0xfd;
TH1=0xfd; //波特率9600
TR1=1;
delay_ms(5);
while(1)
{
display(); //显示串口发送的数据
}
}
if(dat!=0) //判断SBUF中是否有数据,如果没有则不进行发送数据,那dat什么时候清零