PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Deflcdchar



Stargate
04.03.2007, 12:09
Hallo Leute!

Ich melde mich mal wieder mit einer Frage zum Zeichendesiner ;-)

Also, mein Problem, auch mit Hilfedatei oder Forensuche(die zur Zeit kaputt ist), komme ich nicht weiter.

Ich wollte mir ein Paar Zeichen selbst generieren, so zum Beispiel ö , ü , ° und das g etwas verändern.

So, das Problem besteht jetzt darin, dass das zwas alles klappt, aber nur auf der ersten Displayhälfte. ich habe auch versucht vorher die jeweilige Displayhälfte anzuwählen, hat aber auch nicht geholfen.

So hier mal mein Code




'Winkelmessung mit dem Sensor MLX 90316 und Ausgabe der Gradanzeige
'über den Controler RN-MiniControl von Robotikhardware auf das Display
'Wintek 27 * 4 von Pollin
'>>>Besondere Lernleistung von Felix König<<<


$regfile = "m168def.dat" 'Controller definieren
$crystal = 16000000 'Quarzfrequenz
$baud = 9600 'Übertragungsrate in Baud
$hwstack = 32
$framesize = 32
$swstack = 32

'Die üblichen Definitionen bei Standardprogrammen auf Miniboard


'Hier kommt die Ausgabe auf das Display

Config Lcd = 40 * 4 'Bascom kennt keine Displays mit 27 * 4 Zeichen,
'daher 40 * 4 verwenden

Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3

'man achte auf die Ergänzung E2 für den 2. Steuerkontroller des Displays

Dim ___lcdno As Byte 'Systemvariable der LCD-Bibliothek



___lcdno = 0 'wählt den ersten Chip aus

Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °


Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen


___lcdno = 1 'auf Chip 2 schalten

Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °


Initlcd 'die beiden unteren Zeilen initialisieren
Cls 'die beiden unteren Zeilen löschen



___lcdno = 0 'wählt die obere Zeile aus

Locate 1 , 1 'schreibt in die erste Zeile an Position 1
Lcd " Besondere Lernleistun" ; Chr(1) ; " "; 'den Text in Anführungszeichen

Locate 2 , 1 'schreibt in die zweite Zeile an Position 1
Lcd " von Felix K" ; Chr(0) ; "ni" ; Chr(1) ; " 13 BGD" 'den Text in Anführungszeichen


Cursor Off 'unterdrückt den Cursor



___lcdno = 1 'wählt die beiden unteren Zeilen aus

Locate 1 , 1 'Wiederholt die Displayausgabe auf den unteren
Lcd "Windrichtun" ; Chr(1) ; " : "; '2 Zeilen

Locate 2 , 1
Lcd "Grad : "

Cursor Off 'unterdrückt den Cursor

'Hier kommt die Sensorwerterfassung

Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfiguriert den AD Wandler

Start Adc 'Startet den AD Wandler

Config Pinc.2 = Input 'ADC 2 an Ctrl

Dim Sensor As Long 'Deklariert "Sensor" als Long mit 4 Byte Zeichenvorrat
Dim Grad As Single 'Deklariert die Gradvariable "Grad" als Single
Dim Grad_mit_einer_kommastelle As String * 5


Do ' Beginnt die Abfrageschleife zur Werteerfassung

Sensor = 0 'Initialisiert die Variablen Sensor, Grad, Grad2
Grad = 0


Sensor = Getadc(2) 'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben

Grad = Sensor - 50 ' ((-50+Sensor)*360)/922
Grad = Grad * 360
Grad = Grad / 922 'Ergebnis als Gradwert mit Kommastellen



Grad_mit_einer_kommastelle = Fusing(grad , "#.#")


Print "Grad: " ; Grad_mit_einer_kommastelle

'Hierhin kommt die Anzeige der Ausgesprochenen Windrichtung (NOSW)

Select Case Grad

___lcdno = 1

Case Is > 337.5 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case 292.5 To 337.4 : Print "Nord/West" ;
Locate 1 , 16
Lcd "Nord/West"
Case 247.5 To 292.4 : Print "West" ;
Locate 1 , 16
Lcd "West"
Case 202.5 To 247.4 : Print "S" ; Chr(2) ; "d/West" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/West"
Case 157.5 To 202.4 : Print "S" ; Chr(2) ; "d" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d"
Case 112.5 To 157.4 : Print "S" ; Chr(2) ; "d/Ost" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/Ost"
Case 67.5 To 112.4 : Print "Ost" ;
Locate 1 , 16
Lcd "Ost"
Case 22.5 To 67.4 : Print "Nord/Ost" ;
Locate 1 , 16
Lcd "Nord/Ost"
Case Is < 22.4 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"

Case Else : Print "Error" ;
Locate 1 , 16
Lcd "Error"

End Select

Print " "

___lcdno = 1 'wählt die unteren 2 Zeilen aus

Locate 2 , 8
Lcd Grad_mit_einer_kommastelle ; Chr(3)



Waitms 500 '500 ms Wartezeit zwischen der Abfragewiederholung

___lcdno = 1 'Löschen der vorherig angezeigten Werte auf dem Display

Locate 1 , 16
Lcd " "
Locate 2 , 8
Lcd " "

Loop 'Ende der Ausführungsschleife
'und Sprung zum Anfang der Schleife


End 'Programmende

Hoffe dass es dafür eine Lösung gibt :-)

Viele Grüße Felix

Dnerb
04.03.2007, 14:23
Hallo Felix,

mach mal das InitLCD vor Deflcdchar.

Meines wissens muß der Displaycontroller Initialisiert werden bevor man etwas ins Zeichenram schreibt.

Gruß Dnerb

CR-Racing
04.03.2007, 14:42
Die Umlaute gibts schon, ü = CHR(245)

Dnerb
04.03.2007, 14:48
Hallo CR_Racing,

wenn ich mir den Code von Felix anschaue, dann nehme ich an das er das 27x4 von Pollin benutzt
Bist Du Dir sicher das dieses Display das ü im CharRom drin hat?
Die meisten Displays die ich hier herumliegen habe (>30Stk.) haben nur die Chicken-Foot-Prints in Rom. Und 2 Displays haben > 128 gar nichts.

Selbst wenn das Display das ü schon drin hat, löst das noch nicht das Funktionsproblem und das veränderte g. ;-)

Gruß Dnerb

helimike0705
04.03.2007, 15:18
probier das mal, schreibe es für dich um und lese den zeichensatz aus

'================================================= =====
' Anzeige des im LCD eingebauten ZEICHENSATZES
' durch die enthaltenen tasten
' schrittweise auf (+) und ab (-)
' mike köppl 28.10.2006
'================================================= =====
'Definition für 2313

$regfile "2313def.dat"

'Angabe der Taktfrequenz
$crystal = 4000000

'================================================= =====
'Konfigurationen für LCD Modul an Port B
'================================================= =====
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Lcdbus = 4
Cls
Cursor Off
Ddrd = &B00001100 'Eingänge für Tasten
Portd.2 = 1 '-pull up Widerstand für erste Taste aktivieren
Portd.3 = 1 '-pull up Widerstand für zweite Taste aktivieren

Dim I As Byte 'wert zuweisung
I = 0

Do

If Pind.2 = 0 Then
I = I + 1
End If

If Pind.3 = 0 Then
I = I - 1
End If

Cls
Locate 1 , 3
Lcd "CHR(" ; I ; ")" ; " = " ; Chr(i)
Locate 2 , 3
Lcd "Hexwert =" ; " " ; Hex(i)
Waitms 200

Loop

helimike0705
04.03.2007, 15:28
mal was anderes ,wie funzt das ,das man den code in diesem fenster
angezeigt bekommt,bei jedem versuch den ich mache wird der in diesem
fenste angezeigt mit der download-option rechts. wollt aber das andere.

Stargate
04.03.2007, 17:08
Hallo Felix,

mach mal das InitLCD vor Deflcdchar.

Meines wissens muß der Displaycontroller Initialisiert werden bevor man etwas ins Zeichenram schreibt.

Gruß Dnerb



GLANZLEISTUNG!!!!!!!

Wunderbar, vielen Dank, das war's *freu**freu**freu*

Das nenne ich eine wunderbare Hilfe, und auch vielen Dank für die anderen Antworten!
Bin echt froh dass ich in diesem Forum so viele Kompetente Leute zu finden sind :-)

Großes Lob

Güße Felix