Vom Wald sieht' man nix, überall stehen Bäume rum !
Also, sagen wir mal: (ich weiß nicht, ob das jetzt mit deinen Pins so stimmt)
Code:
1. MID is nicht so gut, weil da ja wieder ein string rauskommt. Besser is:
dim Instring  as string * 4
dim onechar(4) as byte at Instring overlay
2. Isses so ?  
PORTD --> Segmente
PORTB.0 --> Einer       ' ? 
PORTB.1 --> zehner
PORTB.2 --> hundert
PORTB.3 --> tausend
3. Geht aber besser mit Maske als über Pin-Nummer
dim charmsk as byte   

4. Arbeiten geht besser von tausend-->einer (dadurch kannst du später mal auch führende Nullen unterdrücken)
dim charidx as byte   ' von 1 - 4   
5. Hilfsbyte
dim E   as byte   ' das aktuelle Zeichen 

Auf geht's:
'-----------------------------------------------------------------
      Instring  = "3465"
      charmsk = 8                 '(= pin.3)
      for charidx = 1 to 4
            PORTD = charmsk      ' kathode aufdrehen
            E = onechar(charidx)  '  ~ mid(instring, chardx, 1) 
            E = E AND &H0F         ' Reduzieren auf 0-9
            on e gosub 0,1,2,....... ' kennst du schon 
            shift charmsk, right, 1  ' nächste Kathode 
      next