Mein Vorschlag ist passend zu der DotMatrix in Deinem Bild.
Dort sind die Pins 1 - 3 - 10 - 7 - 8 die gemeinsamen Anoden der Spalten-LEDs.

Als Beispiel lege ich mal Pin 12 über einen Vorwiderstand an GND.
Dann an Pin 1 den Plus; welcher Punkt leuchtet ?
Jetzt den Plus an Pin 3, dann an Pin 10 ... 7 ... 8; welcher Punkt leuchtet jeweils ?
Jetzt Plus wieder an Pin 1.
Als 2. Beispiel die Pins 12 - 2 - 4 - 6 über Vorwiderstände an GND; welche Punkte leuchten ?
Den Plus von Pin 1 ab und die Pins 11 - 9 - 5 über Vorwiderstände an GND.
Jetzt den Plus an Pin 3; welche Punkte leuchten jetzt ?
Den Plus jetzt ganz schnell immer einen Pin weiter und den GND (über Vorwiderstände) abwechselnd an die Pins 12 - 2 - 4 - 6 und 11 - 9 - 5. Welche Punkte leuchten ? Was ergibt das für ein 'Bild' ?

Es darf immer nur einer der Pins 1 - 3 - 10 - 7 - 8 über den UDN2981A an Plus. Dazu reichen 3 Bits mit einem 3 zu 8 Dekoder. Das ergibt 8 Möglichkeiten, wovon nur 5 benötigt werden.

Am ULN2803A werden die Bits gesetzt, die in der Spalte leuchten sollen, wo aktuell der Plus anliegt. Das Ganze läuft dann sehr schnell ab, so daß sich ein stehendes 'Bild' ergibt. Das 'Bild' kann über die 7 Bits am ULN geändert werden.

Wenn Du das mit Schaltern machen möchtest, kannst Du aber kein 'Bild' erzeugen, es sei denn, Du kannst jede Millisekunde alle Schalter betätigen.
Wenn Du das nicht kannst, hast Du immer nur in einer Spalte die gewählten Punkte an. Mehrere Spalten gleichzeitig geht nicht, weil dann zwei und mehr LEDs über einen Vorwiderstand laufen und immer dunkler werden. Eine DotMatrix kann nur im Multplex-Betrieb betrieben werden.

Du benötigst 3 Bits für die Spalten-Auswahl und 7 Bits für die Reihen-LEDs. Macht zusammen 10.
Du kannst auch die 7 Reihen umschalten und die 5 Spalten-LEDs ansteuern. Dann brauchst Du 3 Bits für die Reihen-Auswahl und 5 Bits für die Spalten-LEDs. Macht zusammen 8.
Die Vorwiderstände kommen dabei an die Spalten-LEDs, also an den UDN2981A.