Forum: Mikrocontroller und Digitale Elektronik Problem GLCD Menu


von agast (Gast)


Lesenswert?

Hallo zusammen.

In meiner Funktion "auswahl" besteht folgendes Problem:

int x = 0;
void auswahl(void){

  SetFont(FONT_8_norm);
  LCDSoftText("Relais 0",7,0,BLACK);
  LCDSoftText("Relais 1",7,9,BLACK);
  LCDSoftText("Relais 2",7,18,BLACK);
  LCDSoftText("-",0,x,BLACK);

  switch(x){       //der - nur auf den 3 zeilen
    case -9:  x = 18; break;
    case 27:  x = 0; LCDSoftText("   ",0,27,BLACK); break;
  }

  if (get_key_short (1<<S0)){
    LCDSoftText("   ",0,x,BLACK);   //lösche den - auf der zeile
    x = x+9;                        //zeichne den - auf nächster zeile
  }
  else if (get_key_short (1<<S1)){
    LCDSoftText("   ",0,x,BLACK);   //lösche den - auf der zeile
    x = x-9;                        //zeichne den - auf vorheriger zeile
  }
  else if(x==0){                    //wenn - auf erster zeile
    if (get_key_short(1<<S2)){      //und S2 betätigt wird
      //ClearScreen();              //lösche lcd
      LCDSoftText("AN",0,0,BLACK);  //schreibe
      LCDSoftText("AUS",0,9,BLACK); //schreibe
    }
  }


  LCD_refresh();//sende an lcd
}

Mein Problem ist jetzt, wenn:

else if(x==0){
if (get_key_short(1<<S2))

die beiden erfüllt sind, wird mir das AN und AUS zwar angezeigt, aber 
der Rest bleibt auch noch stehen.
Was kann ich da machen.?


danke
MfG

: Verschoben durch User
von Oliver (Gast)


Lesenswert?

Wie wäre es, wenn du die Zeile
>     //ClearScreen();              //lösche lcd
entkommentierst ?

Wenn du nicht das ganze LCD löschen willst, sondern nur Teile davon, 
dann musst du das halt entsprechend hinschreiben.

Oliver

von agast (Gast)


Lesenswert?

Oliver schrieb:
> Wie wäre es, wenn du die Zeile
>>     //ClearScreen();              //lösche lcd

auch wenn es da steht. Das selbe Problem.


habe aber gerade eine lösung gefunden:

int x = 0;
int z = 0;
void auswahl(void){
  SetFont(FONT_8_norm);
  switch(z){
    case 0: LCDSoftText("   ",0,0,BLACK);
            LCDSoftText("   ",0,9,BLACK);
            LCDSoftText("   ",0,18,BLACK);
            LCDSoftText("Relais 0",7,0,BLACK);
            LCDSoftText("Relais 1",7,9,BLACK);
            LCDSoftText("Relais 2",7,18,BLACK);
            LCDSoftText("-",0,x,BLACK);

        switch(x){
          case -9:  x = 18; break;
          case 27:  x = 0; LCDSoftText("   ",0,27,BLACK); break;
        }

        if (get_key_short (1<<S0)){
          LCDSoftText("   ",0,x,BLACK);
          x = x+9;
        }
        else if (get_key_short (1<<S1)){
          LCDSoftText("   ",0,x,BLACK);
          x = x-9;
        }
        break;
    case 1: LCDSoftText("               ",0,0,BLACK);
            LCDSoftText("               ",0,9,BLACK);
            LCDSoftText("               ",0,18,BLACK);
            LCDSoftText("AN",0,0,BLACK);
            LCDSoftText("AUS",0,9,BLACK);
            break;
  }

  if(x==0){
    if (get_key_short(1<<S2)){
      z = 1;
    }
    if (get_key_short(1<<S3)){
      z = 0;
    }
  }


  LCD_refresh();
}


jetzt ist nur noch das problem, wenn AN und AUS dasteht, flakkert es ein 
wenig. wie kann man das beheben.?

von agast (Gast)


Lesenswert?

ein größeren quarz.?

von Peter D. (peda)


Lesenswert?

agast schrieb:
> LCDSoftText("               ",0,0,BLACK);
> LCDSoftText("AN",0,0,BLACK);

Was denn nun?

agast schrieb:
> flakkert es ein
> wenig. wie kann man das beheben.?

Einfach nicht verschiedene Sachen an die gleiche Stelle schreiben.

von agast (Gast)


Lesenswert?

das war das problem....danke

case 1: //LCDSoftText("               ",0,0,BLACK);
  //LCDSoftText("               ",0,9,BLACK);
  LCDSoftText("               ",0,18,BLACK);
  LCDSoftText("AN             ",0,0,BLACK);
  LCDSoftText("AUS            ",0,9,BLACK);
  break;

so geht es.

aber wie bekomm ich das flakkern bei -Re weg.?

- Relais 1
  Relais 2
  Relais 3

geht das auch so einfach:?

von agast (Gast)


Lesenswert?

Genau so...

LCDSoftText("       Relais 0",0,0,BLACK);
LCDSoftText("       Relais 1",0,9,BLACK);
LCDSoftText("       Relais 2",0,18,BLACK);
LCDSoftText("-",0,x,BLACK);


sorry für die doofe frage...

:)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.