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

#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={0xfe... #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++;
}
展开
 我来答
lycdl
高粉答主

2013-06-09 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4905万
展开全部
你这程序写得太复杂了吧,延时位置不对,主循环程序改成下面这样才行。
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;
c3344c
2013-06-09 · TA获得超过2418个赞
知道小有建树答主
回答量:966
采纳率:57%
帮助的人:681万
展开全部
首先纠正你对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)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
492924696lin
2013-06-09 · TA获得超过220个赞
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:182万
展开全部
流水灯试验不用那么麻烦的吧,直接用移位操作就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式