Benutzerdefinierte LCD-Zeichen in Strings

Markus

BASCOM-Experte
11. Jan. 2008
1.190
6
38
Lonsee
Sprachen
Hallo zusammen,

wie schon kurz in einem anderen Thread angekündigt kurz eine Hilfestellung zur Ausgabe von benutzerdefinierter Zeichen.

Die Aufgabenstellung entstand als ich mir in den Kopf gesetzt hatte für mein DOG-M LCD-Display 16x3 benutzerspezifische Zeichen für Hoch, Runter, Links, Rechts und Enter zu definieren und diese nicht nur mit dem sonst üblichen
Code:
LCD CHR(x)
Befehel auszugeben sondern diese auch innerhalb von String zu verarbeiten. Es gab einige Herren in einem anderen Forum die orakelt haben, dass es nicht funktioniert dabei ist die Lösung ganz simpel und einfach.

Ansatz:
Benutzerdefinierte Zeichen mit "Deflcdchar" definieren.In der Regel bieten die LCD-Displays dafür freie Speicherstellen.
Glücklicher Weise lassen sich diese Zeichen genau so ansprechen wie andere Zeichen des Zeichensatzes. BASCOM bietet hier für String ein Konstrukt {xxx} (Achtung: muss immer dreistellig sein) mit dem der Code eines Zeichens übergeben werden kann. Gemacht getan und die Lösung sieht so aus:

Code:
'------------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'------------------------------------------------------------------------------
$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40

$baud = 38400


' ----- Konfiguration LCD Display -----
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 3 , Chipset = Dogm163v5
'Config Portc = Output                                       ' nicht zwingend erforderlich
'Config Lcdbus = 4                                           ' nicht zwingend erforderlich
Initlcd
Waitms 100
Cursor Off Noblink
Cls

' ----- Definition benutzerdefinierter Zeichen -----
' Benutzerdefiniertes LCD-Zeichen Pfeil Hoch
Deflcdchar 1 , 4 , 14 , 31 , 21 , 4 , 4 , 4 , 32
' Benutzerdefiniertes LCD-Zeichen Pfeil Runter
Deflcdchar 2 , 4 , 4 , 4 , 21 , 31 , 14 , 4 , 32
' Benutzerdefiniertes LCD-Zeichen Pfeil Links
Deflcdchar 3 , 32 , 6 , 12 , 31 , 12 , 6 , 32 , 32
' Benutzerdefiniertes LCD-Zeichen Pfeil Rechts
Deflcdchar 4 , 32 , 12 , 6 , 31 , 6 , 12 , 32 , 32
' Benutzerdefiniertes LCD-Zeichen Enter
Deflcdchar 5 , 32 , 14 , 17 , 21 , 17 , 14 , 32 , 32


' ----- Teststring zusammenbauen -----
Dim Tempstring As String * 16
Tempstring = "A{001}B{002}C{003}D{004}E{005}"


' ----- Und raus damit zum Dsiplay -----
Locate 1 , 1 : Lcd "Hallo Welt"
Locate 2 , 1 : Lcd Chr(1) ; Chr(2) ; Chr(3) ; Chr(4) ; Chr(5)
Locate 3 , 1 : Lcd Tempstring

' ===== Hauptschleife =====
Do
   ' Tue nix :-)
Loop

' ===== Ende =====
End

Im Anhang findet Ihr eine Abbildung wie die Ausgabe der Beispieltexte auf meinem Display aussieht.

Vielleicht kann einer von Euch den Tipp ja brauchen :)

Übrigens: Für die Erstellung eigener Zeichen bietet die Oberfläche von BASCOM unter Tools den LCD Designer. Fertige Zeichen werden direkt als Source-Code in den Code übernommen. Jedoch gibt es leider keine Revers-Engineering-Funktion.

Grüße,
Ma
 

Anhänge

  • LCD.jpg
    LCD.jpg
    35,4 KB · Aufrufe: 180
Problem mit mehr als 8 benutzerdefinierten Zeichen

Hallo Markus,
habe deine Idee, die Deflcdchar-Zeichen in einem String mit s={xxx} abzulegen, als Grundlage für die Lösung meines Problemes genommen.

Kurze Info: Es soll der Zustand der Batterie in 6 UND der Zustand des Messwertspeichers in 7 Stufen mit einem Batteriesymbol bzw. einem "sich füllenden" Balkens aktuell angezeigt werden.

Frage: wie kann ich mehr als 7 Zeichen in Variablen ablegen?
Mein derzeitiger Code:

' Speicher-Symbol
Dim Speich_sym(8) As String * 1
Dim Ssym As String * 1

'Deflcdchar 0 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 31
Deflcdchar 1 , 17 , 17 , 17 , 17 , 17 , 17 , 31 , 31
Deflcdchar 2 , 17 , 17 , 17 , 17 , 17 , 31 , 31 , 31
Deflcdchar 3 , 17 , 17 , 17 , 17 , 31 , 31 , 31 , 31
Deflcdchar 4 , 17 , 17 , 17 , 31 , 31 , 31 , 31 , 31
Deflcdchar 5 , 17 , 17 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 6 , 17 , 31 , 31 , 31 , 31 , 31 , 31 , 31
Deflcdchar 7 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31

Speich_sym(1) = "{001}"
Speich_sym(2) = "{002}"
Speich_sym(3) = "{003}"
Speich_sym(4) = "{004}"
Speich_sym(5) = "{005}"
Speich_sym(6) = "{006}"
Speich_sym(7) = "{007}"

Cls

'Batterie-Symbol
Dim Batt_sym(7) As String * 1
Dim Bsym As String * 1
Cls
Deflcdchar 2 , 238 , 255 , 255 , 255 , 255 , 255 , 255 , 255
Deflcdchar 3 , 238 , 255 , 241 , 255 , 255 , 255 , 255 , 255
Deflcdchar 4 , 238 , 255 , 241 , 241 , 255 , 255 , 255 , 255
Deflcdchar 5 , 238 , 255 , 241 , 241 , 241 , 255 , 255 , 255
Deflcdchar 6 , 238 , 255 , 241 , 241 , 241 , 241 , 255 , 255
Deflcdchar 7 , 238 , 255 , 241 , 241 , 241 , 241 , 241 , 255
Batt_sym(2) = "{002}"
Batt_sym(3) = "{003}"
Batt_sym(4) = "{004}"
Batt_sym(5) = "{005}"
Batt_sym(6) = "{006}"
Batt_sym(7) = "{007}"

Cls

In der Auswertung wird dann je nach Batt-Spannung Bsym = Batt_sym(x) und Ssym = Speich_sym(x) zugeordnet und dann in der Hauptschleife mit Locate 2 , 1 : Lcd Bsym ; Ssym ;usw. aktuell zur Anzeige gebracht.

Nun wird mir 2-mal das Batteriesymbol gezeigt!!!
Wie kann ich die Symbole "mit festem Bezug" in die Variable bringen?
Wer kann helfen?

Danke im Voraus und freundliche Grüße
Mario
 
Hi Mario,

Kurze Info: Es soll der Zustand der Batterie in 6 UND der Zustand des Messwertspeichers in 7 Stufen mit einem Batteriesymbol bzw. einem "sich füllenden" Balkens aktuell angezeigt werden.

Frage: wie kann ich mehr als 7 Zeichen in Variablen ablegen?
das wird wohl nicht viel :eek:
Hast Du dir schon mal ein Datenblatt von einem HD44780 oder M50530 oder ...
angesehen ? (Also von den LCD-Controllern)
Die Controller unterstützen meiner Meinung nach NUR 8 User-Character.
Mehr Speicher ist dafür nach meiner Info nicht vorhanden.

Als Lösung ...
Sieh dir mal LCD4Linux (bei SourceForge.Net) an. Da werden Bargraphen
und alles mögliche andere auf Display angezeigt. Das geht nur, weil die
im laufenden Programm dauernd die User-Character umdefinieren.

Viel Spaß bei der Programmierung ;)

Gruß
Dino
 
Hi Mario + Dino!

Wie schon Dino beschrieben hat können nur insgesamt 8 Zeichen User defined werden (0-7) mehr geht über BASCOM zunächst nicht. Wenigstens ist mir kein BASCOM eigener Weg bekannt.

Und

Soweit mir bekannt arbeitet Deflcdchar nur mit Konstanten und nicht mit Variablen. bedeutet dass Du nicht zur Laufzeit variable Inhalte austauschen und dann Deflcdchar aufrufen kannst. Das dürfte nur "hard coded" gehen.

Aber

Du kannst Dir eine solche Schnittstelle zum LCD-Display selbst bauen. Du musst im Datenblatt Deines LCD-Controlelrs nachlesen wie man ihm die User defined Char "beibringt" und das ganze kannst Du in BASCOM selbst implementieren. Da kannst Du dann auch Variablen usw. verwenden und Dir Deine eigenen Methoden und Schnittstellen bauen. Aber auch mit diesen Methoden wird es Dir nur gelingen, bis zu 8 Zeichen gleichzeitig auf dem Display anzuzeigen. Es sei denn, Dein Controller bietet mehr Speicherplätze für benutzerdefinierte Zeichen.

Diese Aufgabe kannst Du auch mit Assembler erledigen. Es gibt hier im Forum einige Assm-Spezialisten die Dir sicherlich gerne bzgl. Assm weiterhelfen wenn Du Dich dafür entscheiden solltest aber wie gesagt, es sollte mit etwas Grundlagenforschung auch in BASCOM funktionieren.

Grüße,
Ma
 
Kurze Einmischung

Hallo zusammen,
unten ein ASM-Testprog, das userdefinierte Charakters erzeugt.
Bei der Initialisierungsroutine muß in der Sektion Entry Mode Set"Increment" gewählt werden.
Die Include-Files beinhalten die üblichen Initialisierungs- und Zeitschleifenroutinen, die ich einmal als allerseits bekannt voraussetze.

Jetzt könnten in weiteren "Pointern" die Pixelwerte als .db Tabellen-Anweisungen "ohne Nullterminierung" jedesmal umdefiniert werden, falls man immer neue Charakters benötigt. Dabei beachten, daß diese vor der Ausgabe exakt positioniert werden. Vor Senden von userdefinierten Charakters an das Display habe ich es mir zur Marotte gemacht, immer noch extra die Adresse exakt zuzuordnen im Kommandomodus.
Also, so viel, wie der Speicher hergibt, Tabellen-Strings reinschreiben, man könnte dann in
Unterprogrammaufrufen dann definieren, wann, wie, welcher Charakter umdefiniert werden soll.
Es können ja dann auch immer dieselben von den 8 freien ASCII-Adressen verwendet werden, nur nicht gleichzeitig, sondern hintereinander. Dann im Programm nach Wunsch "springen".
Es hat sich nur gezeigt, daß die Sprungweite beachtet werden muß. Mir RJMP geht es nicht unbegrenzt. Da muß dann wieder RCALL herhalten.

Gruß von Oskar01

Apropos "Nullterminierung": Die würde hier massiv stören, da ja auch der Wert hex 00 als Pixelwert gebraucht wird. Trick siehe Programm.
 

Anhänge

  • neuchar.asm
    10,5 KB · Aufrufe: 14
  • lcdinit.asm
    3,9 KB · Aufrufe: 9
  • verzoegerung.asm
    1,8 KB · Aufrufe: 8
Danke - Problem gelöst

Moin allerseits,
erstmal ein großes DANKESCHÖN für die schnellen Antworten und eure Mühe.
Ich habe mir schon gedacht dass nur max. 8 Zeichen möglich sind und dass Deflcdchar nur mit Konstanten arbeitet. Ich habe das Problem mittlerweile so gelöst dass ich die Spannung und den Speicherzustand ermittle und dann mit Select Case... auswerte und dabei die entsprechenden 2 Zeichen definiere und zur Anzeige bringe - funtioniert! :)

Also nochmal Danke!!

Gruß aus dem Erzgebirge
Mario
 
Hi Mario,

wenn Du eine Lösung hast die funktioniert dann kannst Du sie ja hier oder in einem neuen eigenen Thread vorstellen.

Grüße,
Markus
 
Hi Markus,

O.K. Sorry erstmal die "Verspätung" (Projekt musste fertig werden).
Und für alle die es interessiert - So hab' ich's gemacht:

Zu erst ind einer Funktion Ubatt ermitteln und danach Ubatt auswerten:

Select Case Ubatt

'Batterie voll
Case Is > 3.0 : Deflcdchar 1 , 238 , 255 , 255 , 255 , 255 , 255 , 255 , 255
'Batterie 3/4 voll
Case 2.76 To 3.0 : Deflcdchar 1 , 238 , 255 , 241 , 255 , 255 , 255 , 255 , 255
'Batterie ca. 2/3 voll
Case 2.51 To 2.75 : Deflcdchar 1 , 238 , 255 , 241 , 241 , 255 , 255 , 255 , 255
'Batterie halbvoll
Case 2.26 To 2.5 : Deflcdchar 1 , 238 , 255 , 241 , 241 , 241 , 255 , 255 , 255
'Batterie 1/4 voll
Case 2.0 To 2.25 : Deflcdchar 1 , 238 , 255 , 241 , 241 , 241 , 241 , 255 , 255
'Batterie leer
Case Is < 2.0 : Deflcdchar 1 , 238 , 255 , 241 , 241 , 241 , 241 , 241 , 255

End Select

Nun das erstellte Zeichen (1) in Variable übergeben:
' Aktuelles Symbol im Zeichen 1
Batt_status = 1

Jetzt habe ich es als Variable zur Verfügung und kann es mit z.B.:

Locate 2 , 1 : Lcd Chr(batt_status) ;usw...

(in der Main-Schleife ständig aktuell) auf dem Display darstellen.

Analog habe ich es mit der Speichergröße gemacht.
Die komplette Firmware ist auf z. Zt. 6 Geräten installiert und läuft momentan im Test... :)

Gruß aus dem Erzgebirge
Mario
 
Hallo Mario!

Ist doch eigentlich eine nette und einfache Idee, das Zeichen via "Select Case" neu zu definieren. :)


Was mir persönlich nicht gefällt und ich auch nicht wirklich verstehe ist das hier:
Nun das erstellte Zeichen (1) in Variable übergeben:
' Aktuelles Symbol im Zeichen 1
Batt_status = 1

Jetzt habe ich es als Variable zur Verfügung und kann es mit z.B.:

Locate 2 , 1 : Lcd Chr(batt_status) ;usw...

Warum kannst du später nicht auch "Locate 2 , 1 : Lcd Chr(1)" verwenden? :hmmmm:
Es müsste doch das selbe Ergebniss bei raus kommen..... oder habe ich etwas übersehen?

Letztlich ist die Variable "Batt_status" doch immer 1 ! :hmmmm:
Oder wechselst du das Symbol an einer anderen Stelle im Programm?

Gruß,
Cassio
 
Hallo Cassio,
Du hast völlig recht! Es ist das Gleiche. Batt_status ist immer das Zeichen Nr. 1 - das könnte ich am Anfang einmal festlegen.
Ich muß dazu sagen, dass das Programm "historisch gewachsen" ist und ich an diesem Projekt nur weiterarbeite.
Mein "Vorgänger-Programmierer" kam mit Deflcdchar 2 - 7 aus.
Deshalb hat er diese Variante gewählt:

Code:
' Definition der Zeichen:
Deflcdchar 2 , 238 , 255 , 255 , 255 , 255 , 255 , 255 , 255
Deflcdchar 3 , 238 , 255 , 241 , 255 , 255 , 255 , 255 , 255
Deflcdchar 4 , 238 , 255 , 241 , 241 , 255 , 255 , 255 , 255
Deflcdchar 5 , 238 , 255 , 241 , 241 , 241 , 255 , 255 , 255
Deflcdchar 6 , 238 , 255 , 241 , 241 , 241 , 241 , 255 , 255
Deflcdchar 7 , 238 , 255 , 241 , 241 , 241 , 241 , 241 , 255

' Laufende Ermittlung und Auswertung der Batteriespannung:
   Select Case Ubatt                                        'Zeichenselectieren
          Case Is > 3.0 : Batt_status = 2                    'Batterie voll
          Case 2.76 To 3.0 : Batt_status = 3                 'Batterie 3/4 voll
          Case 2.51 To 2.75 : Batt_status = 4                'Batterie halbvoll
          Case 2.26 To 2.5 : Batt_status = 5
          Case 2.0 To 2.25 : Batt_status = 6                 'Batterie 1/4 voll
          Case Is < 2.0 : Batt_status = 7                    'Batterie leer
   End Select

' Letztendlich die Anzeige der Batteriespannung:
Locate 2 , 1 : Lcd Chr(batt_status) ;usw...

Um so wenig wie möglich zu ändern und auch der Übersicht wegen habe ich das so gelassen. Außerdem ist (für mich) die Arbeit mit Variablen eindeutiger - ich sehe gleich welches Zeichen ich anzeigen lasse...;)

Gruß aus dem Erzgebirge
Mario
 
Um so wenig wie möglich zu ändern und auch der Übersicht wegen habe ich das so gelassen. Außerdem ist (für mich) die Arbeit mit Variablen eindeutiger - ich sehe gleich welches Zeichen ich anzeigen lasse...;)

Hallo Mario!

Dann verstehe ich auch dein Vorgehen. ;)
Allerdings verstehe ich das mit dem "Sehen", welches Zeichen angezeigt wird, nicht so richtig. :hmmmm:

Welches Zeichen du gerade anzeigen lässt, kannst du an der Variable auch nicht sehen, weil "Batt_status" immer 1 ist. ;)

Wenn du dir im Programm einen Kommentar machst:
' Chr(1) = Batterie_Status
bleibt für dich das Sonderzeichen doch auch immer nachvollziehbar und du musst keinen Byte Speicher für eine weitere Variable (Batt_status) reservieren.

Ganz leuchtet es mir also nicht ein, warum man extra eine eigene Variable nuten muss, um immer eine 1 zuzuweisen.
Aber wenn es dich glücklich macht..... ;)

Kannst dir ja für das nächste Mal merken, dass du an der Stelle etwas "direkter" vorgehen kannst. :)

Gibt es denn nun auch mal ein Bild, von den netten Zeichen hier zu bewundern? ;)

Gruß,
Cassio
 
Hallo Cassio,
Welches Zeichen du gerade anzeigen lässt, kannst du an der Variable auch nicht sehen, weil "Batt_status" immer 1 ist.
Naja, den Zustand der Batterie als Zeichen kann ich zwar nicht sehen (der interessiert mich aber auch nicht im Code) aber ich kann die verschiedenen Zeichen (Batterie, Speicher etc.) eindeutiger im momentanen Code nachvollziehen bzw. weniger verwechseln, besonders wenn das Projekt aus mehreren Modulen besteht und mann auch nach längerer Zeit mal wieder was ändern will etc. Ich denke, es erhöht die Lesbarkeit...:)
Wenn du dir im Programm einen Kommentar machst:
' Chr(1) = Batterie_Status
bleibt für dich das Sonderzeichen doch auch immer nachvollziehbar und du musst keinen Byte Speicher für eine weitere Variable (Batt_status) reservieren.
Das könnte ich auch machen. Aber über meine "Speichervergeudung" habe ich mir noch gar keinen Kopp gemacht - solang man genug Speicher hat...;)
Kannst dir ja für das nächste Mal merken, dass du an der Stelle etwas "direkter" vorgehen kannst.
Werde ich tun...:yes4:
Gibt es denn nun auch mal ein Bild, von den netten Zeichen hier zu bewundern?
Habe im Anhang mal ein paar Bilder getan...

Gruß aus dem Erzgebirge
Mario
 

Anhänge

  • Symbol_Batt_leer.jpg
    Symbol_Batt_leer.jpg
    25,3 KB · Aufrufe: 43
  • Symbol_Batt_Halbvoll.jpg
    Symbol_Batt_Halbvoll.jpg
    25,5 KB · Aufrufe: 33
  • Symbol_Batt_Voll.jpg
    Symbol_Batt_Voll.jpg
    25,6 KB · Aufrufe: 30
  • Speicher_12_Prozent_belegt.jpg
    Speicher_12_Prozent_belegt.jpg
    25,1 KB · Aufrufe: 32
  • Speicher_75_Prozent_belegt.jpg
    Speicher_75_Prozent_belegt.jpg
    25,3 KB · Aufrufe: 33
.....aber ich kann die verschiedenen Zeichen (Batterie, Speicher etc.) eindeutiger im momentanen Code nachvollziehen bzw. weniger verwechseln....

Hallo!

Das hatte ich mir ja schon fast gedacht und dagegen ist auch nichts einzuwenden. ;)
Gerade in einem größeren Code macht dies natürlich Sinn!

Wenn es dir also nur um den "Namen" geht und der Wert immer fest ist, dann kannst du zu Beginn aber auch gleich eine Konstante definieren.
Kommt dann am Ende das Selbe bei raus und du siehst schon im Rumpf, was du definiert hast. :)

Denke mal, du kennst den Befehl "const" ?
Hier ein Beispiel für dein Programm:
Code:
Const Batt_status = 1


Kannst es dir ja auch für weitere Programme merken. ;)
Mit "Const" und "Alias" kann man fast jeden Code lesbarer und verständnisvoller machen.

Gruß,
Cassio
 
Deflcdchar mit Variablen

Hallo.

OK, ich bin Newbie und es klappt nicht immer so wie es soll, aber ich habe Oskar01's Assemblerprogramm adaptiert (ich hatte Stress, Variablen von Bascom ins Assemblerprogramm zu kriegen, und als ich es hatte, hat der Rest nicht mehr funktioniert...).

Im Anhang ist (ich hoffe das klappt, und ich hoffe auch, dass ich hier keine nicht vorhandenen Kompetenzen übertrete...) der Code für TinyPONG, ein PONG-Spiel, das in einer Zeichenzelle eines Displays spielt - also 8*5 Pixel. (90° gekippt)

Um es zu spielen, braucht man ein Display und Potis in ADC 0 und 1.

Am Ende der Datei befinden sich 2 Subroutinen, die Oskar01 bekannt vorkommen sollten.

Command setzt das Kommando. Aus irgendeinem Grund funktioniert es nur, wenn man die Variable Cmd auf 40H setzt, aber da das Display intern weiterzählt, dürfte das kein Problem darstellen - einfach 1*Command aufrufen, dann alle 8 (oder auch nur 1) Custom Char definieren.

Customchar übernimmt ein 8 Byte Array (Lcdb[]).

Ich habe es mit 3 Displays getestet und es funktioniert auf 2 davon.
Vom Aussehen her, würde ich sagen, dem Display sind 1 ms Wartezeit zu lange, aber ich hatte keine Lust auf NOP-Orgien. Vlt hat jemand anders Lust, das feinzutunen.

Ich hoffe, ich helfe mehr als ich nerve.

Gruß
Simon.
Ein Video zu TinyPONG ist auf YouTube.
 

Anhänge

  • tinypong.bas
    6,9 KB · Aufrufe: 27
Hallo Simon,
dein tinyPONG finde ich mal ne super Idee. Echt Klasse.
Mal schauen, ob ich das auf meinem Wintek 27x4 ans Laufen bekomme.

HBA
 
ich habe mich lange gewundert, warum Deflcdchar nicht funktionieren wollte,
jetzt klappt es. Hier mein Code:

Code:
Rem Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portg.1 , Rs = Portg.0   ' 4 Bit Modus

Config Lcdpin = Pin , Port = Portc , E = Portg.1 , Rs = Portg.0       ' 8 Bit Modus
Config Lcdbus = 8
Config Lcd = 20 * 4
Initlcd
Waitms 100
Deflcdchar 0 , 017 , 004 , 010 , 017 , 031 , 017 , 017 , 032          ' Ä
Deflcdchar 1 , 017 , 032 , 014 , 017 , 017 , 017 , 014 , 032          ' Ö
Deflcdchar 2 , 017 , 032 , 017 , 017 , 017 , 017 , 014 , 032          ' Ü
Deflcdchar 3 , 238 , 255 , 255 , 255 , 255 , 255 , 255 , 255          ' Batterie voll
Deflcdchar 4 , 238 , 255 , 241 , 255 , 255 , 255 , 255 , 255          ' Batterie 3/4
Deflcdchar 5 , 238 , 255 , 241 , 241 , 255 , 255 , 255 , 255          ' Batterie 1/2
Deflcdchar 6 , 238 , 255 , 241 , 241 , 241 , 255 , 255 , 255          ' Batterie 1/4
Deflcdchar 7 , 238 , 255 , 241 , 241 , 241 , 241 , 241 , 255          ' Batterie leer
Cls

Cursor Off Noblink



Lcd Chr(0) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(4) ; Chr(5) ; Chr(6) ; Chr(7); ' ÄÖÜ und Batteriezeichen
Locate 2 , 1
Lcd Chr(225) ; Chr(239) ; Chr(245) ; Chr(226) ' die kleinen Sonderzeichen äöüß
Locate 3 , 1
Lcd "das sind die"
Locate 4 , 1
Lcd "Sonderzeichen"

 Wait 5

es ist ein EA W204B-NLW

seltsamerweise wird auf Chr 8-15 noch mal die Zeichen von 0-7 angezeigt, macht aber nix
 
Config Lcdbus ist falsch.
Bitte nicht weiter kopieren, einfach weglassen.

seltsamerweise wird auf Chr 8-15 noch mal die Zeichen von 0-7 angezeigt, macht aber nix
Weil das LCD nur 8 Speicherplätze hat

SickBoy
 
Die Chars(8..15) sind identisch mit den Chars(0..7).
Allerdings nicht zwangsweise. Ich hatte mal ein Display (ich weiß leider nicht mehr welches), da waren die 8..15 ebenfalls wie 0..7, aber inventiert.
Vielleicht eins der nicht dokumentierten Features der "kompatible" Chips, ähnlich wie der Spigelschrift.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)