so etwa:
MfG MarkCode:#include <avr/io.h> #define LED1 PD5 #define LED2 PD6 #define T1 PD2 #define T2 PD3 int main() { DDRD=(1<<LED1)|(1<<LED2); while(1) { PORTD=(PIND&~((1<<T1)|(1<<T2)))>>(LED1-T1); } }
Hallo!
wie würdet ihr ein Programm schreiben, das 2 LED s an und ausschaltet
durch 2 Taster. LED1 ist an PD5 und LED2 an PD6 bzw. Taster1 an PD2 und Taster2 an PD3 angeschlossen.
ich brauche das Programm zum Vergleichen!
Danke
so etwa:
MfG MarkCode:#include <avr/io.h> #define LED1 PD5 #define LED2 PD6 #define T1 PD2 #define T2 PD3 int main() { DDRD=(1<<LED1)|(1<<LED2); while(1) { PORTD=(PIND&~((1<<T1)|(1<<T2)))>>(LED1-T1); } }
Danke!
hat aber leider nicht funktioniert!
Das hier aber:
Das '~' nach 'PIND&' musste weg.Code:#include <avr/io.h> #define LED1 PD5 #define LED2 PD6 #define T1 PD2 #define T2 PD3 int main() { DDRD=(1<<LED1)|(1<<LED2); while(1) { PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1); } }
MfG Mark
Danke! dies mal hat das funktioniert!
kannst du mir bitte diese Zeile erklären!Danke!PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);
ich habe es nämlich so gelöst:
#include <avr/io.h>
#define T1 0x04
#define T2 0x08
#define LED1 0x20
#define LED2 0x40
int main()
{
DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen
while(1)
{
if (PIND & T1)
{
PORTD |= LED1;
}
if (PIND & T2)
{
PORTD |= LED2;
}
else
{
PORTD &= 0x00;
}
}
return 0;
}
Die Zeile "PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);" könnte man etwa so auseinander nehmen:
"PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);" ist einfach nur eine Zusammenfassung davon.Code:unsigned char temp; temp=PIND; //temp hat jetzt den Wert von PIND temp=temp&((1<<T1)|(1<<T2)); //alle bits in temp, ausser T1 und T2 sind auf 0 temp=temp<<(LED1-T1); //verschiebt den Inhalt vom temp um so viele Stellen nach //links, wie LED1 von T1 entfernt ist. In Deinem Fall 3. Der Zustand von T1 ist //jetzt im 5ten bit, der Zustand von T2 in 6ten. Also genau da, wo auch die //beiden LEDs sind PORTD=temp; //Jetzt hat LED1 den Zustand von T1 und LED2 den Zustand von T2
MfG Mark
Danke!
findest du mein Programm zu lang ?
Lesezeichen