RED_NS EQU P10
GREEN_NS EQU P11
YELLOW_NS EQU P12
RED_EW EQU P13
GREEN_EW EQU P14
YELLOW_EW EQU P15
FLASH_NS BIT 00H
FLASH_EW BIT 01H
TIME EQU 30H
TICK EQU 31H
;---------------------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TICK,#20
MOV P1,#0FFH ;全部关
CLR FLASH_NS
CLR FLASH_EW
SETB TR0
SETB ET0
LOOP:
MOV TIME,#15
CLR RED_EW ;东西红
CLR GREEN_NS ;南北绿
SETB GREEN_EW
SETB YELLOW_EW
SETB RED_NS
SETB YELLOW_NS
LOOP1:
MOV A,TIME
JNZ LOOP1
MOV TIME,#5
SETB FLASH_NS ;南北黄灯闪烁
LOOP2:
MOV A,TIME
JNZ LOOP2
CLR FLASH_NS
MOV TIME,#15
CLR RED_NS ;南北红
CLR GREEN_EW ;东西绿
SETB GREEN_NS
SETB YELLOW_NS
SETB RED_EW
SETB YELLOW_EW
LOOP3:
MOV A,TIME
JNZ LOOP3
MOV TIME,#5
SETB FLASH_EW ;东西黄灯闪烁
LOOP4:
MOV A,TIME
JNZ LOOP4
CLR FLASH_EW
SJMP LOOP
;------------------------------
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
JNB FLASH_NS,T0ISR1
CPL YELLOW_NS
SJMP T0ISR2
T0ISR1:
JNB FLASH_EW,T0ISR2
CPL YELLOW_EW
T0ISR2:
DEC TICK
MOV A,TICK
JNZ T0ISRE ;判1s到否
MOV TICK,#20
DEC TIME
T0ISRE:
POP ACC
RETI
;---------------------------------
END
#include <reg51h>
#include <stdioh>
#define uchar unsigned char
#define uint unsigned int
uchar h;
uint r=0;
uint s;
uchar code dis[]={ 0Xc0,0Xf9, 0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,};
/0//1//2//3//4//5//6//7//8//9//NULL/
void delay(uint c)
{
uint i,j;
for(i=0;i<c;i++)
for(j=0;j<100;j++);
}
void t0(void) interrupt 0 using 1 //interrupt 1
{
delay(2);
if(INT0==0)
{
r++;
if(r==2)
{
r=0;
}
r%=2;
if(r==0)
{
P0=0xeb;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT0==0|INT1==0|T0==0)
{
delay(2);
if(INT0==0|INT1==0|T0==0)
break;
}
};
}
}
void t1(void) interrupt 2 using 1 //interrupt 2
{
delay(2);
if(INT1==0)
{
r++;
if(r==2)
{
r=0;
}
r%=2;
if(r==0)
{
P0=0xdd;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT1==0|INT0==0|T0==0)
{
delay(2);
if(INT1==0|INT0==0|T0==0)
break;
}
};
}
}
void t2(void) interrupt 1 using 1 //interrupt 3
{
TH0=0xff;
TL0=0xff;
delay(2);
if(T0==0)
{
P0=0xdb;
P1=0x00;
P2=0xff;
}while(1)
{
if(INT0==0|INT1==0)
{
delay(2);
if(INT0==0|INT1==0)
break;
}
};
}
void main(void)
{
TMOD=0x06;
TH0=0xff;
TL0=0xff;
TR0=1;
EA=1;
EX0=1;
EX1=1;
ET0=1;
while(1)
{
P0=0xeb;
for(h=28;h>0;h--)
{
for(s=248;s>0;s--)
{
P1=0x00;
P2=0xff;
P1=0x01;
P2=dis[h/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x02;
P2=dis[h%10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x04;
P2=dis[(h+2)/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x08;
P2=dis[(h+2)%10];
delay(1);
}
}
delay(248);
P0=0xf3;
for(h=3;h>0;h--)
{
delay(392);
P0=0xf3;
delay(1);
P1=0x00;
P2=0xff;
P1=0xaa;
P2=dis[(h-1)%10];
delay(600);
P0=0xfb;
}
delay(248);
P0=0xdd;
for(h=38;h>0;h--)
{
for(s=248;s>0;s--)
{
P1=0x00;
P2=0xff;
P1=0x01;
P2=dis[(h+2)/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x02;
P2=dis[(h+2)%10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x04;
P2=dis[h/10];
delay(1);
P1=0x00;
P2=0xff;
P1=0x08;
P2=dis[h%10];
delay(1);
}
}
delay(248);
P0=0xde;
for(h=3;h>0;h--)
{
delay(392);
P0=0xde;
delay(1);
P1=0x00;
P2=0xff;
P1=0xaa;
P2=dis[(h-1)%10];
delay(600);
P0=0xdf;
}
delay(248);
}
}
以上就是关于求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器全部的内容,包括:求一段51单片机交通灯程序:1.东西红南北绿时间15s 2.东西黄灯闪烁5s 以上2段+上延时与计时器、基于51单片机控制交通灯的电路图与C语言程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)