#include
#define uchar unsigned char
#define uint unsigned int
//sbit BI=P3^4; //74Ls49的消隐引脚
sbit DXR=P1^0; //东西红
sbit DXG=P1^1; //东西绿
sbit DXY=P1^2; //东西黄
sbit NBR=P1^3; //南北红
sbit NBG=P1^4; //南北绿
sbit NBY=P1^5; //南北黄
uchar code table0[30]={0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,
0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
void delay(uchar x)
{
uchar t;
while(x--)
for(t=0;t<10;t++);
}
uint count;
char i,j,k=1;
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
P3=0xff;
while(1)
{
// BI=0;
// BI=1;
switch(k)
{
case 1: //南北方向黄灯灭,红灯亮(29-06)s,东西方向红灯灭,绿灯亮24S
P0=table0[i];
P2=table0[j+6];
NBY=1;DXR=1;NBR=0;DXG=0;
if(i==24)
{
i=0;
j=0;
k++;
// delay(0);
}
break;
case 2://南北方向红灯依然亮(05-00)s,东西方向绿灯灭,黄灯亮6s
P0=table0[i+24];
P2=table0[j+24];
DXG=1;DXY=0;
if(i==6)
{ i=0;
j=0;
k++;
}
break;
case 3: //南北方向红灯灭,绿灯亮24s,东西方向黄灯灭,红灯(30-06)s
P0=table0[i+6];
P2=table0[j];
NBR=1;DXY=1;NBG=0;DXR=0;
if(i==24)
{
i=0;
j=0;
k++;
}
break;
case 4://南北方向绿灯灭,黄灯亮6s,东西方向红灯依然亮6s
P0=table0[i+24];
P2=table0[j+24];
NBG=1;NBY=0;
if(i==6)
{
i=0;
j=0;
k=1;
}
break;
}
}
}
void timer0() interrupt 1
{
TH0=0x3c; //50ms
TL0=0xb0;
count++;
if(count==20) //20次中断为1s
{
count=0;
i++;
j++;
}
}
具体时间参数你可以自己在修改。 我的是红灯30S 绿灯24 黄灯 6S
MOV P1,#0;置灯全暗
JNB P1.0,$;P1.0=0;时则等待通电
STA:SETB P1.1;点亮红灯
LCALL DEL;延时30S
CLR P1.1;灭红灯
STEB P1.3;亮黄灯
LCALL DEL;延时5秒
SETB P1.2;亮绿灯
LCALL DEL;延时30S
CLR P1.2;灭绿灯
STEB P1.3;亮黄灯
LCALL DEL;延时5秒
SJMP STA;转STA处
DEL:MOV R7,#240;
DEL1:MOV R6,#250;
DEL2:MOV R5,#250;
DJNZ R5,$;
DJNZ R6,DEL2;
DJNZ R7,DEL1;
RET;
多年单片机工作经验,专业代做毕业设计,课程设计,项目设计!