单片机,流水灯c语言程序

第一次,要实现从上往下跑,第二次要实现从下往上跑。我的要求:找出那错了。不要给我你写的程序。是不是我的keil和Proteus有问题?(不是不想个分,是只有5分了)。程序... 第一次,要实现从上往下跑,第二次要实现从下往上跑。 我的要求:找出那错了。不要给我你写的程序。
是不是我的keil和Proteus有问题?(不是不想个分,是只有5分了)。
程序:
#include<at89x51.h>
unsigned char k=0;

void flay()
{
int n;
for(n=1;n<500;n++);
}

key()
{
if(P1_0==0)
{
while(P1_0==0);
k++;
if(k==3)
k=0;
}
}

main()
{
int i,j,a;

while(1)
{
key();
if(k==0)
{
i=0x01;
for(j=0;j<8;j++)
{
P2=i;
P1_1=!P1_1;
i=(i<<1);
flay();
}

}
if(k==1)
{ a=0x80;
for(j=0;j<8;j++)
{
P2=a;
flay();
a=(a>>1);
}

}

}
}
编译没错,这是个流水灯程序。你自己用仿真软件试一下就会发现问题所在!
展开
 我来答
menglaomeng
2010-01-24 · TA获得超过727个赞
知道小有建树答主
回答量:680
采纳率:0%
帮助的人:550万
展开全部
P1_0==0时 ,key()是死循环,程序不会往下走的 ,P1_0==1时只会执行
if(k==0)
{
i=0x01;
for(j=0;j<8;j++)
{
P2=i;
P1_1=!P1_1;
i=(i<<1);
flay();
}
l358009928
2010-01-28
知道答主
回答量:23
采纳率:0%
帮助的人:9.3万
展开全部
while(P1_0==0);
k++;
这里当P1_0==0,k就一直自加成“死循环了”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
6Asemir
2010-01-24
知道答主
回答量:9
采纳率:0%
帮助的人:1.5万
展开全部
你是什么问题...程序编译不能通过还是 没反应??...能说具体点么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
霂璇尹凝伪9x
2010-02-02 · TA获得超过195个赞
知道答主
回答量:180
采纳率:0%
帮助的人:99.8万
展开全部
问题出在key();函数中
你在 while(P1_0==0)后面加了封号“;”,这样当程序运行到这里时,是在等待你按键按下去,如果没有按就一直停在此处等待,直到你按下键为止,如果按下就执行后面的语句。
所以造成的问题是:你每跑完一边程序就必须按次键,否则程序就会停下来。

不知道我说的现象对不对?

你可以去掉 while(P1_0==0)这句试试,先不要消抖,反正在proteus中无所谓抖动问题。

建议你以后提问题:要把你的现象也要说出来,这样比较清楚
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式