Vous êtes sur la page 1sur 3

// Programme de commande dun feux de carrefour avec une hologe de dcomptage

#include <16F877.h>
#device adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=500000)
#include <STDLIB.H>
ldiv_t lidiv;
long i;
long diz,unite;
int idiz,iunite,portc,portd;

void main()

{
do

if (input(PIN_C0)==1)
{
output_B(0b10010);

// orange clignotant pour les deux feux

delay_ms(50);

// Dure de l'allumage

output_B(0);

//extinction deux lampes orange

delay_ms(50);

//Dure extinction

}
else
{
// Dclenchement dcomptage
for (i=0;i<=600;i++){
lidiv=ldiv(60-i/10,10);
diz=lidiv.quot;
idiz=diz;
unite=lidiv.rem;
iunite=unite;
portc=iunite+idiz*16;
output_d(portc);

// affichage dcomptage

output_b(0b100001);
if (i==600){

// Rouge et vert et vert rouge

// arret dcomtage 0

portc=0;
output_b(portc);
break;

// affichage OO au compteur
// sortir de la boucle

}
}
output_b(0b000001);

// maintenir Rouge allum clignotement du vert

delay_ms(50);
output_b(0b100001);
delay_ms(50);
output_b(0b000001);
delay_ms(50);
output_b(0b100001);
delay_ms(50);
output_b(0b000001);
delay_ms(50);
output_b(0b100001);
delay_ms(50);

// maintenir Rouge allum clignotement du vert

output_b(0b010001);
delay_ms(200);
output_b(0b001011);
delay_ms(200);
for (i=0;i<=600;i++)
{
lidiv=ldiv(60-i/10,10);
diz=lidiv.quot;
idiz=diz;
unite=lidiv.rem;
iunite=unite;
portc=iunite+idiz*16;
output_d(portc);
output_b(0b001100);
if (i==600)
{ portc=0;

// Dclenchement dcomptage

output_b(portc);
break;
}
}

output_b(0b001000);
delay_ms(50);
output_b(0b001100);
delay_ms(50);
output_b(0b001000);
delay_ms(50);
output_b(0b001100);
delay_ms(50);
output_b(0b001000);
delay_ms(50);
output_b(0b001100);
delay_ms(200);
output_b(0b001010);
delay_ms(200);
output_b(0b011001);
delay_ms(200);

}
while(true);

Vous aimerez peut-être aussi