打印
[STC单片机]

执行外部中断后怎么不正常返回,执行后蜂鸣器立即就响...

[复制链接]
1360|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xichandoujigu|  楼主 | 2018-1-5 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xichandoujigu 于 2018-1-5 14:25 编辑

外部3.2接了一个按键,测试外部中断用,如果不按按键,数码管显示到5s的时候蜂鸣器就响,能正常运行,在执行外部中断的时候赋值数码管为1秒,按道理执行按键后应该返回主程序继续按照1,2,3,4,5的顺序运行后蜂鸣器响,但实际是一按键蜂鸣器就立即响,为什么呢?                               #include <REG51.H>#define uchar unsigned char  
#define uint  unsigned int  
uchar Count;  
unsigned  int fen_gao;        //分十位
unsigned  int fen_di;        //分个位
unsigned  int miao_gao; //秒十位
unsigned  int miao_di;        // 秒个位
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit P37=P3^3;
sbit P36=P3^4;
sbit P35=P3^5;
sbit P34=P3^7;
sbit beep=P3^0;
char zhongduan_cnt;

  //10ms延时子程序(12MHZ)
   void delay_ms(void)
      {  
              unsigned char i,j,k;
              for(i=5;i>0;i--)        
                for(j=4;j>0;j--)
                  for(k=248;k>0;k--);
        }

void init()
    {   
          TMOD=0x01; //定时器初始化  选择timer0做16位定时器  
           TH0=(65536-50000)/256;  
           TL0=(65536-50000)%256;     
            EA=1;    //开放中断
            ET0=1;  //开放timer0中断  
            TR0=1;  //启动timer0  
            EX0=1;// 按键外部中断用
             IT0=1; // 按键外部中断用
    }

void display(unsigned int fen_gao,fen_di,miao_gao,miao_di)
    {
          P1 = 0X00;
           P37=0;  
           P1=Tab[fen_gao];
           delay_ms() ;
           P37=1;

           P1 = 0X00;
           P36=0;  
           P1=Tab[fen_di];
           delay_ms() ;
           P36=1;

           P1 = 0X00;
           P35=0;  
           P1=Tab[miao_gao];
           delay_ms() ;
           P35=1;

           P1 = 0X00;
           P34=0;  
           P1=Tab[miao_di];
           delay_ms() ;
           P34=1;
    }

void Delay_beep(char x)
     {   char t;   while(x--) for(t=0;t<120;t++);  }   //按周期t发音

void Play(char t)
     {    char i;   for(i=0;i<100;i++)  {   beep=~beep;  Delay_beep(t);  }   beep=0;  }  


void timer0(void) interrupt 1 using 1
    {
           TH0  = (65536-50000)/256;  
          TL0 |= (65536-50000)%256;   
          zhongduan_cnt++;  
    }


void is_key(void) interrupt 0 using 1
   {
      miao_di=1;
      miao_gao=0;
      fen_di=0 ;
      fen_gao==0 ;        //执行完后beep立即开始响了!
}

  /*********主程序********************/
void main()
  {
       beep=0;
       miao_di=0;
       miao_gao=0;
       fen_di=0;
       fen_gao=0;
       zhongduan_cnt=0;

       P35=0;  
       P37=0;
       P34=0;
       P36=0;

       init();

          while(1)
             {
                   if(zhongduan_cnt>19) //如果到了1S
                        {
                            zhongduan_cnt=0; //清零
                            miao_di++; //秒数累加
                         }

        if (miao_di>9)
          {
              miao_gao=miao_gao+1;
              miao_di=0;
           }

       if (miao_gao>5)
          {
             fen_di=fen_di+1;
             miao_gao=0;
            }

        if (fen_di>9)
          {
             fen_gao=fen_gao+1;
             fen_di=0;
           }

        display(fen_gao,fen_di,miao_gao,miao_di);

            if(miao_di==5)         //5秒开始响
             if(miao_gao==0)
              if(fen_di==0)
               if (fen_gao==0)
                    {
                       while(1)
                        {  Play(1); }
                     }

                  }
      }



相关帖子

沙发
caijie001| | 2018-1-5 14:11 | 只看该作者
while(1)
{

        if(zhongduan_cnt>19) //如果到了1S
            {
                zhongduan_cnt=0; //清零
                 miao_di++; //秒数累加
            }

if (miao_di>9)
{
    miao_gao=miao_gao+1;
    miao_di=0;}

if (miao_gao>5)
{
   fen_di=fen_di+1;
   miao_gao=0;
}

if (fen_di>9)
{
  fen_gao=fen_gao+1;
fen_di=0;}

display(fen_gao,fen_di,miao_gao,miao_di);

if         (miao_di==5)         //5秒开始响
  if         (miao_gao==0)
   if         (fen_di==0)
    if         (fen_gao==0)
        {
        while(1)
        {
                Play(1);  
        }
        }

                }
你这了是、while(1)

{
xxxxxxxxxx
xxxxxxx
xxxx
whlie(1)
{
Play(1);  
}
}
请问怎么跳出循环?

使用特权

评论回复
板凳
xichandoujigu|  楼主 | 2018-1-5 14:28 | 只看该作者
我考虑是到时间蜂鸣器响,时间到,然后关闭电源。

使用特权

评论回复
地板
ningling_21| | 2018-1-5 15:19 | 只看该作者
流程不清晰,逻辑有点乱

使用特权

评论回复
5
zqx1000| | 2018-4-10 21:25 | 只看该作者
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

96

帖子

2

粉丝