Also, ihr mit den hohen Mehrwertsteuern,

die Propclock zeigt mir jetzt die Sekunden und Minuten an. Zeit kann nicht eingestellt werden, da ich keine Taster dran hab, sie zählt einfach hoch und zeigt die Minuten und Sekunden an.
Timer1 erzeugt mir jede Sekunde einen Interrupt, in dem hochgezählt wird. 1800 mal in der Sekunde kommt ein Timer0-Interrupt, in dem die nächste Spalte angezeigt wird. Das Ganze funktioniert nicht schlecht, ab und zu flackert die Anzeige, da sich die Interrupts in die Wege kommen. (eine Zahl bleibt zu lange stehen). Zudem sind die "Pixel" etwas lang, da meine Leds nicht grad dolle hell sind, ich betreibe sie direkt am AVR, kann also net zuviel Strom geben.
Aber sonst funktioniert. Hier ist mal der Code, für alle, die Interesse haben:

$regfile = "m8def.dat"
$crystal = 1000000

Dim A As String * 2 ' Wird gebraucht, um die Zahlen in einen String zu verwandeln
Dim I As String * 2 ' Eine Ziffer des Strings/der Zahl
Dim O As String * 2 ' Eine Ziffer des Strings/der Zahl
Dim Z As Byte ' Zählvariable für die Sekunden
Z = 0
Dim M As Byte ' Absolute Ziffer des Strings
Dim N As Byte ' Absolute Ziffer des Strings
Dim G As Byte ' Startzahl zweite Ziffer der ersten Zahl(Sekunden)
Dim U As Byte ' Startzahl erste Ziffer der ersten Zahl (Sekunden)
Dim W As Byte ' Stopzahl erste Ziffer der ersten Zahl (Sekunden)
Dim H As Byte ' Stopzahl zweite Ziffer der ersten Zahl (Sekunden)
Dim K As Byte ' Zählvariable, zur Bestimmung, wann die nächste Zahl dargestellt wird
Dim J As Byte ' Kopie von U
Dim E As Byte ' Kopie von W
Dim T As Byte ' Kopie von G
Dim P As Byte ' Kopie von H
Dim B As Byte ' Zählvariable für die Minuten
B = 0
Dim C As Byte ' Startzahl erste Ziffer der zweiten Zahl (Minuten)
Dim V As Byte ' Stopzahl erste Ziffer der zweiten Zahl (Minuten)
Dim F As Byte ' Stopzahl zweite Ziffer der zweiten Zahl (Minuten)
Dim S As Byte ' Startzahl zweite Ziffer der zweite Zahl (Minuten)
Dim Q As Byte ' Kopie von C
Dim R As Byte ' Kopie von V
Dim D As Byte ' Kopie von S
Dim Y As Byte ' Kopie von F
Dim Lk As Byte ' Variable für die For-Schleife für den Doppelpunkt
Dim Mn As Byte ' Variable für die Stelle im String, wo ausgelesen wird


Ddrb = &B11111111 ' Led-Ausgänge (ganzer Port B)
Ddrd.2 = 0 ' Lichtschranken-Eingang
Portd.2 = 1 ' Pullup vom Lichtschranken-Eingang angeschaltet

Dim X(51) As Byte ' In diesem Array werden die einzelnen Ziffern definiert

X(1) = &B11111111
X(2) = &B10000001
X(3) = &B10000001
X(4) = &B11111111
X(5) = &B00000000

X(6) = &B00100000
X(7) = &B01000000
X( = &B11111111
X(9) = &B00000000
X(10) = &B00000000

X(11) = &B01100111
X(12) = &B10001001
X(13) = &B10010001
X(14) = &B01100001
X(15) = &B00000000

X(16) = &B11100011
X(17) = &B10001001
X(1 = &B10011001
X(19) = &B11111111
X(20) = &B00000000

X(21) = &B00010000
X(22) = &B00110000
X(23) = &B01010000
X(24) = &B11111111
X(25) = &B00000000

X(26) = &B11100111
X(27) = &B10100001
X(2 = &B10100001
X(29) = &B10111111
X(30) = &B00000000

X(31) = &B00111111
X(32) = &B01001001
X(33) = &B10001001
X(34) = &B10000111
X(35) = &B00000000

X(36) = &B10000111
X(37) = &B10001000
X(3 = &B10010000
X(39) = &B11100000
X(40) = &B00000000

X(41) = &B11111111
X(42) = &B10010001
X(43) = &B10010001
X(44) = &B11111111
X(45) = &B00000000

X(46) = &B11110001
X(47) = &B10010001
X(4 = &B10010001
X(49) = &B11111111
X(50) = &B00000000


X(51) = &B00100100



On Timer0 Timerinterrupt ' Timer0 löst mit etwa 1800Hz aus. Bei jedem Interrupt wird die nächste Spalte angezeigt
Config Timer0 = Timer , Prescale = 8
Timer0 = 190
Enable Timer0
Enable Interrupts

On Timer1 Zeitinterrupt ' Timer 1 löst jede Sekunde aus und lässt die Sekunden/Minuten hochzählen
Config Timer1 = Timer , Prescale = 64
Timer1 = 49911
Enable Timer1

On Int0 Lichtinterrupt ' Bei diesem Interrupt wird die Anzeige neu aufgesetzt: Die momentanen Zahlen werden wieder neu dargestellt
Config Int0 = Rising
Enable Int0

Mn = 2

A = Str(b) ' Hier werden die Ziffern zerlegt und jeder Ziffer werden zwei Werte (Start-Stop) im Array zugeordnet
If B < 10 Then
U = 1
W = 6
Mn = 1
Goto Klein3
End If
O = Mid(a , 1 , 1)
N = Val(o)

U = N * 5
U = U + 1
W = U + 5

Klein3:
I = Mid(a , Mn , 1)
M = Val(i)

G = M * 5
G = G + 1
H = G + 5

Mn = 2
A = Str(z)
If Z < 10 Then
C = 1
V = 6
Mn = 1
Goto Klein4
End If
O = Mid(a , 1 , 1)
N = Val(o)

C = N * 5
C = C + 1
V = C + 5

Klein4:
I = Mid(a , Mn , 1)
M = Val(i)

S = M * 5
S = S + 1
F = S + 5

J = U ' Hier werden Kopien der Start-Stop-Werte angelegt.
E = W
T = G
P = H
Q = C
R = V
D = S
Y = F
K = 0


Do ' In der Hauptschleife wird nichts ausgeführt.
Loop

Timerinterrupt: 'Timer-Überlauf-Routine: Nächste Array Spalte anzeigen
Timer0 = 190


Portb = X(u) ' Die momentane Array-Spalte wird angezeigt
Incr U

If U = W Then ' Hier wird die zweite Ziffer der momentanen Zahl unter U und W gespeichert.
Incr K
U = G
W = H
End If

If K = 2 Then ' Hier wird die zweite Zahl unter U/W und G/H eingestellt.
Incr K
U = C
W = V
G = S
H = F
nop
nop
nop
nop
nop
For Lk = 1 To 5 Step 1 ' Hier wird der Doppelpunkt dargestellt.
Portb = X(51)
Next
End If

If K = 5 Then ' Wenn beide Zahlen dargesellt sind, wird der Port B abgeschaltet und die Interrupts von Timer1 gestoppt.
Portb = &B00000000
Disable Timer0
End If

Return

Lichtinterrupt: ' Lichtschranken-Interrupt-Routine: Im Array wieder von vorne beginnen

Timer0 = 190
Enable Timer0


U = J ' Die Variablen für die Zahlen werden aus den Kopien wiederhergestellt.
W = E
G = T
H = P

C = Q
V = R
S = D
F = Y

K = 0
Return

Zeitinterrupt: ' Wird jede Sekunde ausgelöst und lässt die Sekunden/Minuten hochzählen.
Timer1 = 49911
Incr Z

If Z = 60 Then ' Nach einer Minute wird zur Minuten-Variable eins dazugezählt
Z = 0
B = 0
Incr B
End If


Mn = 2

A = Str(b) ' Hier werden die neuen Start-Stopwerte der beiden Zahlen berechnet.
If B < 10 Then
U = 1
W = 6
Mn = 1
Goto Klein1
End If
O = Mid(a , 1 , 1)
N = Val(o)

U = N * 5
U = U + 1
W = U + 5

Klein1:
I = Mid(a , Mn , 1)
M = Val(i)

G = M * 5
G = G + 1
H = G + 5

Mn = 2
A = Str(z)
If Z < 10 Then
C = 1
V = 6
Mn = 1
Goto Klein2
End If
O = Mid(a , 1 , 1)
N = Val(o)

C = N * 5
C = C + 1
V = C + 5

Klein2:
I = Mid(a , Mn , 1)
M = Val(i)

S = M * 5
S = S + 1
F = S + 5

J = U ' Hier werden wieder die neuen Kopien angelegt, damit sie im Lichtinterrupt neu aufgesetzt werden können.
E = W
T = G
P = H
Q = C
R = V
D = S
Y = F
K = 0
Return
End 'end program