Deutsche Sonderzeichen beim LCD
Verfasst: 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.
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
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