朋友请帮忙看看,我这个程序怎么只能执行计时 到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++;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>