#include <16F876.h>
#use delay(clock=4000000)                                    //configuracion del reloj//
#use i2c(master,scl=pin_C3,sda=pin_C4,fast,restart_wdt)     //configuracion del i2c//
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD //condiciones de grabación//
#byte port_b=6
#byte port_a=6
set_tris_b (0b11111111);

signed int display[10]={0XAF,0X03,0XB6,0X97,0X1B,0X9D,0XBD,0X07,0XBF,0X9F};//sin signed//
signed int l1=0;
signed int l0=0;
signed int v1=0;
signed int v0=0;
signed int m1=1;
signed int m0=0;
signed int s1=0;
signed int s0=0;

// RUTINA DE INTERRUPCION POR TECLADO EN PINES RB4 A RB7
// DETECTAMOS TECLA PULSADA


#INT_RB        //Declarar las entradas como interrupciones//
void tecla_pulsadal(void)
{
   if((!input(PIN_B5)))
         {
            l0--;
            return;
         }
         if((!input(PIN_B4)))
         {
            l0++;
            return;
         }
}
void tecla_pulsadav(void)
{
     if((!input(PIN_B1)))
         {
            v0++;
            return;
         }
   if((!input(PIN_B2)))
         {
            v0--;
            return;
         }
}

//CONFIGURACIN DE DISPLAYS 7 SEGMENTOS//
  void d0 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01000000);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[V0]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
  void d1 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01000010);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[V1]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d2 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01000100);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[L0]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d3 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01000110);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[L1]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d4 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01001000);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[S0]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d5 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01001010);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[S1]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d6 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01001100);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[M0]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }
    void d7 (void)
    {
    restart_wdt();
    i2c_start();		// Condición de inicio en el bus I2C
    i2c_write(0b01001110);	// Dirección (modo escritura) del dispositivo PCF8574
    i2c_write(display[M1]);		// Se envía el dato al PCF8574
    i2c_stop();			// Condición de stop
  }

//TIEMPO//
void tiempo (void)
delay_ms(1000);
s0--;
if(s0<0)
   {
   s0=9;
   s1--;
   }
if(s1<0)
   {
   s1=5;
   m0--;
   }
if(m0<0)
   {
   m0=9;
   m1--;
}
if(m1<0)
   {
               d0();
               d1();
               d2();
               d3();
               d4();
               d5();
               d6();
               d7();
   }
}

//MARCADOR TANTEO//
void marcador (void)
{
if(v0>9)
   {
   v0=0;
   v1++;
   }
if(v1>9)
   {
   v0=0;
   v1=0;
   }
if (v0<0)
   {
   v0=9;
   v1--;
   }
if(v1<0)
   {
   v1=9;
   v0=9;
   }
if(l0>9)
   {
   l0=0;
   l1++;
   }
if(l1>9)
   {
   l0=0;
   l1=0;
   }
if (l0<0)
   {
   l0=9;
   l1--;
   }
if(l1<0)
   {
   l1=9;
   l0=9;
   }
}

//CUERPO PRINCIPAL DEL PROGRAMA:


void main(void)
{
   enable_interrupts(INT_RB); //activar interrupciones//
   enable_interrupts(GLOBAL);
   port_b_pullups(TRUE);   //por si hay problemas de rebote//
   while(1)
      {
      tecla_pulsadav();
      tecla_pulsadal();
      tiempo();
      marcador();
               d0();
               d1();
               d2();
               d3();
               d4();
               d5();
               d6();
               d7();
}}
