Har lyckats att få till ett programi C som skriver till en 16 x 2 teckens LCD, kopplad till en PIC16F877A. Problemet är att den skriver fel tecken för svenska tecken. Hur fixar man det på rätt sätt.
Du får nog kolla upp teckenuppsättningen för LCD:n.
Om tecknen saknas i teckenuppsättningen och inte bara finns på annan plats än du förväntar dig så brukar det gå att lagra nya tecken.
void
lcd_write(unsigned char c)
{
if (c > 127) { // ÅÄÖ åäö é \ $¤£$~ñ
if (c == 'å') c = 0x83; // å
else if (c == 'ä') c = 0x84; // ä
else if (c == 'ö') c = 0x94; // ö
else if (c == 'Å') c = 0x8f; // Å
else if (c == 'Ä') c = 0x8e; // Ä
else if (c == 'Ö') c = 0x99; // Ö
else if (c == 'ü') c = 0x81;
else if (c == 'Ü') c = 0x9a;
else if (c == 'é') c = 0x82;
else if (c == 'É') c = 0x90;
else if (c == '£') c = 0xe5;
else if (c == '~') c = 0xf8; // (divisionsc ./.)
else if (c == '§') c = 0x12;
else if (c == 'ñ') c = 0x9b;
else if (c == 'Ñ') c = 0x9c;
}
__delay_us(40);
LCD_DATA = ( ( c >> 4 ) & 0x0F );
LCD_STROBE();
LCD_DATA = ( c & 0x0F );
LCD_STROBE();
}
Det går givetvis bra att även göra detta i en switch-case sats om man gillar det bättre. if (c > 127) lade jag till bara för att den ska slippa gå igenom hela raden med ifsatser om det är ett 'vanligt' tecken.
Jag antar att du har nån slags ascii-lista i databladet till din display? Har du otur så har du den 'japanska' varianten, då finns nog inte alla svenska tecken med. Den västerländska tabellen för HD44780 ser ut så här: (jag ser nu att den tabellen inte stämmer med min: Min display har t.ex. 'ä' på 0x84, men denna har 'ä' på 0xe4 (1110 0100):
Senast redigerad av jesse 1 april 2011, 00:57:58, redigerad totalt 1 gång.
Tecknen finns i displayen, Ö har till exempel ascii-koden 239 och tecknet som skrivs ut som Ö har ascii-koden 246. Blir väl att göra en lista på dom Svenska tecknen då.
Jo, då stämmer nog den nedre tabellen med din display: 246 = 0xf6 hexadecimalt (översatte med 'kalkylatorn' i windows XP vilket är detsamma som 0b11110110 binärt (kan också översättas i 'kalkylatorn' ) och letar man upp den positionen så ser man ett 'Ö' där.
Man kan ju också roa sig med de andra grafiska tecknen om man vill:
Tittade i fel teckentabell. Endast gemenerna ö och ä fanns inprogrammerade i min LCD. Men det var inga problem för det fanns ett programmerbart RAM-minne med plats för 8 st egna teckenmatriser, så det var bara att programmera in de tecken som fattades, så nu finns åäöÅÄÖ också