那位大神帮忙看下问题出在那P1^0根P1^3延时时间太长了
#include<reg52.h>#define uchar unsigned char
#define uint unsigned int
//以下d1到d8代表8组继电器
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^6;
sbit d8=P1^7;
//HW为红外开关
sbit HW=P2^0;
unsigned int num=0;
int en=0;
int cnt=0;
void delays(int s);
void test()
{
delays(1);
d1=0;
delays(1);
d2=0;
delays(1);
d3=0;
delays(1);
d4=0;
delays(1);
d5=0;
delays(1);
d6=0;
delays(1);
d7=0;
delays(1);
d8=0;
delays(1);
}
void stop1()
{
d1=0;
}
void run1()
{
d1=1;
}
void zhen1()
{
d2=0;
d3=0;
}
void fan1()
{
d2=1;
d3=1;
}
void stop2()
{
d4=1;
}
void run2()
{
d4=0;
}
void zhen2()
{
d5=0;
d6=0;
}
void fan2()
{
d5=1;
d6=1;
}
void main()
{
TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
TH0=(65536-45872)/256;//装初值
TL0=(65536-45872)%256;
EA=1;
ET0=1; //开定时器0中断
TR0=0; //
while(1)
{
/*
//P1=0XFF;
//delays(1);
//P1=0X00;
// delays(1);
*/
//test(); //自检
//if(HW==0)
//delays(1);
//if(HW==0)
{
stop1();
zhen1();
run1();
delays(7);
stop1();
delays(15);
stop2();
zhen2();
run2();
delays(4);
delays(1);
stop2();
fan2();
run2();
delays(5);
delays(1);
stop1();
fan1();
run1();
delays(5);
stop1();
delays(1);
//while(HW==1);
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;//装初值
TL0=(65536-45872)%256;
num++;
if(num==20) //如果到了20次,说明1秒时间到
{
num=0;
if(en)
{
cnt++;
}
else
{
cnt=0;
}
}
}
//基于TIMER 高精度延时函数 最小单位是秒
void delays(int s)
{
TR0=0;
cnt=0;
en=1;
TH0=(65536-45872)/256;//装初值
TL0=(65536-45872)%256;
num=0;
TR0=1;
while(cnt<s);
en=0;
}