Deutsche Sonderzeichen beim LCD

Hier können Sie Hilfe erhalten.
Antworten
Heinrichs
Beiträge: 173
Registriert: Do 21. Okt 2010, 18:31

Deutsche Sonderzeichen beim LCD

Beitrag von Heinrichs » So 30. Dez 2012, 14:52

In vielen LCDs ist ein Hitachi 44780 - Controller eingebaut. Dieser kennt zwar die Sonderzeichen ä, ö, ü und ß, nicht jedoch Ä, Ö und Ü. Außerdem besitzen die Sonderzeichen bei dem Hitachi-Controller nicht den standardmäßigen ASCII-Code (ISO-8859-1). Der BASCOM-Compiler berücksichtig dies nicht. Dies hat zur Folge, dass Zeichenketten mit deutschen Sonderzeichen durch den BASCOM-Befehl lcd nicht korrekt auf dem Display angezeigt werden.

Code: Alles auswählen

	ASCII	Hitachi 
ß	223	&B11100010 = 226
Ä	196	(0)		 
ä	228	&B11100001 = 225
Ö	214	(1)
ö	246	&B11101111 = 239
Ü	220	(2)
ü	252	&B11110101 = 245


Im Folgenden wird die BASCOM-Prozedur lcd_umlaut dargestellt, welche dieses Problem behebt. Diese Prozedur stellt die über den String-Parameter s übergebene Zeichenkette mit allen deutschen Sonderzeichen korrekt auf dem Hitachi-Display dar. Dazu werden die einzelnen Zeichen der Zeichenkette nach und nach untersucht, gegebenenfalls umkodiert und dann mit der Original-lcd-Prozedur ausgegeben. Die Zeichen Ä, Ö und Ü werden vorher als user-defined character im Hitachi-RAM mit den Codes 0, 1 und 2 abgelegt:

Deflcdchar 0 , 21 , 4 , 14 , 10 , 31 , 17 , 17 , 32 ' Ä
Deflcdchar 1 , 17 , 14 , 17 , 17 , 17 , 17 , 14 , 32 ' Ö
Deflcdchar 2 , 10 , 32 , 17 , 17 , 17 , 17 , 14 , 32 ' Ü

Die Prozedur sieht dann so aus:

Code: Alles auswählen

Sub Lcd_umlaut(s As String)
  Local I As Byte
  Local Buchstabe As String * 1
  Local Code As Byte
  For I = 1 To Len(s)
    Buchstabe = Mid(s , I , 1)
    Code = Asc(buchstabe)
    If Code = 223 Then Code = &B11100010          'ß
    If Code = 228 Then Code = &B11100001          'ä
    If Code = 196 Then Code = 0                   'Ä
    If Code = 246 Then Code = &B11101111          'ö
    If Code = 214 Then Code = 1                   'Ö
    If Code = 252 Then Code = &B11110101          'ü
    If Code = 220 Then Code = 2                   'Ü
  Lcd Chr(code)
  Next I
End Sub

Antworten