通过按键结合外部中断控制流水灯,按一下暂停,再按一下开始 连按两次换动画效果, 连按两次的效果一直无法实现。 部分代码如下
#include<reg52.h>
#include<intrins.h>
sbit s=P3^2;
unsigned char tmp,a,b,flag=0,p,time;
unsigned int i;
void delay(unsigned int z)
{
unsigned int x,y;
for(y=114;y>0;y--)
for(x=z;x--;x>0);
}
void led1()
{
tmp=0xe7;
for(i=0;i<3;i++)
{
P1=tmp;
delay(100);
a=_crol_((tmp|0x0f),1);
b=_cror_((tmp|0xf0),1);
tmp=a&b;
while(p)
{
if(flag)
return;
}
}
for(i=0;i<3;i++)
{
P1=tmp;
delay(100);
a=_cror_((tmp|0x0f),1);
b=_crol_((tmp|0xf0),1);
tmp=a&b;
while(p)
{
if(flag)
return;
}
}
}
void led2()
{
tmp=0xef;
P1=tmp;
tmp=_cror_(tmp,1);
delay(100);
}
void init()
{
TMOD=0X11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
EX0=1;
IT0=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(flag)
led2();
led1();
}
}
void T0_time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(time1)
{
time1--;
}
}
void exint()interrupt 0
{
if(s==0)
{
delay(5);
if(s==0)
{
while(!s);
if(time1==0)
{
flag=0;
p=~p;
time1=5;
}
else
{
flag=1;
}
}
}
}
|