我已经有巨长时间没用过51了,今天来一哥们问我他的流水灯程序内嵌在一个程序里实际运行时发生了一个问题,就是流水闪烁一次后,就全部灭掉,不再闪烁。
我将其摘了出来。
#include <reg52.h>
////////////////////////////////////////////////////////
unsigned int d;
void delay(unsigned int cnt) //简单的延时
{
while(--cnt);
}
///////////////////////////////////////////////////////
main()
{
d=0xfe;//给初始化值
while(1)
{
delay(30000);//delay at crystal frequency in 12MHz
P1=d;
d<<=1;//左移一位
d|=0x01;//最后一位补1
if(d==0xff)//检测是否移到最左端?
{
d=0xfe;
}
}
}
首先我发现他变量d的定义不正确,应定义为unsigned char 型,运行一下,还是不行,研究一会居然被这么简单一个程序搞不清哪出问题,总是运行一遍后全部灯灭掉,我在If语句中加了一个Delay(30000);的语句后,居然神奇般的运行流水灯了,我一下搞不懂了,这个延时加不加为什么差距这么大呢?
[ 本帖最后由 lzy63912 于 2010-9-17 16:57 编辑 ]