sábado, 8 de dezembro de 2012

Desafio 3.0 Semaforo

Nesse desafio devíamos fazer um semáforo pra 2 ruas, um pra cada. Enquanto uma tivesse aberta a outra taria fechada, e enquanto isso informações vão sendo escritas no LCD, dizendo qual rua esta aberta e qual esta fechada!

Diretrizes:



O meu programa ficou da seguinte forma:


#include <LPC213X.H>
#include "C:\Keil\ARM\lcd.h"

#define S1_VERM (1<<16)
#define S1_AM (1<<17)
#define S1_VERDE (1<<18)
#define S2_VERM (1<<19)
#define S2_AM (1<<20)
#define S2_VERDE (1<<21)
#define CEEE (1<<22)


int d;
int i; 
lcd_init();

void ceee (void)
{
IOCLR1 = (S1_VERM);
IOCLR1 = (S1_AM);
IOCLR1 = (S1_VERDE);
IOCLR1 = (S2_VERM);
IOCLR1 = (S2_AM);
IOCLR1 = (S2_VERDE);
lcd_puts("Falta de Energia");
IOSET1 = (S1_AM);
IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);
IOCLR1 = (S2_AM);
}

void main (void)
{
 
while (1)
 {
IODIR0 = 0xFFFFFFFF; 
IODIR1 = 0xFFBFFFFF;

lcd_puts("Rua 1 Fechada, Rua 2 OK");
IOSET1 = S1_VERM;
IOCLR1 = S2_VERM;
IOSET1 = S2_VERDE;
for (d=0; d<100000; d++);
IOCLR1 = (S2_VERDE);

if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}

IOSET1 = (S2_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S2_AM);


IOSET1 = (S2_VERM);
IOCLR1 = (S1_VERM);
IOSET1 = (S1_VERDE);
lcd_puts("Rua 1 OK, Rua 2 Fechada");
for (d=0; d<100000; d++);

if (!(IOPIN1&(CEEE)))
{
while (!(IOPIN1&(CEEE)))
{
ceee();
}
}

IOCLR1 = (S1_VERDE);

IOSET1 = (S1_AM);
for (d=0; d<100000; d++);
IOCLR1 = (S1_AM);

}

}


Imagem demonstrativa do Proteus:







Nenhum comentário:

Postar um comentário