Programa de semáforo MCU

Utilizando el microcontrolador 51 como MCU del sistema, básicamente ha completado el control de dos conjuntos de semáforos para que se enciendan alternativamente

Cada intersección de calles tiene tres tipos de luces: girar izquierda, siga recto y peatón. Cada luz del semáforo recto tiene tres colores: rojo, amarillo y verde. Las bicicletas y los automóviles deben utilizar las luces de giro a la izquierda y de recto.

Primero, la luz verde este-oeste y la luz para peatones estarán encendidas durante 1 minuto, la luz de giro a la izquierda estará encendida durante 30 segundos y la luz amarilla estará encendida durante 5 segundos (al mismo tiempo). tiempo, la luz roja norte-sur estará encendida durante 95 segundos), y luego la luz roja este-oeste estará encendida durante 95 segundos (al mismo tiempo, primero, la luz verde y la luz para peatones en dirección norte-sur se encenderán estará encendida durante 1 minuto, la luz de giro a la izquierda estará encendida durante 30 segundos y la luz amarilla estará encendida durante 5 segundos), luego la luz verde este-oeste estará encendida, y así sucesivamente.

Cada vez que se enciende la luz verde, se enciende el semáforo peatonal correspondiente.

60S/30S/5S/60S/30S/5S

Carretera Este-Oeste

Verde y peatón/girar a la izquierda/amarillo/rojo/rojo/rojo

p>

Carretera Norte y Sur

Rojo/rojo/rojo/verde y peatón/girar a la izquierda/amarillo

Cuando el semáforo para peatones esté encendido, habrá Ser un sonido para indicar que los ciegos pueden pasar.

En caso de accidente de tráfico repentino, se puede encender toda la luz roja.

La luz se puede cambiar manualmente a verde cuando pasa una persona importante.

ORG 0000H; Dirección de entrada del programa principal

LJMP MAIN; Saltar al principio del programa principal

ORG 0003H Interrumpir la entrada del programa de interrupción externa; 0 Dirección

ORG 000BH; Dirección de entrada del programa de interrupción del temporizador 0

LJMP T0_INT; Salto a la rutina de servicio de interrupción

ORG 0013H Interrupción externa 1 Interrupción del programa; dirección de entrada

PRINCIPAL: MOV SP, #50H

MOV IE, #8EH; la CPU activa la interrupción, permite la interrupción T0, la interrupción T1 y la interrupción externa 1

MOV TMOD, #51H; configura T1 en modo de conteo, T0 en modo de sincronización y ambos funcionan en modo 1

MOV TH1, #00H Borra el contador T1

MOV TL1; , #00H

SETB TR1 ; Iniciar temporizador T1

SETB EX1 ; Permitir interrupción INT1

SETB IT1 ; MOV DPTR, #0003H

MOV A, #80H; Asignar valor inicial a 8255, 8255 funciona en modo 0

MOVX @DPTR, A

OTRA VEZ: JB P3.1, N0; determine si se debe establecer el valor inicial del tiempo del semáforo este-oeste, si P3.1 es 1, salte

MOV A, P1

JB; P1.7, RED; determine si P1.7 es 1. Si es 1, configure el tiempo de luz roja; de lo contrario, configure el tiempo de luz verde

MOV R0, #00H

;

MOV R0, A; almacena el tiempo inicial de luz verde este-oeste

MOV R3, A

LCALL DISP1

LCALL DELAY

AJMP OTRA VEZ

ROJO: MOV A, P1

ANL A, #7FH; P1.7 está establecido en 0

MOV R7, # 00H se borra

MOV R7, A; almacena el tiempo inicial de la luz roja este-oeste

MOV R3, A

LCALL DISP1

p>

RETRASO DE LLAMADA

AJMP OTRA VEZ

--------------------------; --------

N0: SETB TR0; inicia el temporizador T0

MOV 76H, el tiempo de luz roja se almacena en 76H

N00; : MOV A, 76H; dirección este-oeste Prohibida, dirección norte-sur

MOV R3, A

MOV DPTR, #0000H ubicado en el puerto 8255A, la luz roja está encendida; en dirección este-oeste, y la luz verde está encendida en dirección norte-sur

MOV A, #0DDH

MOVX @DPTR, A

N01: JB P2.0, B0

N02: SETB P3.0

CJNE R3, #00H, N01; Compara si el valor en R3 es 0, si no es 0, ve a la instrucción actual para su ejecución

------La luz amarilla parpadea durante 5 segundos, programa-- ----

N1: SETB P3.0

MOV R3, #05H

MOV DPTR, #0000H ubicado en el puerto 8255A, dirección este-oeste, norte-sur Luz amarilla encendida

MOV A, #0D4H

MOVX @DPTR, A

N11: MOV R4, #00H

N12: CJNE R4, #7DH, $; Continuamente encendido durante 0,5 segundos

N13: MOV DPTR, #0000H; establezca el puerto 8255A, la luz amarilla en dirección norte-sur está apagada

MOV A, #0DDH

MOVX @DPTR , A

N14: MOV R4, #00H

CJNE R4, #7DH, $ La luz amarilla permanece apagada durante 0,5 segundos

;

CJNE R3, #00H, N1; Salir si el tiempo de parpadeo llega a 5 segundos

;----------------------- ---------- --

N2: MOV R7, #00H

MOV A, R0; tráfico este-oeste, prohibido norte-sur

MOV R3, A

MOV DPTR, #0000H; configurado en el puerto 8255A, la luz verde este-oeste está encendida, la luz roja norte-sur está encendida

MOV A, #0EBH

MOVX @DPTR, A

N21: JB P2.0, T03

N22: CJNE R3, #00H, N21

; ------Luz amarilla parpadea durante 5 segundos programa---- --

N3: MOV R3, #05H

MOV DPTR, # 0000H; configure el puerto 8255A, este-oeste, norte-sur, luz amarilla encendida

MOV A, # 0E2H

MOVX @DPTR, A

N31: MOV R4, #00H

CJNE R4, #7DH, $; la luz amarilla permanece encendida durante 0,5 segundos

p>

N32: MOV DPTR, #0000H; configure el puerto 8255A, el amarillo la luz en las direcciones norte y sur está apagada

MOV A, #0EBH

MOVX @DPTR, A

N33: MOV R4, #00H

CJNE R4, #7DH, $; la luz amarilla se apaga por 0.5 segundos

CJNE R3, #00H, N3; el tiempo de parpadeo llega a 5 Salidas en segundos

SJMP N00

;------Programa de alarma de luz roja------

B0: MOV R2, #03H Duración de la alarma 3 segundos

B01: MOV A, R3

JZ N1; Si se completa la cuenta regresiva, la alarma ya no ocurrirá

Alarma CLR P3.0

p><; p>CJNE R2, #00H, B01; Determinar si han transcurrido 3 segundos

SJMP N02

------Subrutina de retraso de 1 segundo--- ----

N7: RETI

T0_INT: MOV TL0, #9AH; envía el valor inicial de 10ms al temporizador T0

MOV TH0, #0F1H

INC R4

INC R5

CJNE R5, #0FAH, T01; juzgue si el retraso es suficiente para un segundo, si no, llame a la subrutina de visualización

MOV R5, #00H; Borrar R5

DEC R3; Disminuye el valor de cuenta atrás inicial en uno

DEC R2 Disminuye el valor de alarma inicial en uno

T01: ACALL DISP; subrutina de visualización de llamada

RETI; retorno de interrupción

;--

----Mostrar subrutina------

DISP: JNB P2.4, T02

DISP1: MOV B, #0AH

MOV A , R3 mediana de conversión de pantalla de dos a diez

DIV AB

MOV 79H, A

MOV 7AH, B

DIS: MOV A, 79H; muestra el dígito de las decenas

MOV DPTR, #TAB

MOVC A, @A DPTR

MOV DPTR, #0002H

MOVX @DPTR,A

MOV DPTR,#0001H

MOV A,#0F7H

MOVX @DPTR,A

LCALL DELAY

DS2: MOV A, 7AH; muestra los dígitos

MOV DPTR, #TAB

MOVC A, @A DPTR

MOV DPTR, #0002H

MOVX @DPTR, A

MOV DPTR, #0001H

MOV A, #0FBH

MOVX @DPTR, A

RET

;------Programa de detección de flujo de tráfico este-oeste------

T03: MOV A , R3

SUBB A, #00H; Si se completa la cuenta atrás de la luz verde, ya no se detectará el flujo de tráfico

JZ N3

JB P2. 0, T03

JB P2.0, T03

p>

INC R7

CJNE R7, #64H, E1

MOV R7, #00H; borrado después de 100 interrupciones

E1: SJMP N22

;------Programa de visualización del flujo de tráfico este-oeste------

T02: MOV B, #0AH

MOV A, R7; mediana de conversión de pantalla de R7 de dos a diez

DIV AB

MOV 79H , A

MOV 7AH, B

DIS3: MOV A, 79H; muestra el dígito de las decenas

MOV DPTR, #TAB

MOVC A, @A DPTR

MOV DPTR, #0002H

MOVX @DPTR,A

MOV DPTR,#0001H

MOV A ,#0F7H

MOVX @DPTR,A

LCALL DELAY

DS4: MOV A, 7AH; muestra el dígito de uno

MOV DPTR , #TAB

MOVC A, @A DPTR

MOV DPTR, #0002H

MOVX @DPTR, A

MOV DPTR, #0001H

MOV A, #0FBH

MOVX @DPTR, A

LJMP N7

------Retraso Subrutina 4MS----------

RETARDO: MOV R1, #0AH

BUCLE: MOV R6, #64H

NOP

LOOP1: DJNZ R6, LOOP1

DJNZ R1,LOOP

p>

RET

;------Tabla de caracteres------

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH

FIN