Red de conocimientos turísticos - Información de alquiler - ¿Cómo escribir un programa de control de semáforo para un microcontrolador?

¿Cómo escribir un programa de control de semáforo para un microcontrolador?

//----------------------------------------- ---------

//Nombre: semáforo LED simulado

//Autor: Peng Wei "100 ejemplos de capacitación en programación en lenguaje C de un solo chip: basado en en 8051 +Simulación PROTEUS》

//----------------------------------- ----- -------------

//Explicación: Después de que la luz verde este-oeste se enciende durante unos segundos, la luz amarilla parpadea y luego la luz roja se enciende después de parpadear 5 veces

// Después de que se enciende la luz roja, la luz norte-sur cambia de roja a verde, y después de unos segundos la luz amarilla norte-sur parpadea

// Después de parpadear 5 veces, la luz roja se enciende y la luz verde este-oeste se enciende, y así sucesivamente

// p>

//--- --------------------------------------- ----- ---

#include

#define uchar unsigned char

#define uint unsigned int

sbit RED_A =P0^0;//Luz indicadora este-oeste

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B= P0^3;//Luz indicadora norte-sur

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_count=0 ;Operation_type=1;//Variables de recuento de flashes y tipo de operación

//------------------------ ---- ------------------------

//Retraso

//-- ----- ---------------------------------------

void DelayMS(uint x)

{

uchar i;

while(x--)for(i=0; i<120;i++ )

}

//-------------------------- ------ --------------------

//Subrutina de cambio de semáforo

//--- ----- -----------------------------------

anular Traffic_light()

{

switch(Operation_type)

{

caso 1://Este-Oeste La luz verde está encendida en dirección norte-sur y la luz roja está encendida

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_type=2;

break;

caso 2://La luz amarilla este-oeste parpadea, la luz verde se apaga

DelayMS(300);

GREEN_A=1;

YELLOW_A=~YELLOW_A;

//Parpadea 5 veces

if (++Flash_count!=10) return;

Flash_count=0;

Operación

_type=3;

break;

caso 3://La luz verde norte-sur y la luz roja este-oeste están encendidas

RED_A=0;YELLOW_A =1;GREEN_A= 1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operación_tipo=4;

pausa;

caso 4://La luz amarilla norte-sur parpadea, la luz verde se apaga

DelayMS(300);

GREEN_B=1;

YELLOW_B=~YELLOW_B;

//Flash 5 veces

si (++Flash_count!=10) regresa;

Flash_count=0;

Operation_type=1;

}

}

void main()

{

mientras(1) Traffic_light();

}