Software-PWM würde ich nur dann nehmen, wenn ich Lowcurrent-LEDs nehmen und dann keine weiteren Bauteile mehr mit einbauen bräuchte.
Und ob das für 20 LEDs klappt weiss ich nicht. Ich würde dann im Programm immer ein Bit pro LED setzen und in einen Timer die Ausgänge ansteuern.
Der Timer müsste dann immer so schnell aufgerufen werden, das alle 20 LEDs gedimmt werden können, ohne das sie flackern.
Für Hell würde das wohl gehn. Aber wenn viele dunkel sind würde viel Zeit verloren gehen.

Man könnte ja auch alle LEDs über Widerstände direkt an die Spannung anschliessen. Somit sind alle LEDs wenn sie nicht hell sein sollen etwas gedimmt.
Und über einen zweiten Widerstand werden sie mit den Pins dann ganz hell geschaltet?!
Damit spart man sich die Zeit für die PWM.