标题: 通过按键结合外部中断控制流水灯 新手求教 [打印本页]

作者: yhw123    时间: 2016-12-11 21:49
标题: 通过按键结合外部中断控制流水灯 新手求教
通过按键结合外部中断控制流水灯,按一下暂停,再按一下开始 连按两次换动画效果,   连按两次的效果一直无法实现。  部分代码如下



#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;
          }      

      }
   }
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1