用中断写的花样流水灯无法进入第二个模式,求高手
本帖最后由 孤独的凯 于 2013-1-6 20:07 编辑#include<AT89X52.h>
#define led P2
unsigned int i,j,t,z;
int code a={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int code b={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int code c={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
int code d={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
void first() //led灯从左向右依次循环并返回
{
if(t<8) //t表示执行次数
{ //j表示数组a的j-1个元素
led = a;
j++;
z++;
i = 0; //清除标志位
t++; }
else
{
if(t >= 8 && t <=15)
{
led = b;
j++;
z++;
i = 0;
t++; }
else
{
i=0; //清除标志位
t=0; //执行次数清零
j=0;
}
}
}
void second()
{
if(t<8)
{
led = c;
j++;
z++;
i = 0;
t++;
}
else
{
if(t >= 8 && t < 16)
{
led = d;
j++;
z++;
i=0;
t++; }
else
{
j=0;
i=0;
t=0; //执行次数清零
z=0;
}
}
}
void main()
{
TMOD = 0x01;
TH0 = 0xD8;
TL0 = 0xf0;
EA = 1;
ET0 = 1;
i = 0;
j = 0;
t = 0; //执行次数清零
z = 0;
TR0 = 1;
led = 0xff;
while(1);
}
void et0interrupt() interrupt 1
{
TH0 = 0xD8;
TL0 = 0xf0;
i++;
if(i == 50)
{
if(z / 16 == 0)
{
first();
}
else
{
if(z /16 =1)
{
second();
}
// else
// third();
}
}
}
中断里/ 改成%。 就是要获得除式的商 if(z /16 ==1) {
second();
} if(z /16 =1)
这个是什么????? sco518 发表于 2013-1-6 20:20 static/image/common/back.gif
中断里/ 改成%。
{:victory:} 正解 yklstudent 发表于 2013-1-6 22:17
if(z /16 =1)
这个是什么?????
8个流水灯一次循环16次,第二个16次从17-31。让单片机进入下一个模式 貌似是first()里的第二个else根本就没进去。但不知道为什么 孤独的凯 发表于 2013-1-6 23:04 static/image/common/back.gif
8个流水灯一次循环16次,第二个16次从17-31。让单片机进入下一个模式
首先判断条件是== 你那个事赋值语句 当然不可能条件成立了 还要else语句是不会得到执行的 first和second内的一样
你只要分析下逻辑就知道为什么了
页:
[1]