标题: 为什么这单片机程序不能循环啊,八个灯亮了后程序就停了 [打印本页]

作者: w322405    时间: 2017-8-11 23:44
标题: 为什么这单片机程序不能循环啊,八个灯亮了后程序就停了
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void main()
{
uchar a;
uint i;
a=0xff;
while(1)
{ //如果把a=0xff放在这就只有一个灯循环了
for(i=0;i<8;i++)
{
a=a<<1;
P1=a;
delay(300);
for(i=0;i<8;i++)
{
a=_crol_(a,1);
  P1=a;
delay(300);
}

}

  }
   }
void delay(uint xm)
{
uint j,k;
for(j=xm;j>0;j--)
for(k=110;k>0;k--);
}

作者: 宝哥哥    时间: 2017-8-12 00:28
延时程序那里看看。
作者: 宝哥哥    时间: 2017-8-12 00:28
延时的定义你可以改一下。
作者: ZXHREG    时间: 2017-8-12 08:02
都是零了就都亮,循环也是零
作者: HC6800-ES-V2.0    时间: 2017-8-12 08:16
循环没有停,只是你看不到效果而已!
原因是:
你的第一次循环,让灯全部亮了,没有复位,所以,以后的所有循环,你都看不到效果了。
这样改:
循环完后,重新赋值a=0xff
作者: w322405    时间: 2017-8-12 10:05
HC6800-ES-V2.0 发表于 2017-8-12 08:16
循环没有停,只是你看不到效果而已!
原因是:
你的第一次循环,让灯全部亮了,没有复位,所以,以后的所 ...

要是在while(1)下赋值a=0xff就不能进第一个for里的i值只能加一了,该怎么解决
作者: hawklm    时间: 2017-8-12 23:06
用 do{} while()试试?
作者: 驱蚊灯    时间: 2017-8-13 05:56
void main()
{
    whiie(1)
   {

   }
}
作者: 驱蚊灯    时间: 2017-8-13 05:57
主程序加个while(1)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1