89C51单片机红绿灯程序是什么?

89C51单片机红绿灯程序是什么?,第1张

注p0口为东西红灯

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7868881.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存