Semaforo Programable
Semaforo Programable
Semaforo Programable
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;
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);
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<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;
}
}
}