Hallo,
ich möchte 4 7-Segmentanzeigen multiplexen. Das Programm läuft prinziepjell - aber da ist ein Problem:
wenn ich 123 auf der Anzeige haben möchte steht dort 1233 und nach einigen Sekunden warten steht dort plötzlich 3233
wenn ich 1234 auf der Anzeige haben möchte steht dort 2100 und nach einigen Sekunden warten steht dort plötzlich 0100
Kann mir da jemand helfen?
Code:
'7Segmentanzeige mit 4 Anzeigen
$regfile = "ATtiny2313.dat" 'ATTiny2313
$crystal = 20000000 '20MHz Quarz
Ddrb = &B11111111 'PortB = Ausgang (PB0=A usw.)
Ddrd = &B1111111 'PortD = Ausgang (PD3=Anzeige1, PD4=A2, PD5=A3, PD6=A4)
Dim Y As String * 5 At &H70
Dim Z(5) As Byte At &H70 Overlay
Dim Led As Word
Dim X(5) As Byte
Dim Test As Integer
Dim Test2 As Integer
Dim Zaehler As Byte 'für LED Anzeige wählen...
Enable Interrupts
Do
'LED:::EZHT
Led = 123 'LED - Anzeigewert
For Test2 = 0 To 6 'Wert sichern .....
X(test2) = Z(test2)
Next Test2
For Zaehler = 3 To 6 'Zaehler = PortD 3-6 Anzeige wählen)
Test = X(zaehler)
Select Case Test
'Led-Segmente als Zahlen definieren:
Case 48 : Portb = 63 'NULL
Case 49 : Portb = 6 'EINS
Case 50 : Portb = 91 'ZWEI
Case 51 : Portb = 79 'DREI
Case 52 : Portb = 102 'VIER
Case 53 : Portb = 109 'FÜNF
Case 54 : Portb = 125 'SECHS
Case 55 : Portb = 7 'SIEBEN
Case 56 : Portb = 127 'ACHT
Case 57 : Portb = 111 'NEUN
Case 58 : Portb = 128 'DP -> geht das als PORT zu setzen???
Case Else : Portb = 0
End Select
'Anzeige auswählen???
Portd.zaehler = 1
waitus 100 'Zeit für jede Anzeige
'zum testen Waitms 500 'waitus 100 'Zeit für jede Anzeige
Portd.zaehler = 0
Next Zaehler
Y = Str(led)
If Z(4) = 0 Then 'Führende Nullen eliminieren
Do
Z(5) = Z(4)
Z(4) = Z(3)
Z(3) = Z(2)
Z(2) = Z(1)
Z(1) = 0
Loop Until Z(5) > 0
End If
Loop
Lesezeichen