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 p>
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 p>
; ------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 segundosSJMP 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 p>
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 p>
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