51单片机交通灯程序 东西红灯亮60秒,南北绿灯亮55秒 东西绿灯亮55秒,南北红灯亮60秒

不要C语言的

第1个回答  2010-12-21
#include<reg52.h>
sbit dx P1.0
sbit nb P1.1
void delay(void) //误差 0us
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_; //if Keil,require use intrins.h
}

void mian()
{ char a;
while(1)
{
nb=1;
dx=0;
for(a=0;a<60;a++)
delay();
dx=1;
nb=0;
for(a=0;a<55;a++)
nb=1;
dx=0;
for(a=0;a<55;a++)
dx=0;
nb=1;
for(a=0;a<60;a++)
}
}本回答被网友采纳
第2个回答  2010-12-22
A、B两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为A、B两干道的公共停车时间。设A道比B道的车流量大,指示灯燃亮的方案如表1。

3 60 3 80 3 60 ……
A道 黄灯亮 红灯亮 黄灯亮 绿灯亮 黄灯亮 红灯亮 ……
B道 黄灯亮 绿灯亮 黄灯亮 红灯亮 黄灯亮 绿灯亮 ……

此表1说明:
(1)当为黄灯时 A、B两道同时为黄灯;以提示行人或车辆下一个灯色即将到来 时间 3秒。
(2)当A到为红灯,A 道车辆禁止通行,A 道行人可通过;B 道为绿灯,B 道车辆通过,行人禁止通行。时间为60秒。
(3)当A道绿灯,A 道车辆通行;B 道为红灯,B 道车辆禁止通过,行人通行。时间为80秒。 A道车流大 通行时间长
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
(5)此表可根据车流量动态设定
R4 存放黄灯时间 3 03H (此时间可以动态设定)
R5 存放红灯时间 60 3CH
R6 存放绿灯时间 80 50H
PC0 显示黄灯信号
PC1 显示红灯信号
PC2 显示黄灯信号
8255 工作于方式0
8255 PA、PB、 PC口输出 PC 控制字为10000000B (80H)
程序源代码:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R1,#03H 初始化8255
MOV A,#80H
MOVX @R1,A
AGAIN: MOV P3,#80H 设置初值
MOV A,P3
JB ACC.7, NEXT0
AGAIN1: MOV P3,#40H
MOV A,P3
JB ACC.6, RED
MOV P3,#0FH
MOV A,P3
ANL A,#0FH
MOV R3,A
AJMP AGAIN1
RED: MOV P3,#0FH
MOV A,P3
ANL A,#0FH
MOV R2,A
AJMP AGAIN
NEXT0: MOV R1,#03H
NEXT1: MOV DPTR,#TAB 显示黄灯个位
MOV A,R1
MOVC A,@A+DPTR
MOV R1,#00H
MOVX @R1, A
MOV R1,#O
MOV DPTR,#TAB 显示黄灯十位
MOV A,R0
MOVC A,@A+DPTR
MOV R1,#01H
MOVX @R1,A
MOV DPTR,#0C62H 显示黄灯信号
MOV A,#00H
LCALL 0F4E0H
ACALL DELAY
DJNZ R0,NEXT1
MOV A,R3
MOV R0,A
NEXT2: MOV DPTR,#TAB 显示红灯个位
MOV A,R0
MOVC A,@A+DPTR
MOV R1,#00H
MOVX @R1,A
MOV DPTR,#TAB 显示红灯十位
MOV A,R0
MOVC A,@A+DPTR
MOV R1,#01H
MOV A,R0
MOVX @R1,R0
MOV R1,#02H 显示红灯信号
MOV A,#02H
MOVX @R1,A
ACALL DELAY 延时1秒
DJNZ R0,NEXT2
MOV A,R2
MOV R0,A
NEXT3: MOV DPTR,#TAB 显示绿灯个位
MOV A,R0
MOVC A,@A+DPTR
MOV R1,#00H
MOVX @R1,R0
MOV DPTR,#TAB 显示绿灯十位
MOV A,R0
MOVC A,@A+DPTR
MOV R1,#01H
MOV A,R0
MOVX @R1,R0
MOV R1,#02H 显示绿灯信号
MOV A,#02H
MOVX @R1,A
ACALL DELAY 延时1秒
DJNZ R0,NEXT3
AJMP NEXT0
DELAY: MOV R4,#08H 延时1秒子程序
DE2: LCALL DELAY1
DJNZ R4,DE2
RET
DELAY1:MOV R6,#0
MOV R5,#0
DE1: DJNZ R5,$
DJNZ R6,DE1
RET
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
相似回答