PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umlaute für LCD



dariegel
28.02.2011, 19:04
Abend zusammen,

ich würde gerne auf meinem KS0066-LCD Umlaute ausgeben. Die in der internen Zeichentabelle des LCD abgelegten Zeichen ä, ö, ü lassen sich problemlos anzeigen, indem ich die Codes 238, 239 und 245 übertrage.

Nun will ich, dass die Umlaute automatisch korrekt angezeigt werden, wenn ich einen String ausgebe, der ein oder mehrere dieser Umlaute enthält.
Bevor ich also ein Char-Array an das Display übermittle, möchte ich jedes Zeichen auf einen Umlaut prüfen und ggf. durch den entsprechenden internen LCD-Code ersetzen.

Eigentlich müsste es doch folgendermaßen funktionieren:


Sub LCD_WriteText_I2C(ByRef cText As Char)
Dim i As Integer

i = 0

'Übergebenes Char-Array ausgeben.
Do While cText(i) > 0
If cText(i) = "ä" Then
LCD_Write_I2C(1, 238)
Else
LCD_Write_I2C(1, cText(i))
End If

i = i + 1
End While
End Sub

Der Compiler schmeißt aber immer diesen Fehler:


Semantik Fehler - Operator '=' für Typ overflow nicht erlaubt


Was mache ich falsch?


Danke Euch.


Gruß

Hubert.G
28.02.2011, 19:22
In C würde es heißen : If cText(i) == "ä" Then
= ist ein Zuweisungsoperator
== ein Vergleichsoperator

Jaecko
28.02.2011, 20:01
In Bascom dürfte das mit 1 = schon stimmen.
Kannst du mal das komplette Programm zeigen, so dass man's auch mal kompilieren kann?

Vitis
28.02.2011, 20:55
cText mal als Char, mal als Array ... char? noch nie gesehn bei bascom, man lernt nie aus.
ByRef?

cText(i) = "ä" ... Bytewert oder was?

dariegel
01.03.2011, 18:39
Oh, Entschuldigung, sind hier in C-Basic, das Programm läuft auf ner C-Control PRO per I2C über einen PCF8574.

Hier etwas mehr Code:



Sub main()
I2C_Init(I2C_100kHz)
LCD_Init_I2C(abInitOptions)
LCD_Clear_I2C()

LCD_Locate_I2C(2, 1)
LCD_WriteText_I2C("Hälli hällo!")

End Sub

Sub LCD_WriteText_I2C(ByRef cText As Char)
Dim i As Integer

i = 0

'Übergebenes Char-Array ausgeben.
Do While cText(i) > 0
If cText(i) = "ä" Then
LCD_Write_I2C(1, 238)
Else
LCD_Write_I2C(1, cText(i))
End If

i = i + 1
End While
End Sub

Sub LCD_Write_I2C(bIsData As Byte, bData As Byte)
Dim bDataOut As Byte

'RS high setzen falls Datenausgabe gewünscht (bRS = 1).
If bIsData > 0 Then : bIsData = LCD_RS : End If

'*** High Nibble ***
bDataOut = bIsData Or (bData >> 4)
I2C_Out(bDataOut, 1)

'*** Low Nibble ***
bDataOut = bIsData Or (bData And 0x0F)
I2C_Out(bDataOut, 1)
End Sub

Sub I2C_Out(bData As Byte, bPulseE As Byte)
If bPulseE > 0 Then
I2C_Start()
I2C_Write(I2C_PCF_ADDR)
I2C_Write(bData Or LCD_EN)
I2C_Stop()

AbsDelay(1)
End If

I2C_Start()
I2C_Write(I2C_PCF_ADDR)
I2C_Write(bData)
I2C_Stop()
End Sub

dariegel
06.03.2011, 08:49
Oha, hier ist wohl durch die Forumsumstellung ein Beitrag verloren gegangen. :)
Also mit Verwendung des ASCII-Codes statt "ä" funktioniert es. Hätte ich auch drauf kommen können und ist ja nun eigentlich auch logisch. :idea::-b

Danke an den Verfasser des abhanden gekommenen Beitrags!

peterfido
06.03.2011, 14:55
Stimmt, mein Beitrag scheint weg zu sein. Auch vermisse ich einen anderen Beitrag von mir in einem anderen Thread...