Hay distintas formas por lo que eh visto de hacer una matrix de leds
Usando un multiplexado.
Por ejemplo de las filas, entonces cargas todos los datos de las columnas y encendes esa fila. Lo vi hacerse con simples registro de dezplazamiento o tambien ya con integrados para justamente ese uso. Ambos estan conectado en cadena y se les manda la señal por un protocolo serial como el SPI ( o manualmente ). Se activa la fila, se actualiza el valor y se continuas con la otra fila, asi continuamente. Recuerdo haberlo visto realizado con un PIC16f887 asi que imagino que sera mas facil hacerlo con el atmel, ya que permite el cambio de puerto en 2 ciclos del oscilador si no mal recuerdo
Sin multiplexar.
Aca en el foro vi sobre los WS2812 que son leds RGB y que ya poseen en si ese sistema de un registro de desplazamiento, con lo cual podrias con una simple salida actualizar todos sin tener que multiplexar nada. Al costo que si se quema uno dejen de andar todos los LEDs (si estan todos seguidos) Pero podrias usar casi todo un puerto para actualizar todas las lineas y llevaria 2 ciclos por bit * 24 bits * 40 leds = 10.5k ciclos para actualizar todo