// Variables relacionadas al funcionamiento
short RelojCorriendo = 0;
short Reloj[6] = {0,0,0,0,0,0}; // MM:SS:mm
// Variables relacionadas a mostrar en el 7 segmento
unsigned char numeroDeDigito = 0;
short numero[]={192,249,164,176,153,146,130,248,128,144}; // Conversion binario a 7 semgntos
unsigned char ComunPuerto[] = {0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000};
void MostrarEnDisplay(void)
{
PORTD = 0; // Apago los comunes
PORTC = numero[Reloj[numeroDeDigito]];
PORTD = ComunPuerto[numeroDeDigito];
numeroDeDigito++;
if(numeroDeDigito >= sizeof ComunPuerto) numeroDeDigito = 0;
}
/*
* Aca leo el sensor, uso uno solo, es para poder activarlo y pararlo con este sensor nomas
*/
void LecturaDeSensores()
{
// variable para almacenar el estado de la ultima ves que entro a este punto
// el static hace que por mas que salga de la funcion, se siga manteniendo la variable
static short anteriorestado = 0;
if((PORTA.RA0 == 1) && (anteriorestado == 0)) // Flanco positivo nomas, esto es para que al entrar cada 10ms aca, no se produzca la parada y arranque muchas veces.
{
RelojCorriendo ^= 1; // XOR con 1
}
anteriorestado = PORTA.RA0;
}
/*
* Incremento el menor numero y luego arreglo todos los que se pasaron.
*/
void AumentarReloj()
{
Reloj[5]++;
if(Reloj[5] > 9) { Reloj[4]++; Reloj[5] = 0; }
if(Reloj[4] > 9) { Reloj[3]++; Reloj[4] = 0; }
if(Reloj[3] > 9) { Reloj[2]++; Reloj[3] = 0; }
if(Reloj[2] > 5) { Reloj[1]++; Reloj[2] = 0; }
if(Reloj[1] > 9) { Reloj[0]++; Reloj[1] = 0; }
if(Reloj[0] > 5) { Reloj[0] = 0; }
}
/*
* Mi main, con el funcionamiento del Timer
*/
void main(void)
{
TRISC=0; // SALIDA
TRISD=0; // SALIDA
TRISA=1; // ENTRADA
PORTC=0;
PORTD=0; //Configuracion de pines
while(1)
{
LecturaDeSensores();
if(RelojCorriendo == 1)
{
AumentarReloj();
}
MostrarEnDisplay();
//Delay_ms(10);
}
}