
串口通讯控制led灯的亮灭,看一下这个能不能实现,错误请指出来,不胜感激!
#include<reg52.h>#defineuintsignedint#defineucharunsignedchar//voiddelay(uintt)//{//f...
#include<reg52.h>
#define uint signed int
#define uchar unsigned char
//void delay(uint t)
//{
//for(;t!=0;t--);
//}
void main()
{
unsigned char sum[3][10],temp[3][10]={"led1 is on","led2 is on","led3 is on"};
// unsigned char *p[]=temp;
unsigned int i,x;
TMOD=0X20; // 设置波特率
TH1=0XFD;
TH0=0XFD;
PCON=0X00;
SCON=0X50; //串口工作方式
TR1=1;
while(1)
{
for(i=0;i<3;i++)
{
for(x=0;x<10;x++)
{
while(!RI); //是否接受到数据,当接受到数据后RI由硬件置1.
sum[i][x]=SBUF;
SBUF=sum[i][x];
RI=0;
}
if(temp[0][10]==sum[i][x])
{
P0=0XFe;
}
else
if(temp[1][10]==sum[i][x])
{
P0=0XFd;
}
else
if(temp[1][10]==sum[i][x])
{
P0=0XFb;
}
else P1=0XFF;
}
}
} 展开
#define uint signed int
#define uchar unsigned char
//void delay(uint t)
//{
//for(;t!=0;t--);
//}
void main()
{
unsigned char sum[3][10],temp[3][10]={"led1 is on","led2 is on","led3 is on"};
// unsigned char *p[]=temp;
unsigned int i,x;
TMOD=0X20; // 设置波特率
TH1=0XFD;
TH0=0XFD;
PCON=0X00;
SCON=0X50; //串口工作方式
TR1=1;
while(1)
{
for(i=0;i<3;i++)
{
for(x=0;x<10;x++)
{
while(!RI); //是否接受到数据,当接受到数据后RI由硬件置1.
sum[i][x]=SBUF;
SBUF=sum[i][x];
RI=0;
}
if(temp[0][10]==sum[i][x])
{
P0=0XFe;
}
else
if(temp[1][10]==sum[i][x])
{
P0=0XFd;
}
else
if(temp[1][10]==sum[i][x])
{
P0=0XFb;
}
else P1=0XFF;
}
}
} 展开
1个回答
展开全部
从编译上讲
……
for(x=0;x<10;x++)//这里改成for(x=0;x<9;x++)
……
if(temp[0][10]==sum[i][x])//这里改成if(temp[0][9]==sum[i][x])
{P0=0XFe;}
else
if(temp[1][10]==sum[i][x])])//这里改成if(temp[1][9]==sum[i][x])
{P0=0XFd;}
else
if(temp[1][10]==sum[i][x])])//这里改成if(temp[2][9]==sum[i][x])
{P0=0XFb;}
不过从功能上讲,循环语句那里还是完全瞎了。因为你只判断了串口的第10个字节。只要收到的第十个字节是“n”就点亮。
应该逐个字节判断才对。
不过这也仅是暂时实现功能而已。串口要是发送一个字长不为10的数据,这程序照样也就失去功能了。当然如果这也算是功能之一的话就可以。
……
for(x=0;x<10;x++)//这里改成for(x=0;x<9;x++)
……
if(temp[0][10]==sum[i][x])//这里改成if(temp[0][9]==sum[i][x])
{P0=0XFe;}
else
if(temp[1][10]==sum[i][x])])//这里改成if(temp[1][9]==sum[i][x])
{P0=0XFd;}
else
if(temp[1][10]==sum[i][x])])//这里改成if(temp[2][9]==sum[i][x])
{P0=0XFb;}
不过从功能上讲,循环语句那里还是完全瞎了。因为你只判断了串口的第10个字节。只要收到的第十个字节是“n”就点亮。
应该逐个字节判断才对。
不过这也仅是暂时实现功能而已。串口要是发送一个字长不为10的数据,这程序照样也就失去功能了。当然如果这也算是功能之一的话就可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询