请朋友给看看这个程序怎么只能执行一组啊??

2019-07-15 23:08发布

朋友请帮忙看看,我这个程序怎么只能执行计时 到40分钟后,输出3秒的低电平就一直这样循环了。而40分钟输出3秒的低电平过后,程序应该又执行计时10分钟又输出3秒低电平后,再开始循环的程序 。   #include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
  sbit pf1=P1^3;
sbit beep1=P1^2;
  sbit key1=P2^1;  
uchar hm,f1,m1,s1;
uchar count;
void dely500(void)
{
unsigned char i;
for(i=250;i>0;i--)
_nop_();
}

void warn()
{
for(count=200;count>0;count--)
  {
   beep1=~beep1;
   dely500();
  }
  for(count=200;count>0;count--)
  {
   beep1=~beep1;
   dely500();
   dely500();
  }
}
void Key_Resp()
{
  
  if(key1==0)
{
   pf1=0;
  warn();
  }
}
void main()
{
uchar b; TMOD=0x01;
IE=0X82;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
pf1=1;
beep1=1;
while(1)
{
  if(s1==1)
  {
  if(f1==40)
  {
   pf1=0; f1=0; s1=0;
  }
  }
  if(s1==0)
  {
   if(m1==3)
   {
    pf1=1; m1=0; s1=1;
   }
   warn();
  }
  
if(s1==1)
    {
   if(f1==10)
   {
    pf1=0; f1=0; s1=0;
   }
  }
  if(s1==0)
  {
   if(m1==3)
   {
    pf1=1; m1=0; s1=1;
   }
   warn();
  }
  b=pf1;
   Key_Resp();
   pf1=b;
}
}
void zdlk()interrupt 1 //中断:每次进中断hm++,当hm=20时m自加一次,m加到60,f自加一次
{ //hm为毫秒,m为秒,f为分
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
hm++;
if(hm==20)
{
  hm=0; m1++;
  if(m1==60)
{
  m1=0; f1++;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。