¿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 p>
// 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
//--- ----- ----------------------------------- p>
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 p>
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();
}