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







Zitieren

Lesezeichen