#include<reg52.h> 这是一个十字路口的交通信号灯 此程序运行后功能是正常的 但是D3 D8时延时的时间很短 是用T1定时器延时的 不知到问题出在哪里请高手回答谢谢后面备注哪里出问题本人是初学者
#define uint unsigned int
void delay(uint ms)
{
uint x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
sbit D8=P0^0;sbit D7=P0^1;sbit D6=P0^2;sbit D5=P0^3;
sbit D4=P0^4;sbit D3=P0^5; //D3-D5分别为红、黄、绿灯
//D6-D8分别为红、黄、绿灯
uint a,b,c,d,e;
void InitTimer0(void) //T0中断函数
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void InitTimer1(void) //T1中断函数(TR1在主函数里设置)
{TMOD = 0x10;
TH1 = 0x4C;
TL1 = 0x00;
EA = 1;
ET1 = 1;
}
void main() //主函数
{
InitTimer1(); //初始化定时器启动并启动定时器1
InitTimer0();
while(1)
{
D5=D6=~D3; //点亮D5(绿灯) 和D6(红灯)等待中断程序的到来
if(a==600)
{
for(b=5;b>0;b--) //延时一段时间后D5(绿灯) D6(红灯)开始闪烁后在熄灭并关闭定时器0
{ TR0=0;
D5=D6=~D6;
delay(1000);
a=0; //把变量a清零重新计数
c++; //用变量c传递下去
}
}
if(c==5) //变量c满足if条件
{
D4=D7=0;
delay(3000); //黄灯D4 D7亮几秒后熄灭同时点亮 D3(红灯) D8(绿灯)
D3=D8=0;
D4=D7=~D4;
c=0;TR1=1; //把c清零 并开启定时器1等待中断程序到来
}
if(d==500) //问题就出在这里定时器1 d一下子就到达500的值
{
for(b=5;b>0;b--)
{
D3=D8=~D3;
delay(1000);
d=0;TR1=0;
e++;
}
}
if(e==5)
{
D4=D7=0;
delay(3000);
D4=D7=~D4;
e=0;TR0=1;
}
}}
void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x4C;
TL1 = 0x00;
d++;
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
a++;
}
|