Programa para diseño de semáforos basado en microcontrolador
void main()
{
P3 = 0
P1 = 0
P2 =; 0xff;
initTimer();
TR0=1;
ET0=1;
while(1)
{
switch(state)
{
// Salto de estado
caso 0:
if(ct == 0)
{
P3=0; P2=0xff;
ct = 10;
estado = 1;
}
descanso
caso 1:
if(ct == 0)
{
P3=0; P2=0xff
ct = 2; > p>
estado = 2;
}
descanso;
caso 2:
if(ct == 0 )
{
P3=0; P2=0xff;
ct = 2
estado = 3;
}
descanso
caso 3:
if(ct == 0)
{
P3=0;P1=0;P2=0xff;
ct=10;
estado=4; p >
ruptura;
caso 4:
if(ct == 0)
{
P3=0; P1 =0; P2=0xff;
ct = 2;
estado = 5; >
caso 5:
if(ct == 0)
{
P3=0; p >
ct = 2;
estado = 0;
}
descanso
predeterminado: descanso p >
}
// Ejecutar
switch(estado)
{
caso 0:
//Luces verdes en el este y oeste, luces rojas en el norte y sur, cuenta regresiva hasta 30 segundos;
E_G = 1; S_R = 1; p>
descanso;
caso 1:
//El tubo digital cuenta atrás durante 10 segundos;
E_G = 1; W_G = 1; S_R = 1; N_R = 1;
mostrar(ct, 0);
mostrar(ct, 2
mostrar(ct 2, 1); display(ct 2, 3);
break;
caso 2:
// Luces amarillas este y oeste, cuenta regresiva para 2 segundos
E_Y = 1; W_Y = 1; S_R = 1; N_R = 1;
mostrar(ct, 1); p>
descanso;
caso 3:
// Luces verdes en el norte y sur, luces rojas en el este y oeste, cuenta atrás hasta 30 segundos
E_R = 1; W_R = 1; S_G = 1; N_G = 1;
descanso
caso 4:
//El digital tubo cuenta atrás durante 10 segundos;
E_R = 1; S_G = 1;
display(ct, 1); > mostrar(ct, 3);
mostrar (ct 2, 0);
mostrar (ct 2, 2); >
caso 5:
// Luces amarillas norte y sur, cuenta regresiva 2 segundos
E_R = 1; /p>
mostrar(ct, 0);
mostrar(ct, 2);
romper
predeterminado: romper
}
}
}