Hallo,
ich habe eine 7 Segmentanzeige mit 5 Stellen (also 0-99999) im Multiplexbetrieb(softwaremultiplex über AT-MEGA
.
Nun möchte ich die führenden Nullen ausblenden also nicht "00123" sondern nur " 123".
mein Versuch war:
ganz links angefangen: wenn da eine "0" ist einfach den Transistor für die gemeinsame Anode abschalten - fertig (funktioniert!)
nun die 2. Zahl von links: wenn 1. & 2. Zahl = "0" dann auch diese gemeinsame Anode abschalten. Leider klappt das wegen dem Multiplexbetrieb nicht: es leuchtet ja genaugenommen immer nur eine "Ziffer".
Also habe ich das mit Merkern versucht: wenn Ziffer gleich 0 gem.Anode abschalten und Merker (Digi1) auf 1 setzen... funktioniert aber auch nicht in allen Fällen...
Aber ich glaube das Programm sagt mehr....
Code:
'-------------------------------------------------------------------------------
7seganzeige:
' Code 7 Segmentanzeige:
'-------------------------------------------------------------------------------
'Formatiere das Display
Wertstr = Str(wert)
Fivedigitdisplay = Format(wertstr , "00000") 'Nullen geben die Anzahl der Stellen an, damit die Stellen richtig gesetzt werden
' jeder Lauf durch die Hauptschleife zeigt ein anderes Digit
Incr Digit
Portb = 0 'Ghosting vermeiden
If Digit = 5 Then 'mache das , bis 5 erreicht ist
Digit = 0
End If
' addiere 1 zum Digitcounter, weil MID 1-basiert ist
Y = Digit + 1
' und hol das Digit, das wir brauchen
Wertstr = Mid(fivedigitdisplay , Y , 1)
'Anzeige auswählen
Tempbyte = 2 ^ Digit 'Tempbyte = 1,2,4,8,16
'Digitansteuerung auf portC: PC1-5
Umdreh = Tempbyte * 2 'Umdreh = 2,4,8,16,32
'Ansteuerung umdrehen für gemeinsame Anoden
Portc = Umdreh 'Port für die Stellen auswahl
'Führende Nullen entfernen:
'INFO:
'wertstr hat immer nur eine Ziffer und wechselt also nacheinander alle 5 Stellen durch!
'wenn wertstr = 0 ist dann wird nachgesehen, in welchem Digit (Stelle) wir uns befinden.
'wenn Digit = 0 -also die ganz linke Stelle- dann auf jeden Fall Portc.1 = 0 (Transistor der Stelle) abschalten
'Digit0 = 0 -> ist nur ein Merker für die folgenden Stellen d.h.
'wenn wertstr=0 dann fragen ob Digit=1 (also 2te Stelle von links) UND der Merker Digit0=0
'dann Transistor abschalten und weiteren Merker für diese Stelle setzen
'ZehnTausenderstelle
If Val(wertstr) = 0 Then 'Führende Null wegblenden
If Digit = 0 Then : Portc.1 = 0 : Digit0 = 0 'C.1=Digit Transistor
Else
Digit0 = 1
End If
End If
'Tausenderstelle
If Val(wertstr) = 0 Then 'Führende Null wegblenden
If Digit = 1 And Digit0 = 0 Then : Portc.2 = 0 : Digit1 = 0 'C.2=Digit Transistor
Else
Digit1 = 1
End If
End If
'Hunderterstelle
If Val(wertstr) = 0 Then 'Führende Null wegblenden
If Digit = 2 And Digit0 = 0 And Digit1 = 0 Then : Portc.3 = 0 : Digit2 = 0 'C.3=Digit Transistor
Else
Digit2 = 1
End If
End If
'Zehnerstelle
If Val(wertstr) = 0 Then 'Führende Null wegblenden
If Digit = 3 And Digit0 = 0 And Digit1 = 0 And Digit2 = 0 Then : Portc.4 = 0 : Digit3 = 0 'C.4=Digit Transistor
Else
Digit3 = 1
End If
End If
'Dieser Teil erledigt die Wandlung in 7 Segment Code
'Für Anzeigen mit gemeinsamer Anode
Select Case Val(wertstr)
Case 0 : Portb = 126 'NULL
Case 1 : Portb = 12 'EINS
Case 2 : Portb = 182 'ZWEI
Case 3 : Portb = 158 'DREI
Case 4 : Portb = 204 'VIER
Case 5 : Portb = 218 'FÜNF
Case 6 : Portb = 250 'SECHS
Case 7 : Portb = 14 'SIEBEN
Case 8 : Portb = 254 'ACHT
Case 9 : Portb = 222 'NEUN
'Case Else : Portb = 128 'mittleres Segment
Case Else : Portb = 226 '"F"
End Select
'Komma setzen
'If Portc = 2 Then Portb.0 = 1 '4 Kommastellen
'If Portc = 4 Then Portb.0 = 1 '3 Kommastellen
'If Portc = 8 Then Portb.0 = 1 '2 Kommastelle
If Portc = 16 Then Portb.0 = 1 '1 Kommastellen
Lesezeichen