#include <16f876.h>
#fuses XT,NOPUT,NOWDT,NOLVP,NOPROTECT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte portb = 0x06
#byte portc = 0x07
int numeros[10]={0b00111111,0b00000110,
0b01011011,0b01001111,
0b01100110,0b01101101,
0b01111101,0b00000111,
0b01111111,0b01100111};
int minutos,segundos,segundosd,minutosd,start,rep;
signed int sec,min,sec2,min2;
void main()
{
set_tris_a(0b111111);
set_tris_b(0x00);
set_tris_c(0x00);
start=0;
minutos=0; segundos=0;
minutosd=0; segundosd=0;
portb=0x00; portc=0x00;
while(true){
if (input(pin_a2)) start=1;
if (input(pin_a1)) {delay_ms(500); minutos++; } //Aquí se supone que es la forma de preseleccionar
if (input(pin_a3)) {delay_ms(500); segundos++; } //El tiempo que quiero contar atrás
if (segundos>9){segundos=0; segundosd++;} //Como mucho 59 sec y 59 minutos
if (segundos>9 && segundosd>5) {segundos=0;segundosd=0;}
if (minutos>9){ minutos=0; minutosd++;}
if (minutosd>5 && minutos>9){minutos=0; minutosd=0;}
portb =0b00001111; //Aquí muestro que tiempo tengo seleccionado
portc=numeros[segundos];
delay_ms(10);
portb=0b00010111;
portc=numeros[segundosd];
delay_ms(10);
portb=0b00011011;
portc=numeros[minutos];
delay_ms(10);
portb=0b00011101;
portc=numeros[minutosd];
delay_ms(10);
if (start==1){ //empiezo a contar cuando pulso start...
portb=0x00; portc=0x00;
for (min2=minutosd ; min2>=0 ; min2--){
for (min=minutos ; min>=0 ; min--){
for (sec2=segundosd;sec2>=0 ; sec2--){
for (sec=segundos;sec>=0;sec--){
for (rep=0 ; rep <25; rep++){
portb =0b00001111;
portc=numeros[sec];
delay_ms(10);
portb=0b00010111;
portc=numeros[sec2];
delay_ms(10);
portb=0b00011011;
portc=numeros[min];
delay_ms(10);
portb=0b00011101;
portc=numeros[min2];
delay_ms(10);
if (min2==0 && min == 0 && sec2==0 && sec==0)
{portb=0x00; portc=0x00; start=0;}
}}}}}}}}