"Schönste" Lösung int und float rechtsbündig im LCD darzustellen

Gast #3910006
Hallo

ich habe ein Atmega2560 und ein LCD 204.
Ich will einen 12 Bit Analogwert rechtsbündig darstellen. am liebsten 
auch maximal 4 Zeichen. Mit der itoa funktion wird der String immer nur 
linksbündig im char array...

Meine erste Idee:
1
void itoa_(unsigned char stellen, int16_t zahl) {
2
  int i;
3
  char lcd_str[20]="";
4
  lcd_str[stellen]='\0';
5
  for(i=(stellen-1); i>=0; i--)
6
  {
7
    lcd_str[i]=(zahl % 10) +'0';     // Modulo rechnen, dann den ASCII-Code von '0' addieren
8
    zahl /= 10;
9
  }
10
  for(i=0;i<=(stellen-1);i++)
11
  {
12
    if(lcd_str[i]=='0')
13
    {
14
      lcd_str[i]=' ';
15
    }
16
    else
17
    {
18
      i=stellen;
19
    }
20
  }
21
}

Aber wenns was fertiges gibt was weniger speicher und zeit benötigt bin 
ich gerne für Vorschläge offen.
Persönliche Seite #3910116
Peter schrieb:
> Mit der itoa funktion wird der String immer nur linksbündig im char
> array...

Und? Länge des Strings bestimmen, diese von der Anzahl der gewünschten 
Stellen abziehen, und schon weißt Du, wieviele Leerzeichen Du vor dem 
String ausgeben musst, damit er rechtsbündig ist.

Und wenn das ein bisschen dauert: Macht nichts. Das ist eine Ausgabe für 
den Benutzer, also nichts, wo es auf das letzte Fitzelchen Zeit ankommt 
(wie z.B. bei Aktionen in einer ISR o.ä.).

Der Dein Gerät bedienende Mensch kann sowieso nicht mehr als eine 
bestimmte Anzahl von Ausgaben pro Zeit erfassen, daher ist's wurscht, ob 
Deine Ausgabe nun 2000 mal oder nur 500 mal pro Sekunde erfolgen kann 
...
Gast #3910846
1
char *
2
utodw(unsigned n, char *buf, int width)
3
{
4
    char *p = buf + width;
5

6
    *p = 0;
7
    while (p > buf) {
8
        *--p = '0' + n % 10; 
9
        n /= 10; 
10
        if (n == 0)
11
            while (p > buf)
12
                *--p = ' ';
13
    }   
14
    return p;
15
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.