#include <16F84A.h> //pic a utilizar
#use delay(clock=4000000)     //Frecuancia del oscilador
#fuses XT,NOWDT                    //Fusibles de configuracion, OSC XT, y Watchdog Desactivado
#use standard_io (A)
#use standard_io (B)
#include <LCD.c>     //Incluimos la libreria LCD.C que viene con CCS
void inicializa(void){           //funcion para mostrar datos iniciales e inicializar el contador
   lcd_init();                                        //Iniciamos El LCD
   lcd_putc("\f");                                    //Limpiamos el LCD
   lcd_gotoxy(1,1);                                   //Vamos a la posicion 1 de la primera linea del LCD
   printf(lcd_putc, "Cont.  Vehicular");
   delay_ms(2000);
   lcd_putc("\f");
   lcd_gotoxy(2,1);                                   //Vamos a la posicion 2 de la primera linea del LCD
   printf(lcd_putc, "Entradas: 0");                 
   lcd_gotoxy(3,2);                                   //Vamos a la posicion 1 de la segunda linea   
   printf(lcd_putc, "Salidas: 0");       
}
void main()
{
long salidas=0;     //contador de entradas
long entradas=0;   //contador de salidas
int estado_in=0;   //&bandera para contador de entradas
int estado_out=0;  //bandera para el contador de salidas
long i=0;
//lcd_init();          //Iniciamos El LCD
inicializa();                          
while(TRUE){                                             //Generamos bucle infinito
   if (input(PIN_A0)){                                   //si existe señal en el pin a0
   for(i=0;i<=300;i++)                                 //ciclo para eliminar rebotes
      if (!input(PIN_A0)){
         estado_in=1;
         break;
         }
      
   if (estado_in!= 1){                                      //si no se ha tomado ya en cuenta ese pulso, entra a la rutina
      estado_in=1;                                          //activa la bandera para señalar que el pulso ya fue registrado
      entradas++;                                        //aumenta el contador
      lcd_putc("\f");                                    //Limpiamos el LCD
      lcd_gotoxy(2,1);                                   
      printf(lcd_putc, "Entradas: %lu", entradas);        //mandamos a la primera linea del LCD el conteo actual de entradas
      lcd_gotoxy(3,2);                                      
      printf(lcd_putc, "Salidas: %lu", salidas);          //mandamos a la segunda linea del LCD el conteo actual de salidas    
   }
   }else if (estado_in==1)                               //si no encuentra pulso en a1, verifica el estado de la bandera de entrada
            estado_in=0;                                 //si la bandera esta activada, la desactiva para identificar un nuevo pulso
            
   if(input(PIN_A1)){
      for(i=0;i<=30000;i++)                                 //ciclo para eliminar rebotes
         if (!input(PIN_A1)){
            estado_out=1;
            break;
            }
         
   if (estado_out!= 1){                                  //si no se ha tomado ya en cuenta ese pulso, entra a la rutina
      estado_out=1;                                      //activa la bandera para señalar que el pulso ya fue registrado
      salidas++;                                         //aumenta el contador
      lcd_putc("\f");                                    //Limpiamos el LCD
      lcd_gotoxy(2,1);                                   
      printf(lcd_putc, "Entradas: %lu", entradas);        //mandamos a la primera linea del LCD el conteo actual de entradas
      lcd_gotoxy(3,2);                                      
      printf(lcd_putc, "Salidas: %lu", salidas);          //mandamos a la segunda linea del LCD el conteo actual de salidas       
   }
   }else if (estado_out==1)                              //si no encuentra pulso en a1, verifica el estado de la bandera de salida
            estado_out=0;                                //si la bandera esta activada, la desactiva para identificar un nuevo pulso
   
 }
}