Ich hab nochmal ein anderes Beispiel geschrieben, diesmal auch mit halben Segment:
Ich gehe mal davon aus dass Du die ADC-Werte ausgeben möchtest, also eine 10-Bit Auflösung, ansonsten musst Du eben anpassen.
Die Zeichen müssen allerdings anders definiert werden als im vorherigen Beispiel:
Zeichen 7 = volles Segment
Zeichen 6 = halbes Segment
da der String-Befehl mit dem Zeichen 0 nichts macht.
Meine Funktion Bargraph wird aufgerufen, welche einen String erzeugt (eben mit den chr(7) und/oder dem chr(6))
1. Parameter ist der Messwert (ohne Prüfung des Maximalwertes)
2. Parameter 0 oder 1 gibt als Print zusätzliche infos iber RS232 aus oder eben nicht (debugging).
Sicherlich könnte man das ganze noch optimierter schreiben,
aber es erfüllt seinen Zweck.
Hier das Teil:
Code:'----------------------------------------------------------------------------------------- 'name : LCD-Interface Messwert Darstellung.bas 'purpose : TEST: LCD 16 Chars, 2 Lines Bargraph Output 'micro : Mega32 'suited for demo : yes 'commercial addon needed : no 'programmer : darwin.nuernberg (www.roboternetz.de) '----------------------------------------------------------------------------------------- $regfile = "m32def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 9600 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space ' Die folgende Zeile entfernen wenn das Programm NICHT im Simulator laufen soll $sim ' entfernen wenn keine Bascom Simulation ' ============================================================================== Definitionen: Declare Function Bargraph(byval Messwert As Word , Byval Verbose As Byte) As String ' Messwert = eine ADC-Variable ' LCD einrichten Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6 ' $sim is used for faster simulation Deflcdchar 7 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' Volles Segment Deflcdchar 6 , 24 , 24 , 24 , 24 , 28 , 28 , 28 , 28 ' halbes Segment Config Lcd = 16 * 2 Initlcd ' ============================================================================== Hauptprogramm: Dim Mw As Word ' Messert (0-255) Dim X As Word Cls ' LCD Löschen For X = 0 To 1024 Locate 1 , 1 Lcd "Testwert = " ; X Locate 2 , 1 Lcd Bargraph(x , 0) Next X Waitms 500 Do Input "Messwert = " , Mw ' Zum Testen Eingabe erfordelich Cls ' LCD Löschen Locate 1 , 1 ' Pos. in 1. Zeile an 1. Stelle Lcd "BARGRAPH" ' Text auf das LCD Schreiben Locate 2 , 1 Lcd Bargraph(mw , 0) ' 2. Parameter = 0 keine Printausgaben Loop End 'end program ' ============================================================================== Function Bargraph(byval Messwert As Word , Byval Verbose As Byte) As String ' Messwert = eine 10-Bit-Variable Local W_zeichenlaenge As Word Local W_maxmesswert As Word Local W_valueganzessegment As Word Local W_valuehalbessegment As Word Local W_anzahlzeichen As Word Local W_anzahlhalbzeichen As Word Local W_habzeichenvorhanden As Word Bargraph = "" If Messwert >= 1 Then W_zeichenlaenge = 16 ' Zeichenlänge des Bargraph W_maxmesswert = 1024 ' Maximaler Wert (10 Bit) W_valueganzessegment = W_maxmesswert / W_zeichenlaenge W_valuehalbessegment = W_valueganzessegment / 2 W_anzahlhalbzeichen = Messwert / W_valuehalbessegment W_anzahlzeichen = W_anzahlhalbzeichen / 2 W_habzeichenvorhanden = W_anzahlhalbzeichen Mod W_anzahlzeichen If Verbose > 0 Then ' Nur Ausgabe wenn > 0 Print "Zeichen für Bargraph = " ; W_zeichenlaenge Print "Maximaler Wert = " ; W_maxmesswert Print "Angezeigter Messwert = " ; Messwert Print "Wert pro Segment = " ; W_valueganzessegment Print "Wert pro halb Segment = " ; W_valuehalbessegment Print "Anzahl Bargraph = " ; W_anzahlzeichen Print "Halbes Zeichen = " ; W_habzeichenvorhanden End If If W_anzahlzeichen > 0 Then ' Nur wenn ganze Zeichen ausgegeben werden sollen Bargraph = String(w_anzahlzeichen , 7) Else Bargraph = "" End If If W_habzeichenvorhanden > 0 Then Bargraph = Bargraph + Chr(6) End If End If End Function End







Zitieren

Lesezeichen