Hallo Tryan,
unabhängig von der Programmiersprache würde ich zunächst mal in Frage stellen, jeden Punkt einzeln anzusteuern. Dass würde erstens zu viele Befehle benötigen (wie du bei dir siehst) und zweitens bestimmt zu ziemlichem Flimmern führen.
Wenn dein Portd immer eine Spalte freigibt, dann kannst du die 7 Punkte in einem Befehl schalten. Dazu würde ich für jedes Zeichen die fünf Spalten nacheinander durchgehen und die 5 Werte z.B. aus dem EEProm holen, wo du sie vorher für jede Zahl abgespeichert hast.
In Bascom würde das dann etwa so aussehen:
Code:
Dim Offset As Word
Dim Zeichen As String * 1
Dim Spalte As Byte
Dim Werte As Byte
Declare Sub Out_zeichen(byval Z As String)
Do
   Zeichen = "1"
   Call Out_zeichen(zeichen)
Loop

Sub Out_zeichen(byval Z As String)
   Offset = Asc(zeichen) - 49                               'sucht Werte für Zeichen "1" ab EEProm Adresse 1
   Offset = Offset * 5                                      'immer 5 Werte pro Zeichen
   Spalte = 1
   Portb = &B11111111
   Do
      Portd = 0                                             'zum Verhindern von Geisterbildern
      Incr Offset                                           'geht die 5 Werte durch
      Readeeprom Werte, Offset
      Portb = Werte                                         'lädt die Werte
      Portd = Spalte                                        'Gibt die Spalte frei
      Print Bin(werte)                                      'zum Testen
      Shift Spalte , Left                                   'erhöht auf die nächste Spalte
   Loop Until Spalte = 32                                   'stoppt nach der 5. Spalte
End Sub


$eeprom
Data &B00000000                                             'Zelle 0 im EEProm nicht benutzen!!!
Data &B11111111 , &B10111101 , &B10000000 , &B10111111 , &B11111111       '1
Data &B10111101 , &B10011110 , &B10101110 , &B10110110 , &B10111001       '2
Gruß

Rolf