串口通讯控制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;
}
}
}
展开
 我来答
zhangxpei
2012-05-31 · TA获得超过844个赞
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:296万
展开全部
从编译上讲
……
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的数据,这程序照样也就失去功能了。当然如果这也算是功能之一的话就可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式