
p1口为东西黄灯
p2口为东西绿灯
p3南北红灯
p4南北黄灯
p5南北绿灯
绿灯停留3s;黄灯闪烁5次,每次0.2s,红的停留4s
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV DPTR,#B1
MOV R2,#4
MOV A,#0H
F3:MOV R1,A
MOVC A,@A+DPTR
JNB ACC.4,SS1 判断东西方向黄灯是否亮,若亮则转移到黄灯闪烁程序
JNB ACC.1,SS2 判断南北方向黄灯是否亮,若亮则转移到黄灯闪烁程序
MOV P1,A
LCALL DY1S
SS:MOV A,R1
INC A
DJNZ R2,F3
SJMP MAIN
SS1:MOV R0,#10
XH1:CPL ACC.4
MOV P1,A
LCALL DYS
DJNZ R0,XH1
SJMP SS
SS2:MOV R0,#10
XH2:CPL ACC.1
MOV P1,A
LCALL DYS
DJNZ R0,XH2
SJMP SS
DY1S:MOV R5,#30
DLP0:MOV R6,#100
DLP1:MOV R7,#250 F=6MHZ
DLP2:DJNZ R7,DLP2 2X250X2uS=1ms
DJNZ R6,DLP1 1x100=0.1S
DJNZ R5,DLP0 0.1X30=3s
RET
DYS:MOV R6,#200
DLP3:MOV R7,#250 F=6MHZ
DLP4:DJNZ R7,DLP4 2X250X1uS=500us=1ms
DJNZ R6,DLP3 1x200=0.2S
RET
B1: DB 11011110B,11101110B,11110011B,11110101B
END
ORG 0000H
LJMP START
ORG 0003H INT 0 中断入口地址
LJMP INT0
ORG 0040H
START:
MOV SP,#60H
SETB EX0 INT 0 中断有效
SETB IT0
SETB EA
LCALL STATUS0 初始状态(都是红灯)
CIRCLE:
LCALL STATUS1 南北绿灯,东西红灯
LCALL STATUS2 南北绿灯闪转黄灯,东西红灯
LCALL STATUS3 南北红灯,东西绿灯
LCALL STATUS4 南北红灯,东西绿灯闪转黄灯
LJMP CIRCLE
INT0:
PUSH PSW 保护现场
PUSH 2
PUSH ACC
MOV DPTR,#8300H
MOV A,#0FH 南北,东西都亮红灯
MOVX @DPTR,A
MOV R2,#100 延时10秒
LCALL DELAY
POP ACC 恢复现场
MOVX @DPTR,A
POP 2
POP PSW
RETI
STATUS0: 南北红灯,东西红灯
MOV DPTR,#8300H
MOV A,#0FH
MOVX @DPTR,A
MOV R2,#10 延时1秒
LCALL DELAY
RET
STATUS1: 南北绿灯,东西红灯
MOV DPTR,#8300H
MOV A,#96H 南北绿灯,东西红灯
MOVX @DPTR,A
MOV R2,#200 延时20秒
LCALL DELAY
RET
STATUS2: 南北绿灯闪转黄灯,东西红灯
MOV DPTR,#8300H
MOV R3,#03H 绿灯闪3次
FLASH:
MOV A,#9FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#96H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH
MOV A,#06H 南北黄灯,东西红灯
MOVX @DPTR,A
MOV R2,#10 延时1秒
LCALL DELAY
RET
STATUS3: 南北红灯,东西绿灯
MOV DPTR,#8300H
MOV A,#69H
MOVX @DPTR,A
MOV R2,#200 延时20秒
LCALL DELAY
RET
STATUS4: 南北红灯,东西绿灯闪转黄灯
MOV DPTR,#8300H
MOV R3,#03H 绿灯闪3次
FLASH1:
MOV A,#6FH
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
MOV A,#69H
MOVX @DPTR,A
MOV R2,#03H
LCALL DELAY
DJNZ R3,FLASH1
MOV A,#09H 南北红灯,东西黄灯
MOVX @DPTR,A
MOV R2,#10 延时1秒
LCALL DELAY
NOP
RET
DELAY: 延时子程序
PUSH 2
PUSH 1
PUSH 0
DELAY1:
MOV 1,#00H
DELAY2:
MOV 0,#0B2H
DJNZ 0,$
DJNZ 1,DELAY2 延时 100 mS
DJNZ 2,DELAY1
POP 0
POP 1
POP 2
RET
END
这是我们的实验,程序肯定没问题。至于ULN2803,只是一个增大电流,电压的芯片,因为51单片机本身的电流太小。你改一下就好。至于其他不明白的地方,可以交流。QQ375778861
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)