Sida 1 av 1
åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 16:44:55
av Senil
Tjo.
Försöker få till så jag jag kan skriva in ä och ö (å finns inte med i charmappen

) på min HD44789 kompatibla display. Enligt
teckentabellen
så är ä = 225 och ö = 239.
enligt ascii-tabellern så är lilla ä = 132 och lilla ö = 148
Så jag försöker kolla om namnet jag har skickat till arrayen buf[] innehåller ä eller ö (första bokstaven i buf[] är ett litet L för att den ska veta att resten av datat ska till displayen)
Kod: Markera allt
lcd.setCursor(0, 1);
for (j = 1; j < buflen; j++) {
if ( buf[j] == 132) {
lcd.print(225, BYTE);
}
if ( buf[j] == 148) {
lcd.print(239, BYTE);
}
lcd.print( buf[j] );
}
Dock får jag inte if-satserna att trigga... :.(
Vad gör jag för fel ??
Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 16:51:46
av sodjan
> enligt ascii-tabellern så är lilla ä = 132 och lilla ö = 148
Inte enligt min ASCII tabell (ISO 8859-1 eller Latin-1).
http://www.asciitabell.se/
Det är ju ingen mening med att fråga varför if-satsen inte triggar
innan du faktiskt *VET* vad du har för tecken som du jämför med.
Så är du *säker* på att du har 132 och 148 ??
Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 17:10:24
av Swech
Måste det inte vara någon form av ELSE ?
annars körs väl alltid
lcd.print( buf[j] );
oavsett om det är ä eller ö ?? Men reserverar mig för riktigt dålig koll på C
Swech
Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 17:22:39
av sodjan
Jo, så är det nog också...
Om
buf[] är en temp area så skull man kanske kunna göra något i denna stil :
Kod: Markera allt
lcd.setCursor(0, 1);
for (j = 1; j < buflen; j++) {
if (buf[j] == 228) {buf[j] = 225}
if (buf[j] == 246) {buf[j] = 239}
lcd.print(buf[j]);
}
Jag har även bytt ut 132 och 148 mot det jag *tror* det ska vara.
Men det måste naturligstvis verifieras mot den miljö där det körs.
225 och 239 har jag inte kollat upp, det antar jag stämer mot den
LCD modul som ska användas.
Slutligen, jag brukar försöka undvika svenska tecken på HD44780 LCD'er...

Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 17:39:46
av kimmen
Är buf[] en array av char eller är den något annat? Om den är signed (vilket char är på de flesta plattformar) så blir det problem när du försöker jämföra med tal större än 127.
Exempelvis så ger följande kodsnutt utskriften "nej" om char är av signed-typ vilket är det vanliga!
Kod: Markera allt
char test = 210;
if(test == 210)
printf("ja");
else
printf("nej");
Om du vill arbeta med positiva tal så kan det vara lämpligt att låta buf vara av "unsigned char" i stället. Ett annat alternativ är att skriva (char) före talen du ska jämföra med.
Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 17:41:25
av bearing
För att få ett "å" skulle du kunna göra ett eget tecken och spara i något av de 16 platser som är reserverade för sånt.
Re: åäö (äö iaf) på en HD44780
Postat: 10 januari 2010, 18:26:34
av Senil
Tack för hjälpen.
Sodjan - Kollade på asciitable.com Tänkte inte på att den inte stämmer med latin1. Att jag vill ha svenska tecken var bara för att se om jag kunde få till det.. Hade tänkt kört engelska från början..
Swech - Jo såklart behöver man en else, glömde skriva med den här..
Kimmen - Det funkade lite bättre (det funkade överhuvudtaget

) när charen blev unsigned om man säger så.. Tackar!
Bearing- Japp, har gjort det, men då jag ändå inte kunde jämföra tecken så hjälpte det inte så mycket. Men nu så
Re: åäö (äö iaf) på en HD44780
Postat: 6 februari 2010, 18:35:29
av oJsan
Tips: Om den sträng som ska skrivas ut (den som innehåller åäö) hanteras av kompilatorn så kan det vara lämpligt att även ange tecknen i if-satsen som 'ä' istället för 228. Ett "magic number" mindre i koden =)