Opino como @anon90500195, códigos no formateados (usa autoformat del IDE) me lleva mucho tiempo asi que paso de dar una devolución.
A modo de contribución solo lo ordené.
#include <Arduino.h>
#include <TimerOne.h>
void setup()
{
for (int i=2; i<39; i++) {
if (i =!14)
pinMode(i, OUTPUT);
else
i = 21;
}
pinMode(19, INPUT);
pinMode(1, INPUT);
pinMode(A2, OUTPUT);
// put your setup code here, to run once:
Timer1.initialize(1000); // Dispara cada 1 ms
Timer1.attachInterrupt(ISR_Prendido);
//Serial.begin(19200);
}
int led = 32, multiplexado = 0, intervalo = 1000;
unsigned long contador = 0, previo = 0;
void loop()
{
// put your main code here, to run repeatedly:
int const DECO[33] = {B01111111, B01111111, B01000001, B01000001, B01000001, B01000001, B00100010, B00011100, B00000000, //D
B01111111, B01001001, B01001001, B01001001, B01001001, B01000001, B01000001, B00000000, //E
B00111110, B01000001, B01000001, B01000001, B01000001, B01000001, B00100010, B00000000, //C
B00111110, B01000001, B01000001, B01000001, B01000001, B01000001, B00111110, B00000000}; //O
for (int k = 0; k < 100; k++) //Refresco de matriz
{
if (multiplexado == 1)
{
contador = micros();
PORTA = DECO[led];
if (contador - previo >= 1000)
{
PORTA = B00000000;
previo = contador;
if (led < 21)
{
digitalWrite(led + 29, LOW);
}
if (led > 20 && led < 30)
{
digitalWrite(led - 19, LOW);
}
if (led > 29 && led < 32)
{
digitalWrite(led - 18, LOW);
}
if (led == 32)
{
digitalWrite(A2, LOW);
}
led -= 1;
if (led == 0)
{
led = 32;
}
multiplexado = 0;
}
}
}
}
void ISR_Prendido()
{
if (led < 21)
{
digitalWrite(led + 29, LOW);
}
if (led > 20 && led < 30)
{
digitalWrite(led - 19, LOW);
}
if (led > 29 && led < 32)
{
digitalWrite(led - 18, LOW);
}
if (led == 32)
{
digitalWrite(A2, LOW);
}
if (led < 21)
{
digitalWrite(led + 29, HIGH);
}
if (led > 20 && led < 30)
{
digitalWrite(led - 19, HIGH);
}
if (led > 29 && led < 32)
{
digitalWrite(led - 18, HIGH);
}
if (led == 32)
{
digitalWrite(A2, HIGH);
}
multiplexado = 1;
}