找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4566|回复: 0
打印 上一主题 下一主题
收起左侧

通过按键结合外部中断控制流水灯 新手求教

[复制链接]
跳转到指定楼层
楼主
ID:153998 发表于 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;
          }      

      }
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表