Aumento de brillo en leds multiplexados

Hola buenas noches, espero se encuentre muy bien
disculpe he estado intentado hacer lo que me dijeron y creo que si lo conseguí porque si brilla un poco mas sin uso de transistores.
Estoy ocupando como me dijeron con
duty 1/10, osea 100 micro segundo prendido y 900 micro segundos apagado totalizando 1 mili segundo.
lo que pasa es que ahora el brillo varia, es decir prender con poco luminosidad y se va haciendo mas brilloso hasta que llega al punto mas brilloso y vuelve a bajar el brillo y así sucesivamente pero de manera algo rápida, entre que empieza en poco brillo y llega al máximo brillo y vuelve a empezar ha de ser como 500 milisegundo aproximadamente, algo rápido pero si se llega a notar como va variando ese brillo.

 #include <TimerOne.h>
void setup() {
  pinMode(2,OUTPUT);pinMode(3,OUTPUT);pinMode(4,OUTPUT);pinMode(5,OUTPUT);pinMode(6,OUTPUT);pinMode(7,OUTPUT);pinMode(8,OUTPUT);pinMode(9,OUTPUT);pinMode(10,OUTPUT);pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);pinMode(13,OUTPUT);pinMode(22,OUTPUT);pinMode(23,OUTPUT);pinMode(24,OUTPUT);pinMode(25,OUTPUT);pinMode(26,OUTPUT);pinMode(27,OUTPUT);pinMode(28,OUTPUT);pinMode(29,INPUT);
  pinMode(30,OUTPUT);pinMode(31,OUTPUT);pinMode(32,OUTPUT);pinMode(33,OUTPUT);pinMode(34,OUTPUT);pinMode(35,OUTPUT);pinMode(36,OUTPUT);pinMode(37,OUTPUT);pinMode(38,OUTPUT);pinMode(39,OUTPUT);
  pinMode(40,OUTPUT);pinMode(41,OUTPUT);pinMode(42,OUTPUT);pinMode(43,OUTPUT);pinMode(44,OUTPUT);pinMode(45,OUTPUT);pinMode(46,OUTPUT);pinMode(47,OUTPUT);pinMode(48,OUTPUT);pinMode(49,OUTPUT);
   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;
}

este es mi código utilice directamente la librería TimerOne, para llegar a ser un poco mas preciso en mis tiempo.
aquí solo estoy haciendo pruebas para ver que funcionara por lo que es el código completo de mi prueba. cuando este bien ya lo adaptare a mi código final que anteriormente les mande.
me podrían decir si estoy bien o no y en que estoy mal y que podría mejor.
muchas gracias por su atención