51单片机T1计时10S启动T0,T0启动5S启动继电器,再过五秒关了,代码如下,求大神纠错!
//双计时器
#include<reg51.h>
typedef unsignedcharu8;
typedefunsignedintu16;
typedefunsignedlongu32;
unsigned chara[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0xFF};
u8b[4]={0,0,0,0};
staticu16x=0,n=0,i=0;
sbitsmg0=P1^3;//数码管
sbitsmg1=P1^2;
sbitsmg2=P1^1;
sbitsmg3=P1^0;
sbitp=P1^4; //继电器
voidChuZhi()
{
TMOD=0x10;
TH1=0xFC;
TL1=0x67;
TR1=1;
}
/*voidChuZhi2()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
TR0=1;
}
voidzd()
{
EA=1;
ET1=1;
}*/
voidSmgDeng()
{staticu8t=0;
u8f=0,k=3;
for(k=3;k>1;k--)
{
f=f|b[k];
if(0==f)b[k]=11;
}
switch(t)
{
case0:smg0=0;smg1=1;smg2=1;smg3=1;P0=a[b[0]];t++;break;
case1:smg0=1;smg1=0;smg2=1;smg3=1;P0=a[b[1]];t++;break;
case2:smg0=1;smg1=0;smg2=1;smg3=1;P0=a[10];t++;break;
case3:smg0=1;smg1=1;smg2=0;smg3=1;P0=a[b[2]];t++;break;
case4:smg0=1;smg1=1;smg2=1;smg3=0;P0=a[b[3]];t=0;break;
default:break;
}
}
voidmain()
{
ChuZhi();
while(1)
{
if(1==TF1)
{
TF1=0;
TH1=0xFC;
TL1=0x67;
i++;
SmgDeng();//每0.001s点亮一个数码管
}
if(100==i)
{
i=0;
x++;
b[0]=x%10;
b[1]=x/10%10;
b[2]=x/100%10;
b[3]=x/1000%10;
}
if(100==x)
{ ChuZhi2();}
if(1==TF0)
{
TF0=0;
n++;
TH1=0xFC;
TL1=0x67;
}
if(5000==n)
{
zd();
p=0;
}
}
}
voidzdhs() interrupt3
{
n++;
TH1=0xFC;
TL1=0x67;
if(10000==n)
{
p=1;
TR0=0;
}
}
//双计时器
#include<reg51.h>
typedef unsignedcharu8;
typedefunsignedintu16;
typedefunsignedlongu32;
unsigned chara[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0xFF};
u8b[4]={0,0,0,0};
staticu16x=0,n=0,i=0;
sbitsmg0=P1^3;//数码管
sbitsmg1=P1^2;
sbitsmg2=P1^1;
sbitsmg3=P1^0;
sbitp=P1^4; //继电器
voidChuZhi()
{
TMOD=0x10;
TH1=0xFC;
TL1=0x67;
TR1=1;
}
/*voidChuZhi2()
{
TMOD=0x01;
TH0=0xFC;
TL0=0x67;
TR0=1;
}
voidzd()
{
EA=1;
ET1=1;
}*/
voidSmgDeng()
{staticu8t=0;
u8f=0,k=3;
for(k=3;k>1;k--)
{
f=f|b[k];
if(0==f)b[k]=11;
}
switch(t)
{
case0:smg0=0;smg1=1;smg2=1;smg3=1;P0=a[b[0]];t++;break;
case1:smg0=1;smg1=0;smg2=1;smg3=1;P0=a[b[1]];t++;break;
case2:smg0=1;smg1=0;smg2=1;smg3=1;P0=a[10];t++;break;
case3:smg0=1;smg1=1;smg2=0;smg3=1;P0=a[b[2]];t++;break;
case4:smg0=1;smg1=1;smg2=1;smg3=0;P0=a[b[3]];t=0;break;
default:break;
}
}
voidmain()
{
ChuZhi();
while(1)
{
if(1==TF1)
{
TF1=0;
TH1=0xFC;
TL1=0x67;
i++;
SmgDeng();//每0.001s点亮一个数码管
}
if(100==i)
{
i=0;
x++;
b[0]=x%10;
b[1]=x/10%10;
b[2]=x/100%10;
b[3]=x/1000%10;
}
if(100==x)
{ ChuZhi2();}
if(1==TF0)
{
TF0=0;
n++;
TH1=0xFC;
TL1=0x67;
}
if(5000==n)
{
zd();
p=0;
}
}
}
voidzdhs() interrupt3
{
n++;
TH1=0xFC;
TL1=0x67;
if(10000==n)
{
p=1;
TR0=0;
}
}