Das multiplexen mehrerer 7-Segmentanzeigen war mir zu aufwendig, zumal die CPU ständig damit beschäftigt ist die Anzeige zu bedienen. Ich entschied mich mal den 74HC595 auszuprobieren. Das Hauptprogramm zählt einfach nur von 0000 hoch.
Beschreibung :

An den Ausgängen Q0-Q7 sind die 7Segment von A-G angeschlossen.

SDI ist der seriell Data in vbunden mit dem Portpin der in Bascom mit SER definiert ist. Geht bei SDO wieder raus nach SDI zu nächstem Chip-
SCK schiebt die daten mit jeder High Low Flanke durch den Chip.
RCK überträgt die daten an den Ausgang.

Hier die Bascom Quelltext:

74595

$regfile = "m16def.dat"
$crystal = 16000000
'Baud = 9600

'PC0 SCK
'PC1 SER
'PC2 RCK

Dim Uno As Byte
Dim Decem As Byte
Dim Centum As Byte
Dim Mille As Byte
Dim B As Byte
Dim Y As Byte

Sck Alias Portc.0
ser Alias Portc.1
Rck Alias Pinc.2
Start:
Y = &B01000000
For B = 0 To 3
Shiftout Ser , Sck , Y
Next B
Waitus 10
Rck = 0
Waitus 10
Rck = 1

Wait 5

Do
Gosub Anzeigen

Uno = Uno + 1
If Uno = 10 Then
Decem = Decem + 1
Uno = 0
End If

If Decem = 10 Then
Centum = Centum + 1
Decem = 0
End If

If Centum = 10 Then
Mille = Mille + 1
Centum = 0
End If
If Centum = 10 Then Goto Start
Loop

Anzeigen:
Y = Lookup(uno , Dta0)
Shiftout Ser , Sck , Y , 0 , 8 , 40
Y = Lookup(decem , Dta0)
Shiftout Ser , Sck , Y , 0 , 8 , 40
Y = Lookup(centum , Dta0)
Shiftout Ser , Sck , Y , 0 , 8 , 40
Y = Lookup(mille , Dta0)
Shiftout Ser , Sck , Y , 0 , 8 , 40
Waitms 2
Reset Rck
Waitms 2
Set Rck
Waitms 600
Return

End
Dta0:
Data , &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110 , &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111