Hi Martin et all,
Ich danke Dir für die Hilfe. Mein Problem war letztendlich, daß ich in der
Sub vergessen hatte die Werte mit Byval zu übergeben. Hier ist mein jetziger (funktionsfähiger ;o) Code:
Code:
$crystal = 16000000
$regfile = "M128def.dat"
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portb , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
Declare Sub Text_2_lcd(text As String , Byval Xloc As Integer , Byval Yloc As Integer , Byval Invert_it As Integer)
Dim Text As String * 40
Cursor Off
Cls
Gosub Menu
Do
Loop
End
Sub Text_2_lcd()
Dim X As Integer , Y As Integer
Dim X_start As Integer , Y_start As Integer , X_start_old As Integer , Y_start_old As Integer
Dim X_stop As Integer , X_stop_old As Integer , Y_stop As Integer , Y_stop_old As Integer
If Invert_it = 1 Then
Locate Yloc , Xloc ' WTF! First y and then x? No sensible person writes this way :( Geez!
ldi r24,&H81
rcall _GWrite_Cmd
Lcd Text
X_start = Xloc * 6
X_start = X_start - 6
X_start_old = X_start ' Store values in a new variable as we need to remove the black bar once the item should no longer be highlighted
X_stop = 6 * Len(text)
X_stop = X_stop + X_start
X_stop_old = X_stop
Y_stop = Yloc * 8
Y_stop_old = Y_stop
Y_start = Y_stop - 8
Y_start_old = Y_start
For X = X_start To X_stop
For Y = Y_start To Y_stop
Pset X , Y , Invert_it
Next Y
Next X
Else
ldi r24,&H80
rcall _GWrite_Cmd
For X = X_start_old To X_stop_old
For Y = Y_start_old To Y_stop_old
Pset X , Y , Invert_it
Next Y
Next X
Locate Yloc , Xloc 'WTF! First y and then x? No sensible person writes this way :( Geez!
Lcd Text
End If
End Sub
Menu:
Text = "Dieser Text ist Inverse"
Call Text_2_lcd(text , 3 , 7 , 1)
Text = "und diese wieder normal"
Wait 3
Call Text_2_lcd(text , 3 , 8 , 0)
Text = "inverse is sooooo cool"
Call Text_2_lcd(text , 3 , 9 , 1)
Return
Vielleicht kann es ja einer brauchen. Das Sub funzt folgendermaßen:
Call Text_2_LCD (Text,x,y,Inverse). Damit wird der Text auf dem
Display an der Position x,y angezeigt. Der Code prüft wie lange der
eigentliche Text ist und macht den schwarzen Balken, womit der Text
invertiert wird, nur so lang wie nötig. Ist der nächste Parameter eine 1,
dann wird der Text invers dargestellt. Gleichzeit merkt sich der Code,
wo invers dargestellt wurde. Sobald die nächste Zeile wieder normal
aussehen soll wird der schwarze Balken (Pset) entfernt. Sprich das
inverse wird aufgehoben.
Ich werde es jedenfalls nicht benutzen.
Das Ganze wird viel zu aufwendig. Ich wollte eigentlich ein Menu
aufbauen und dann mittels einem Rotary Encoders die Zeile, die
verändert werden soll, auswählen (==>invers darstellen) und beim
drücken des Encoder Knopf ins Untermenu springen bzw eine Funktion
ein oder ausschalten.
Das Ganze geht mit Zahlen vor dem Menupukt und einem Keypad als
Spannungsteiler verdrahtet (Abfrage über ADC) viel schneller. Den
Code hatte ich in fünf Minuten geschrieben ;o))
Schade, daß gerade bei solchen einfachen Sachen BASCOM-AVR so
eingeschränkt ist. Auch solche Sachen, daß beim Locate erst der
Y Parameter kommt und dann der X Parameter, ergeben für mich
keinen Sinn. Evtl könnte Mark mal die GLCD Library ein wenig aufpeppen.
viele internette Grüße,
Reinhard
Lesezeichen