Hi,
du solltest "I" nach dem auslesen löschen.
I=""
Abgesehen davon springst du zwar nach Zeile 1, danach aber nicht mehr zurück. Das heißt "Zeile2" wir immer auch noch ausgeführt.
Du schreibst dann die eine Zeile des Displays jeweils voll und hängst da deinen Text dran.
Der wird dann allerdings in den Zeichenbuffer geschrieben und nicht da, wo er hin soll.
Also noch ein Locate Befehl dazu um an die richtige Stelle zu schreiben
Code:
$regfile = "m8def.dat" 'Controller definieren'
$crystal = 3686400 'Taktfrequenz definieren'
$baud = 19200 'Baudrate definieren
Enable Interrupts
'LCD-Anschlüsse definieren, Ansteuerungsmodus 4 Bit / Pin '
Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.4 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0
Config Lcd = 24 * 2
Initlcd
Cursor Off
Cls
Dim I As String * 24
Dim T As String * 22
Dim B As String * 2
Do
Input , I 'max 24 zeichen einlesen
B = Left(i , 2) 'ersten beiden zeichen des String in Variable B schreiben
T = Mid(i , 3 , 22) 'ab drittem zeichen alles in Variable T schreiben
If B = "Z2" Then : Gosub Zeile1 : End If 'wenn ersten beiden zeichen = z1 oder z2, dann springe
If B = "Z1" Then : Gosub Zeile2 : End If
Print B 'testweise ausgabe der ersten beiden zeichen
Print T
I = "" 'testweise ausgabe der folgenden zeichen
Loop
End
Zeile1:
Upperline
Lcd " " 'beschreibe obere Zeile mit Leerzeichen zum Löschen
Locate 1 , 1
Lcd T 'gebe alles ab drittem zeichen aus
Return
Zeile2:
Lowerline
Lcd " "
Locate 2 , 1
Lcd T
Return
Hab's aber nicht getestet....
Gruß
Christopher
Lesezeichen