#define TIEMPO_VISUALIZACION 30
byte TABLA_7SEG[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,0x67 };
byte reloj[4];
byte conteo = 0;
long tiempo;
void setup() {
Serial.begin(9600);
DDRD |= 0xFC;
DDRB |= 0x1F;
tiempo = millis();
}
void loop() {
tiempo = millis() - tiempo > 1000 ? millis() : tiempo;
reloj[3] = (reloj[3] + 1) % 10;
reloj[2] += (reloj[3] == 0) ? 1 : 0;
reloj[2] %= 6;
reloj[1] += (reloj[2] == 0 && reloj[3] == 0) ? 1 : 0;
reloj[1] %= 10;
reloj[0] += (reloj[1] == 0 && reloj[2] == 0 && reloj[3] == 0) ? 1 : 0;
reloj[0] %= 6;
presentacion();
}
void presentacion(){
PORTB |= 0x1E;
visualizar(reloj[0]);
PORTB &= 0xFD;
delay(TIEMPO_VISUALIZACION);
PORTB |= 0x1E;
visualizar(reloj[1]);
PORTB &= 0xFB;
delay(TIEMPO_VISUALIZACION);
PORTB |= 0x1E;
visualizar(reloj[2]);
PORTB &= 0xF7;
delay(TIEMPO_VISUALIZACION);
PORTB |= 0x1E;
visualizar(reloj[3]);
PORTB &= 0xEF;
delay(TIEMPO_VISUALIZACION);
}
/*
Funcion para cargar los bits en los puertos respectivos y visualizar
*/
void visualizar(byte digito){
byte patron = TABLA_7SEG[digito];
byte tmp = patron & 0x40;
tmp >>= 6;
PORTB &= 0xFE;
PORTB |= tmp;
patron <<= 2;
PORTD &= 0x03; // borrar los bits 2 a 7 del puerto D
PORTD |=patron;
}