#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
}
}