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!?
Versuch mal if (z==2) !!! z=1 // Zuweisung z==1 // Vergleich
noch schöner ist if (2==z)... denn wenn du schreibst if (1=z) gibts 'ne schöne Compilermeldung
...... 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?
Max B. schrieb: > Wieso ist "if (2==z)" schöner? Wenn du versehentlich "if (2=z)" schreibst, meckert der Compiler.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.