单片机流水灯程序,烧到单片机里,8个灯全亮,是怎么回事,下面使程序,求指教。谢谢!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint i;
uchar num;
void main()
{
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(num==100);
{
num=0;
if(i!=8)
{
P2=table[i];
i++;
}
else i=0;
}
}
}
void time0() interrupt 1
{
TH0=0xd8;
TL0=0xf0;
num++;
}

你这程序写得太复杂了吧,延时位置不对,主循环程序改成下面这样才行。
while(1)
{
if(i!=8)
{
P2=table[i];
i++;
while(num<100);num=0;
}
else i=0;
}
还有:c3344c指出的:
ET1=1;//这一行应改成ET0 = 1;
TR1=1; //这一行应改成TR0 = 1;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-09
首先纠正你对T0初始化的错误:
void main()
{
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
EA=1;
ET1=1;//这一行应改成ET0 = 1;
TR1=1; //这一行应改成TR0 = 1;

理由:你试图使用定时器T0的中断改变num的值,但你在初始化T0定时器时,启动的却是T1(TR1 = 1),且使能的是T1的中断(ET1 = 1)。
第2个回答  2013-06-09
流水灯试验不用那么麻烦的吧,直接用移位操作就行了