Hallo Malte0815,
ich hatte nicht gesehen, dass du mich schon einmal direkt gefragt hattest.
If A = 3 Then A = 1
Portd = X(stelle(a))
A ist die Stelle, die aktuell eingeschaltet ist, in Stelle(A) steht der aktuelle Wert, der ausgegeben werden soll.
In X(Stelle(A)) steht der entsprechende Segment-Wert für diese Ziffer.
Wenn du jetzt 3 Stellen hast, dann musst du A bis 4 laufen lassen, bevor es wieder auf ein gesetzt wird. Also
If A = 4 Then A = 1
Das Gradzeichen würde ich am Anfang einmal fest in Stelle(3) schreiben, dann brauchst du sonst nichts mehr zu ändern. Also hinter
For I = 1 To 10
Read X(i)
Next I
einfach noch
Read Stelle(3) oder direkt
Stelle(3) = &H63
Hier mal alles zusammen (mit noch etwas Kosmetik):
Code:
$regfile = "M8def.dat"
$crystal = 4000000
'--------Segmente---------------
Config Portd = Output
Portd = 0 'anfangs alles aus
'----------Anode Display---------
Config Portb = Output
Digit1 Alias Portb.1
Digit2 Alias Portb.2
Digit3 Alias Portb.3
Portb = 0 'auch hier alles aus
'---------AD-Wandler Config-------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'--------Timer Config----------------
Dim Stelle As Byte 'Umschaltung zehner/einer/grad_zeichen
Stelle = 1 'start mit Zehner
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer_routine 'wird 4.000.000/64/256 ~ 244 mal pro Sekunde aufgerufen
Enable Timer0
Enable Interrupts
Dim Messung As Word
Dim Wert_stelle(3) As Byte
Dim I As Byte
Dim Temp As Word
Dim Segmente(11) As Byte
Restore Segment_daten
For I = 1 To 10
Read Segmente(i)
Next I
Wert_stelle(3) = &H63 '°fest auf Stelle 3
Do
Messung = Getadc(0) * 64
Messung = Messung / 101
Messung = Messung - 151
Messung = Messung
Temp = Messung / 10 'ganzahlige Division, also 47 / 10 = 4
Wert_stelle(1) = Temp + 1
Temp = Messung Mod 10 'Mod ergibt den Rest der Division, also bei 47 / 10 ist Mod = 7
Wert_stelle(2) = Temp + 1
Waitms 100 'hier vielleicht noch eine kleine Pause
Loop
End
Timer_routine:
Portb.stelle = 0 'Vorherige Stelle ausschalten
Portd = 0 'zusätzlich alle Segmente aus
Incr Stelle 'auf nächste Stelle umschalten
If Stelle = 4 Then Stelle = 1 'am Ende wieder zurück zur ersten Stelle
Portd = Segmente(wert_stelle(stelle)) 'Neue Segmente ausgeben
Portb.stelle = 1 'neue Stelle einschalten
Return
Segment_daten:
'gemeinsame Anode:
' 0 1 2 3 4 5 6 7 8 9
'Data &H3F , &H6 , &H05B , &H04F , &H066 , &H06D , &H07D , &H7 , &H7F , &H6F
'gemeinsame kathode:
' 0 1 2 3 4 5 6 7 8 9 Grad
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H00 , &H10 ', &H63
Lesezeichen