7-Segmentanzeige mit Atmega8 will nicht

OP #2930872
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!?
#2931428
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren