Forum: Mikrocontroller und Digitale Elektronik 7-Segmentanzeige mit Atmega8 will nicht


von Max B. (tyrann619)


Lesenswert?

Hallo, ich bin gerade dabei mich mit uC zu beschäftigen.
Nun nach dem ich weiß wie man eine LED an und ausschaltet und ein delay 
einbaut wollte ich versuchen, eine 7-Seg. Anzeige anzusteuern.

Hier mal der Code um Zahlen anzuzeigen:
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
#include <avr/io.h>
#include <util/delay.h>

void wait_seconds (uint8_t s)
{
  for(;s>0;s--)
  {
    uint8_t ms = 0;
    for(;ms<20;ms++)
    {
      _delay_ms(50);
    }
  }

}
void digit (char z)  //PD1 geht nicht
{
  if (z=1) {PORTD=0x00 | (1<<PD3) | (1<<PD4);}
      //if (z=2) {PORTD=0x00 | (1<<PD7) | (1<<PD4 ) | (1<<PD5 ) | 
(1<<PD2) | (1<<PD0);}

}
int main(void)
{
  DDRD=0xFF;

  while(1)
  {
  digit(1);
  wait_seconds(3);
  PORTD=0x00;
  wait_seconds(3);

  }
}



so... wenn man das jetzt startet Blinkt die 1 auf der Anzeige
wenn ich jedoch die zweite Zeile in der digit funktion wieder 
einbinde(// entfernen) zeigt er mir die 2 an.. obwohl ja immernoch 
digit(1) da steht und so nur der Fall für die 1 zutrifft!?

von Hmm (Gast)


Lesenswert?

==

von Bastler (Gast)


Lesenswert?

Versuch mal if (z==2) !!!

z=1  // Zuweisung
z==1 // Vergleich

von Heiko B. (heiko_b)


Lesenswert?

noch schöner ist
if (2==z)...
denn wenn du schreibst
if (1=z) gibts 'ne schöne Compilermeldung

von Max B. (tyrann619)


Lesenswert?

...... sry ka wie ich sowas vergessen konnte....
Aber eine Fehlermeldung kam nicht.. gibt es auch einen if ausdruck
mit einem = ?
Wieso ist "if (2==z)" schöner?

von HildeK (Gast)


Lesenswert?

Max B. schrieb:
> Wieso ist "if (2==z)" schöner?

Wenn du versehentlich "if (2=z)" schreibst, meckert der Compiler.

von us73 (Gast)


Lesenswert?

Und als nächstes machst Du die Fallunterschiedung in digit() mal mit 
einem switch(), dann schaut der Code danach auch hübsch zu lesen aus.

von Thomas E. (thomase)


Lesenswert?

Max B. schrieb:
> gibt es auch einen if ausdruck mit einem = ?
Das "==" hat mit der "if"-Abfrage direkt nichts zu tun. Entscheidend ist 
das Ergebnis. Und das ist "true", wenn das, was in er Klammer passiert 
nicht 0 ist. Wie es dazu kommt, ist völlig egal.

"z = 2" weist z den Wert 2 zu. Damit ist z dann nicht 0 und das Ergebnis 
der "if"-Auswertung ist true.

Du kannst auch direkt true reinschreiben: if(true) oder if(1) oder 
if(!0).
Oder if(z+1) oder if(z).
Alles, was nicht 0 ist, ist true.

HildeK schrieb:
> Wenn du versehentlich "if (2=z)" schreibst, meckert der Compiler.
Und da meckert der Compiler, weil einer Konstanten(2) etwas zugewiesen 
wird. Das geht natürlich nicht. Das gibt aber auch an jeder anderen 
Stelle Mecker.
2 = z;
Geht auch nicht.

mfg.

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.