单片机,流水灯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);
}
}
}
}
编译没错,这是个流水灯程序。你自己用仿真软件试一下就会发现问题所在! 展开
是不是我的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);
}
}
}
}
编译没错,这是个流水灯程序。你自己用仿真软件试一下就会发现问题所在! 展开
展开全部
while(P1_0==0);
k++;
这里当P1_0==0,k就一直自加成“死循环了”
k++;
这里当P1_0==0,k就一直自加成“死循环了”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是什么问题...程序编译不能通过还是 没反应??...能说具体点么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题出在key();函数中
你在 while(P1_0==0)后面加了封号“;”,这样当程序运行到这里时,是在等待你按键按下去,如果没有按就一直停在此处等待,直到你按下键为止,如果按下就执行后面的语句。
所以造成的问题是:你每跑完一边程序就必须按次键,否则程序就会停下来。
不知道我说的现象对不对?
你可以去掉 while(P1_0==0)这句试试,先不要消抖,反正在proteus中无所谓抖动问题。
建议你以后提问题:要把你的现象也要说出来,这样比较清楚
你在 while(P1_0==0)后面加了封号“;”,这样当程序运行到这里时,是在等待你按键按下去,如果没有按就一直停在此处等待,直到你按下键为止,如果按下就执行后面的语句。
所以造成的问题是:你每跑完一边程序就必须按次键,否则程序就会停下来。
不知道我说的现象对不对?
你可以去掉 while(P1_0==0)这句试试,先不要消抖,反正在proteus中无所谓抖动问题。
建议你以后提问题:要把你的现象也要说出来,这样比较清楚
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询