帮忙看一个单片机流水灯的程序,带if语句

主要想测试一下if语句,刚学if,不知道if的格式是啥,应该对了,但是查表显示,在for循环的第一句P0=table【i】也就是0xfe结束后,delay时,8个端口全部一下子从高电平(不亮)转变为低电平(亮),为什么呢?

#include<reg52.h>
unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
delay()
{
unsigned int i;
for(i=0;i<30000;i++);
}
unsigned char j;
void main(void)
{
j=1;
while(j)
{
unsigned char i;
for(i=0;i<8;i++);
{
P1=table[i];
delay();

if (i==6)
j=0;
else;
j=1;
}
}

P0=table[7];
delay();
}

第1个回答  2013-01-24
你既然要让他循环8次,为什么要循环到第六次的时候退出呢?还有,你的程序思路很乱,P0=table[7]我不明白是什么意思 还有 Keil软件在主函数种就是没有加上while(1)循环,也是会无限循环下去的,和环境有关 你可以试下下面的程序,我没有加上while(1)死循环 你下载到单片机里面去 看看是不是也是死循环了?
--------------------------------------------------------------------------------------------
#include "reg52.h"
unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char i;
void delay()
{
unsigned int i;
for(i=0;i<30000;i++);
}
void main()
{

for(i=0;i<8;i++)
{
P1=table[i];
delay();
}
}追问

我只是想试一试if语句,想每次在i=6的时候中断,然后跳出while循环,在后面执行P1=table【i】的语句

第2个回答  2013-01-24
if (i==6)
j=0;
else; //能编译通过???这里明显多了个分号 。你的意思很明确,把这句和下句去调
j=1;追问

跟这里没关系,能编译通过,把这里都删了,前面的查表还是突然全部变低电平,不知道为啥
把分号删除了,确实少了一个warning,但是仍然不行。
好了!这个问题解决了。但是当i=6的时候,j应该=0,也就是while循环应当结束了,但是仍然不跳出while循环。也就是在子循环里面不停的循环而不跳出

追答

if (i==6)
j=0;
break;

本回答被提问者采纳
第3个回答  2013-01-26

P0=table[7];
delay();

加一句 while(1);
相似回答
大家正在搜