就是在信号发生器,在死循环里,是应该怎样设置定时中断或者其他方法,能够使之在1分钟后停止输出?

就是在信号发生器,在死循环里,是应该怎样设置定时中断或者其他方法,能够使之在1分钟后停止输出?

void main()
{
    init();
    LCD_init();
    LCD_clear();
    LCD_write_str(0,0,"Delay:"); 
    LCD_write_str(8,0,"s,"); 
    LCD_write_str(11,0,"kHz"); 
    LCD_write_str(0,1,"Select:");
    LCD_write_str(9,1,"s,"); 
    LCD_write_str(12,1,"kHz");
    dula=0;
    wela=0;
    dacs=0;
    dawr=0;
    while(1)
    { 
      key_scan();
      if(conf==1)
      {       
        TR0=1;
        TR1=1;
        conf=0;
      } 
    }
}


void T0_time()interrupt 1
{
      if(delaypl==3)//T0中断中开始,更改频率,设置初值
      {
           TH0=(65536-333)/256;
           TL0=(65536-333)%256;
      }
      if(delaypl==5)
      {
          TH0=(65536-200)/256;
          TL0=(65536-200)%256;
      }
      if(delaypl==7)
      {
          TH0=(65536-143)/256;
          TL0=(65536-143)%256;
      }//T0中断中结束
        while(delaybx==1)//选择波形
        {
            P1=sin[k];
            k++;
            if(k==64)
            k=0;
        }
        while(delaybx==2)
        {
            P1=rectangle[k];
            k++;
            if(k==64)
            k=0;
        }
        while(delaybx==3)
        {
            P1=sawtooth[k];
            k++;
            if(k==64)
            k=0;
        }
      if(delaytime==0)
      {
        P1=0xff;
        TR1=0;
        TR0=0;
      }
}

void T1_time()interrupt 3
{
  TH1=(65536-50000)/256;
  TL1=(65536-50000)%256;
  num2++;
  if(num2==20)//中断T1中开始部分,满20为1s
  {
    num2=0;
    delaytime--;
    delayshi=delaytime/10+0x30;
    delayge=delaytime%10+0x30;
    LCD_write_char(6,0,delayshi);
    LCD_write_char(7,0,delayge);
  }//中断T1中结束部分
}

新建一个输出停止标志output_stop_flag,在信号发生器中每次输出都要判断一下output_stop_flag的状态,若状态符合才输出信号。而在中断中,可以修改此标志位。即进中断就修改标志位。

delaybx是在何处修改其值的?

这个函数里有写

        switch(xbx)

            {
                case 1 :
                selectbx=1;
                break;
                case 2 :
                selectbx=2;
                break;
                case 3 :
                selectbx=3;
                break;  
                default :
                selectbx=0;
                break;
            }
        while(!key3);
      }
      if(key4==0)
      {
          delayms(10);
          conf=1;
          if(conf==1)
          {
              delaytime=selecttime;
              delaypl=selectpl;
              delaybx=selectbx;
              delayshi=selectshi;
              delayge=selectge;
              LCD_write_char(6,0,delayshi);//运行select后的示数
              LCD_write_char(7,0,delayge);
              LCD_write_char(10,0,delaypl+0x30);
          }
          while(!key4);
      }