Anzeige Display

Gast #4859510
Lesenswert?
• ▲
▼
Hallo Gemeinde
möchte die Adresse eines Gerätes auf dem Diplay mit I2C darstellen. Dazu 
geb ich Daten ein:
1
#define adr1_w 0x40        // Adresse I2C 0x40
Die Anzeige soll damit kommen:
1
lcd_putcharlc(4,10,(adr1_w));

Habe das gleich auch mit

lcd_printlc
lcd_printlc_P
lcd_printlcc
lcd_printlcc_P

getestet. Kommt immer eine Fehlermeldung. Was ist falsch?
Ausgabe eines Textes geht ohne Probleme
Proramm in C Atmega
LG Pl
Gast #4859591
Lesenswert?
• ▲
▼
Benutze dieses Teil dazu:
1
bool lcd_printlcc(uint8_t line, uint8_t col, char *string) {  
2
    
3
    if (!lcd_gotolc(line, col)) return false;
4
      
5
  while(*string) {
6
    lcd_putchar(*string++);
7
    col++;
8
    if(col > LCD_COLS) {
9
      line++;
10
      col = 1; 
11
        if(line > LCD_LINES) {
12
          line = 1;
13
        }
14
            lcd_gotolc(line, col);
15
    }
16
  }
17
  return true;
18
}
#4859613
Lesenswert?
• ▲
▼
Zum Beispiel durch den Einsatz von sprintf(...). Diese Funktion wandelt 
eine Zahl in einen String um.
Du könntest Dir auch eine Funktion schreiben, die eine Ganzzahl in einen 
Hexstring wandelt oder eine Zahl (0..15) in (0..F).


Ohne zusätzliche Funktion sieht es Quick'n'Dirty so aus:
1
lcd_putcharlc(4,10,'0');
2
lcd_putcharlc(4,11,'x');
3
lcd_putcharlc(4,12,(adr1_w & 0xF0) < 0xA0 ? ('0'+(adr1_w>>4  )) : ('A'-10+(adr1_w>>4  )));
4
lcd_putcharlc(4,13,(adr1_w & 0x0F) < 0x0A ? ('0'+(adr1_w&0x0F)) : ('A'-10+(adr1_w&0x0F)));
#4859624
Lesenswert?
• ▲
▼
Paul schrieb:
> Was ist falsch?

Du rufst
1
bool lcd_printlcc(uint8_t line, uint8_t col, char *string)
mit
1
lcd_putcharlc(4,10,0x40);
auf und wunderst dich über einen Fehler ?

Erwartest du, daß eine 4-Zeichen-Folge "0x40" ausgegeben wird
oder erwartest du, daß ein @ ausgegeben wird ?

lcd_putcharlc wäre für die Ausgabe eines @ richtig,
du wolltest wohl lcd_putcharlcc aufrufen.

Besorge dir mal ein C Grundlagenbuch.

Aber nein, lcc passt nicht zu lc, an statt zu verschweigen was du 
verwendest, könntest du es wenigstens mal nennen:

https://www.mikrocontroller.net/attachment/280346/i2clcd.c

Aus einem
1
#define adr1_w 0x40
wird niemals eine 4-Zeichen Folge "0x40" ausgegeben.

Zumindest eine Umwandlung wie durch
1
char text[8];
2
text[0]='0';
3
text[1]='x';
4
itoa(adr1_w,text+2,16)
5
lcd_putcharlcc(4,10,text);
wäre nötig.
Gast #4861007
Lesenswert?
• ▲
▼
Habe den Code

Michael B. schrieb:
> char text[8];
> text[0]='0';
> text[1]='x';
> itoa(adr1_w,text+2,16)
> lcd_putcharlcc(4,10,text);

in mein Programm eingebaut. Gabe noch ein paar kleine Fehlermeldungen, 
geht jetzt aber super. Verwende es bereits in anderen Teilen meines 
Programmes. Sieht jetzt so aus:
1
char text[8];
2
lcd_putcharlc(4,10,'0');
3
lcd_putcharlc(4,11,'x');
4
itoa(adr1_w,text,16);
5
lcd_printlc(4,12,text);

noch das rein und es gibt keine Fehlermeldung:

#include "stdlib.h"

Danke für deine Hilfe.

LG Paul

PS. Musst nicht gleich mit einem C Buch drohen. Es gibt genug Schrott 
auf den Markt

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.