Hilfe zu einem Programm

Gast #5402364
Lesenswert?
• ▲
▼
hallo,

Ich habe ein kleines menü für das LCD display geschrieben.
Ich verwende das MY avr MK2 board mit atmege 8.
Meine frage wäre, wie ich das Blinken(aktualisiern) des Display weg 
bekomme.
Hier der Programm code

  while(1){

  if (!(PINB & (1<<PB0)))
    {
      zaehler++;
    }

    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
    }




  if (zaehler == 0)
  {
  lcd_clear();
  lcd_write_s("Drahtmessung");
  if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      _delay_ms(300);
    }
  }
    else if (zaehler == 1)
    {
    lcd_clear();
    lcd_write_s("Messung Starten");
    if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      _delay_ms(300);
    }

    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
      _delay_ms(300);
    }

    }
      else if (zaehler == 2)
      {
      lcd_clear();
      lcd_write_s("Messung Beenden");
      if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      _delay_ms(300);
    }

    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
      _delay_ms(300);
    }

      }
        else if (zaehler == 3)
        {
        lcd_clear();
        lcd_write_s("Verarbeitete M.:");
            lcd_write_s(itoa(Meter, buffer0, 10));
        if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      _delay_ms(300);
    }

    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
      _delay_ms(300);
    }

        }

          else if (zaehler == 4)
          {
          lcd_clear();
          lcd_write_s("Geschwindigkeit:");
          lcd_write_s(itoa(Geschwindigkeit, buffer0, 10));


    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
      _delay_ms(300);
    }

          }

  else {zaehler = 0;}

}

}
#5402392
Lesenswert?
• ▲
▼
Richtig!
Dafür gibt es viele Lösungsansätze im Netz zu finden.

Du kannst da natürlich auch tricksen und den alten Wert mit Leerzeichen 
überschreiben.
Beispiel:

"Drahtmessung    "
"Messung Starten "
"Verarbeitete M.:"
"Geschwindigkeit:"

So ist jede Bezeichnung "gleich lang". DRAHTMESSUNG überschriebt quasi 
alle anderen Bezeichnungen durch die angefügten Leerzeichen.
Gast #5402482
Lesenswert?
• ▲
▼
habe das menue jetzt mal so angepasst das Zählen als unterprogramm für 
die übersicht:
int zaelen(void)
{
  if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      lcd_clear();
      _delay_ms(300);
    }

    if (!(PINB & (1<<PB1)))
    {
      zaehler--;
      lcd_clear();
      _delay_ms(300);
    }

und das hauptprogramm:

while(1){

  if (zaehler == 0)
  {

  lcd_write_s("Drahtmessung    ");
  if (!(PINB & (1<<PB0)))
    {
      zaehler++;
      _delay_ms(300);
    }
  }
    else if (zaehler == 1)
    {

    lcd_write_s("Messung Starten ");
    zaelen();

    }


      else if (zaehler == 2)
      {

      lcd_write_s("Messung Beenden ");
      zaelen();

      }
        else if (zaehler == 3)
        {

        lcd_write_s("Verarbeitete M.:");
        lcd_setcursor(0,2);
            lcd_string(itoa(Meter, buffer0, 10));
        zaelen();

        }

          else if (zaehler == 4)
          {

          lcd_write_s("Geschwindigkeit:");
          lcd_setcursor(0,2);
          lcd_string(itoa(Geschwindigkeit, buffer0, 10));
          zaelen();



          }

  else {zaehler = 0;}

Jetzt schreibt er mir allerdings beide Zeilen und alle Zeichen des 
Display voll. Der Text wird immer wiederholt.
Gast #5402505
Lesenswert?
• ▲
▼
Bei der von mir verwendet Bibliothek ist
(0,1) 1. Zeile
(0,2) 2. Zeile
Habe 2 Zeilen

Auszug aus der Bibliothek
*
 * lcd_write(..) - sendet eine Zeichenkette an LCD
 */
void lcd_write_s(char *buf)
{
  while(buf[0]!='\0') {
    lcd_write(buf[0]);
    buf++;
  }
}
Gast #5403983
Lesenswert?
• ▲
▼
Anfänger158 schrieb:
> Auszug aus der Bibliothek

Ich geb dir nen dringenden Rat: schreibe dir deinen LCD-Treiber um, und 
zwar so, daß er die Schreib-Position mitführt, sodaß du mit einer 
Funktion clreol() (die du dir selber schreibst) die Zeile ab aktueller 
Position bis zum Ende ablöschen kannst. Natürlich muß die nicht zwingend 
clreol() heißen, was anderes, z.B. karlheinz() ginge auch. Hauptsache du 
kannst dir den namen gut merken.

W.S.

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.