Hallo ,
ich benutze eine etwas modifizierte Routine von Wolfgang Schwarz
( http://www.black-strom.de.vu ), der sowas für seine Uhr verwendet hat, schaut's euch mal an:

[Ich hab nur die relevanten Zeilen rauskopiert]

Code:
Dim Stelle_1 As Byte
Dim Stelle_2 As Byte
Dim Stelle_3 As Byte
Dim Stelle_4 As Byte

'Ausgänge:
Segment_a Alias Portb.0
Segment_b Alias Portb.1
Segment_c Alias Portb.2
Segment_d Alias Portb.3
Segment_e Alias Portb.4
Segment_f Alias Portb.5
Segment_g Alias Portc.0
Ziffer_1 Alias Portc.1
Ziffer_2 Alias Portc.2
Ziffer_3 Alias Portc.3
Ziffer_4 Alias Portc.4

Config Timer0 = Timer , Prescale = 1024
On Timer0 7segment
Const Timervorgabe = 200


Do
                                                      'Anfang Hauptschleife
 Stelle_1 = 4
 Stelle_2 = 3                   'was angezeigt werden soll ...
 Stelle_3 = 2
 Stelle_4 = 1
Loop                                                        'Ende Hauptschleife




'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' Interrupt-Routine für Ziffer ausgabe im 7 Segmentcode
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' Bei jedem Aufruf wir nur eine Ziffer ausgegeben, d.h nur eine Anzeige wird
' angesteuert. Die anderen bleiben dunkel. Bei jedem Aufruf wird eine Anzeige
' weitergeschaltet.
'
' Anzeigen anordnung
'
' 1111  2222   3333  4444
' 1  1  2  2   3  3  4  4
' 1111  2222   3333  4444
' 1  1  2  2   3  3  4  4
' 1111o 2222o  3333o 4444o
'
'                        ^-- Dezimalpunkt
'                      ^---- 4. Ziffer | Minute Low Wert  | Variable Zl_minute
'                ^---------- 3. Ziffer | Minute High Wert | Variable Zh_minute
'         ^----------------- 2. Ziffer | Stunde Low Wert  | Variable Zl_stunde
'   ^----------------------- 1. Ziffer | Stunde High Wert | Variable Zh_stunde

7segment:
  Timer0 = Timervorgabe
  If Temp_ziffer = 4 Then Temp_ziffer = 0                   'bestimmt die auszugebende Ziffer (1 bis 4)
  Incr Temp_ziffer                                          'bei jedem aufruf des Lable wir eine andere Ziffer ausgegeben


 Select Case Temp_ziffer                                    'welche Ziffer soll angesteuert werden
   Case 1 : Ziffer_1 = 0                                    '1. Ziffer
            Ziffer_2 = 1
            Ziffer_3 = 1
            Ziffer_4 = 1
            Bcd_aus = Stelle_1
   Case 2 : Ziffer_1 = 1                                    '2. Ziffer
            Ziffer_2 = 0
            Ziffer_3 = 1
            Ziffer_4 = 1
            Bcd_aus = Stelle_2
   Case 3 : Ziffer_1 = 1                                    '3. Ziffer
            Ziffer_2 = 1
            Ziffer_3 = 0
            Ziffer_4 = 1
           Bcd_aus = Stelle_3
   Case 4 : Ziffer_1 = 1                                    '4. Ziffer
           Ziffer_2 = 1
           Ziffer_3 = 1
            Ziffer_4 = 0
            Bcd_aus = Stelle_4
 End Select

 'Ermittelt aus der Segmentfolge-Tabelle den 7 Segmentcode für die auszugebende Zahl
 Select Case Bcd_aus
    Case 1 : Ausgang = Lookup(1 , Segmentfolge)
    Case 2 : Ausgang = Lookup(2 , Segmentfolge)
    Case 3 : Ausgang = Lookup(3 , Segmentfolge)
    Case 4 : Ausgang = Lookup(4 , Segmentfolge)
    Case 5 : Ausgang = Lookup(5 , Segmentfolge)
    Case 6 : Ausgang = Lookup(6 , Segmentfolge)
    Case 7 : Ausgang = Lookup(7 , Segmentfolge)
    Case 8 : Ausgang = Lookup(8 , Segmentfolge)
    Case 9 : Ausgang = Lookup(9 , Segmentfolge)
    Case 0 And Temp_ziffer = 1 : Ausgang = Lookup(10 , Segmentfolge)       'Nullstellenunterdrückung  bei der ersten Ziffer
    Case 0 And Temp_ziffer > 1 : Ausgang = Lookup(0 , Segmentfolge)       'wenn nicht erste Ziffer Null anzeigen
 End Select

'Ausgabe des 7 Segmentcodes (Invertierend [Not] bei Anz. mit gem. Anode)
  Segment_a = Ausgang.0                                     'Segment A
  Segment_b = Ausgang.1                                     'Segment B
  Segment_c = Ausgang.2                                     'Segment C
  Segment_d = Ausgang.3                                     'Segment D
  Segment_e = Ausgang.4                                     'Segment E
  Segment_f = Ausgang.5                                     'Segment F
  Segment_g = Ausgang.6                                     'Segment G
Return


End                                                         'Programm Ende



'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 7 Segmentcode - Tabelle
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' --A--
' |   |
' F   B
' |   |
' --G--
' |   |
' E   C
' |   |
' --D--
Segmentfolge:                                               'GFEDCBA / "1" Segment AN
Data &B0111111                                              '0
Data &B0000110                                              '1
Data &B1011011                                              '2
Data &B1001111                                              '3
Data &B1100110                                              '4
Data &B1101101                                              '5
Data &B1111101                                              '6
Data &B0000111                                              '7
Data &B1111111                                              '8
Data &B1101111                                              '9
Data &B0000000                                              'leeres Feld (zur Nullstellenunterdrückung)