Aumento de brillo en leds multiplexados

El Timer que vas a usar es uno solo, no importa cual. Imagina que fuera Timer1 por elegir uno.
La frecuencia de trabajo puede ser por ejemplo 1Khz, pero en 1Khz o sea cada 1 mseg tu decides que hacer con tus leds. Cuento 7x7 leds.
Definirás un ciclo de trabajo, uno que te de ese pico de corriente respetando el Area de funcionamiento seguro del LED.
Olvidé un dato importante. Los 200mA dice que deben aplicarse asi
*Pulse width 0.1msec duty 1/10
Un ancho de pulso de 100 useg con un ciclo de trabajo del 10%.
Así que tienes 100useg en ON y 900 useg OFF para totalizar 1 mseg o sea 1Khz.

Se fija el timer del Arduino, y cuando se produce una interrupción se ejecuta la rutina del Timer que actualizas los puertos de todos los leds.
En todo momento tu solo dirás si se deben encender o apagar el bit de cada puerto.
Tal como ya lo haces en tu código.
Igualmente hay que hacer cuentas porque como usas los 595 que son por desplazamiento hay que considerar que todo lleva tiempo.
Estoy pensando en voz alta. si me permitís y puede que la frecuencia deba ser mayor para garantizar el barrido serial de todos los leds, digamos son 7 tramas.
Se debe garantizar esos 100useg en cada LED y no mas.