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

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 04:28
请高手朋友帮忙指点
_.右眼谁
2楼-- · 2019-07-16 04:47
 精彩回答 2  元偷偷看……
denminshen
3楼-- · 2019-07-16 08:05
谢谢朋友的回复,我为了方便仿真测试,把10分钟改成2分钟,40分钟改成了3分钟,编译后仿真还是只能执行第一组的计时2分钟还报警了60秒,在报警声停止后2分钟又报警了60秒一直这样循环了,我想达到先上电计时10分钟后报警3秒,然后又计时40分钟后又报警3秒这样一直循环的目的,朋友再帮忙看看吧,谢谢啦
_.右眼谁
4楼-- · 2019-07-16 08:29
楼主仿真图也发我一份吧,大家一起研究研究如何?
denminshen
5楼-- · 2019-07-16 11:11
_.右眼谁 发表于 2013-8-10 18:45
楼主仿真图也发我一份吧,大家一起研究研究如何?

这是朋友回复的,我为了测试仿真改了的2分钟3秒,3分钟3秒的HEX文件和仿真图,朋友帮忙试试看看吧! 论坛回复HEX文件.rar (386 Bytes, 下载次数: 1) 论坛回复试试仿真图.rar (12.39 KB, 下载次数: 4)
denminshen
6楼-- · 2019-07-16 15:58
这是仿真图 仿真切图.jpg

一周热门 更多>