Ich spiele gerade mit einer gemultiplexten 7-Segmentanzeige herum. Ich möchte im Endeffekt eine 4stellige Variable auf die Anzeige bekommen.

Bild hier  


(PortD setzt die Segmente, PortB.0-3 die gemeinsamen Kathoden)


...aber der Code ist gruselig

Die Einer-Stelle wird (vorerst fest) gesetzt, springt in eine Sub, die Kathode für die erste Stelle wird dort gesetzt, nach Zahlvergleich wieder Sprung in eine andere Sub, wo die entsprechenden Segmente gesetzt werden, danach wird die Kathode wieder ausgeschaltet

Zehner-Stelle wird gesetzt......usw.


Das Prinzip ist mir klar und funktioniert auch...aber laut eigener Betrachtung viel zu umständlich. Hat Jemand `nen Tipp für mich für Vereinfachung ?

Code:
$regfile = "m8def.dat"
$crystal = 8000000


Config Portd = Output
Config Portb = Output


Dim E As Byte                                               'einer
Dim Z As Byte                                               'zehner
Dim H As Byte                                               'hunderter
Dim T As Byte                                               'tausender
Dim X As Byte                                               'Zeit (ms), wielange Kathoden ein
X = 1


Do                                                                
E = 6                                                          'Beispielzahl Einer
Gosub E:
Z = 5                                                          'Beispielzahl Zehner
Gosub Z:
H = 4                                                          'Beispielzahl Hunderter  
Gosub H
T = 7                                                           'Beispielzahl Tausender
Gosub T
Loop
End


E:
Portb.0 = 1                                                 'Kathode Einer ein
If E = 0 Then Gosub 0
If E = 1 Then Gosub 1
If E = 2 Then Gosub 2
If E = 3 Then Gosub 3
If E = 4 Then Gosub 4
If E = 5 Then Gosub 5
If E = 6 Then Gosub 6
If E = 7 Then Gosub 7
If E = 8 Then Gosub 8
If E = 9 Then Gosub 9
Waitms X
Portb.0 = 0                                                 'Kathode Einer aus
Return

Z:
Portb.1 = 1                                                 'Kathode Zehner ein
If Z = 0 Then Gosub 0
If Z = 1 Then Gosub 1
If Z = 2 Then Gosub 2
If Z = 3 Then Gosub 3
If Z = 4 Then Gosub 4
If Z = 5 Then Gosub 5
If Z = 6 Then Gosub 6
If Z = 7 Then Gosub 7
If Z = 8 Then Gosub 8
If Z = 9 Then Gosub 9
Waitms X
Portb.1 = 0                                                 'Kathode Zehner aus
Return

H:
Portb.2 = 1                                                 'Kathode Hunderter ein
If H = 0 Then Gosub 0
If H = 1 Then Gosub 1
If H = 2 Then Gosub 2
If H = 3 Then Gosub 3
If H = 4 Then Gosub 4
If H = 5 Then Gosub 5
If H = 6 Then Gosub 6
If H = 7 Then Gosub 7
If H = 8 Then Gosub 8
If H = 9 Then Gosub 9
Waitms X
Portb.2 = 0
Return                                                      'Kathode Hunderter aus


T:
Portb.3 = 1                                                 'Kathode Tausender ein
If T = 0 Then Gosub 0
If T = 1 Then Gosub 1
If T = 2 Then Gosub 2
If T = 3 Then Gosub 3
If T = 4 Then Gosub 4
If T = 5 Then Gosub 5
If T = 6 Then Gosub 6
If T = 7 Then Gosub 7
If T = 8 Then Gosub 8
If T = 9 Then Gosub 9
Waitms X
Portb.3 = 0                                                 'Kathode Tausender aus
Return





0:
Portd = &B00111111                                          '0
Return
1:
Portd = &B00000110                                          '1
Return
2:
Portd = &B01011011                                          '2
Return
3:
Portd = &B01001111                                          '3
Return
4:
Portd = &B01100110                                          '4
Return
5:
Portd = &B01101101                                          '5
Return
6:
Portd = &B01111101                                          '6
Return
7:
Portd = &B00000111                                          '7
Return
8:
Portd = &B01111111                                          '8
Return
9:
Portd = &B01101111                                          '9
Return