Semaforo Programable

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 3

#INCLUDE <18f4550.

h>
#FUSES XT,NOWDT,CPUDIV1,PUT,NOPROTECT,NOVREGEN
#DEVICE ADC=10
#USE DELAY (CLOCK=4000000)
#DEFINE USE_PORTB_KBD TRUE
#INCLUDE <LCD.C>
#INCLUDE <KBD_LIB_ARDUINO.C>
#USE STANDARD_IO(C)
#DEFINE DEMORA DELAY_MS(500);
CHAR K;
INT X,W,I,V,A,R,Q,T=0,SUMA,BS=0,BA=0, Y;
INT TEMPO[3];
INT LR,LA,LV,TT,O=0,Z,CONT=59;

VOID INICIO (){


LCD_PUTC("\SEMAFORO");
LCD_PUTC("\n1 V 2 A 3 R 4 IN");
DEMORA;
}

INT CAPTURAR(){
CAP: K=KBD_GETC();
W=K-48;
IF (K!=0){
RETURN W;
}
ELSE{
GOTO CAP;}}

VOID INGRESO(){
LCD_GOTOXY(1,1);
LCD_PUTC("INGRESE TIEMPO \n");
LCD_PUTC(" ");
WHILE (I<2){
V=CAPTURAR();
TEMPO[I]=V;
LCD_GOTOXY(I+1,2);
PRINTF(LCD_PUTC,"%u",V);
DEMORA;
I++;
}
I=0;
}

VOID MAIN(){
LCD_INIT();
KBD_INIT();
PORT_B_PULLUPS(TRUE);
LCD_PUTC("\f CONTROL SEMAFORO\n");
DEMORA;
SET_TRIS_C(0XFE);

WHILE (1){
INICIO();
X=CAPTURAR();

SWITCH (X){
CASE 1:
LCD_PUTC("\f TIEMPO VERDE\n");
DEMORA;
INGRESO();
Y=(TEMPO[0]*10)+TEMPO[1];

LCD_PUTC("\fVERDE\n");
PRINTF(LCD_PUTC, "MINUTOS=%u ",Y);
DEMORA;
LCD_PUTC("\fCONTROL SEMAFORO\n"" ");
INICIO();
BREAK;

CASE 2:
LCD_PUTC("\f TIEMPO AMARILLO\n");
DEMORA;
INGRESO();
A=(TEMPO[0]*10)+TEMPO[1];
LCD_PUTC("\fAMARILLO\n");
PRINTF(LCD_PUTC," MINUTOS=%u ",A);
DEMORA;
LCD_PUTC("\fCONTROL SEMAFORO\n"" ");
INICIO();
BREAK;

CASE 3:
LCD_PUTC("\f TIEMPO ROJO\n");
DEMORA;
INGRESO();
R=(TEMPO[0]*10)+TEMPO[1];
LCD_PUTC("\fROJO\n");
PRINTF(LCD_PUTC," MINUTOS=%u ",R);
DEMORA;
LCD_PUTC("\fCONTROL SEMAFORO\n"" ");
INICIO();
BREAK;

CASE 4:
LCD_GOTOXY(1,2);
T=(Y+A+R);
PRINTF(LCD_PUTC,"MINUTOS=%u"" ",T);
DELAY_MS(3000);

LR=R*60; // TIEMPO ROJO


LA=A*60; // TIEMPO AMARILLO
LV=Y*60; // TIEMPO VERDE
TT=(LV+LA+LR);
SUMA=TT-5;
Z=TT/60;
Z=Z-1;
BS=LV+LA;

WHILE(CONT>=0){
LCD_PUTC("\f INICIO \n");
PRINTF(LCD_PUTC,"TIEMPO=%u %u",Z,CONT);
DEMORA;
CONT=CONT-1;

SUMA=SUMA-1;
IF(SUMA>BS){
OUTPUT_HIGH(PIN_C0);
OUTPUT_LOW(PIN_C1);
OUTPUT_LOW(PIN_C2);
}

IF(SUMA<BS && SUMA>LA){


OUTPUT_LOW(PIN_C0);
OUTPUT_HIGH(PIN_C1);
OUTPUT_LOW(PIN_C2);

IF(SUMA<LA){
OUTPUT_LOW(PIN_C0);
OUTPUT_LOW(PIN_C1);
OUTPUT_HIGH(PIN_C2);
}

IF(CONT==0){
IF(Z>=0){
Z=Z-1;
CONT=59;

}
}

BREAK;

}
}
}

También podría gustarte