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

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++;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
denminshen
1楼-- · 2019-07-16 17:23
 精彩回答 2  元偷偷看……
denminshen
2楼-- · 2019-07-16 17:47
期待高手解决
零下酒酒度
3楼-- · 2019-07-16 21:01
楼主这程序写的看的很纠结,没有注释都不知道有些变量是干嘛用的,比如S1
denminshen
4楼-- · 2019-07-17 02:08
零下酒酒度 发表于 2013-8-13 12:13
楼主这程序写的看的很纠结,没有注释都不知道有些变量是干嘛用的,比如S1 ...

朋友你好,非常感谢你帮忙看这个程序,S和S1这两个变量是用来分别控制执行40分钟后输出几秒报警和10分钟后输出几秒报警信号这两组程序的啊
denminshen
5楼-- · 2019-07-17 04:19
都5天了,没能解决请高手老师帮帮忙吧
hoyuet4712
6楼-- · 2019-07-17 09:02
 精彩回答 2  元偷偷看……

一周热门 更多>