#include <TimerOne.h>
int milisegundos = 0;
int segundos = 0;
int minutos = 0;
int horas = 0;
int dia = 0;
int DSP_seg [7] = { 2, 3, 4, 5, 6, 7, 8 };
const byte Display[10] = {
0b1000000, // 0
0b1111001, // 1
0b0100100, // 2
0b0110000, // 3
0b0011001, // 4
0b0010010, // 5
0b0000010, // 6
0b1111000, // 7
0b0000000, // 8
0b0010000, // 9
};
volatile int A = 0;
void setup() {
Timer1.initialize(1000); // Configuramos el timer para 1ms
Timer1.attachInterrupt(ISR_Blink); // Configuramos la interrupción
// Configuramos los pines del display como salidas
for (int i = 0; i < 7; i++) {
pinMode(DSP_seg [i], OUTPUT);
}
}
void numDisplay(int num) {
// Actualizamos el display con el número correspondiente
byte segmentos = Display[num];
for (int i = 0; i < 7; i++) {
digitalWrite(DSP_seg [i], bitRead(segmentos, i));
}
}
void ISR_Blink() {
A = 1;
}
void loop() {
if (A == 1) {
A = 0;
milisegundos++; // Incrementamos los milisegundos en cada interrupción
if (milisegundos == 1000) {
segundos++;
milisegundos = 0;
}
if (segundos == 60) {
minutos++;
segundos = 0;
}
if (minutos == 60) {
horas++;
minutos = 0;
}
if (horas == 24) {
dia++;
horas = 0;
}
numDisplay(segundos % 10); // Tomo el valor de los segundos para obtener solo el digito de las unidades (el ultimo digito)
}
}