Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm schreiben..!
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:
#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!
hat aber leider nicht funktioniert!
Das hier aber:
#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);
}
}
Das '~' nach 'PIND&' musste weg.
MfG Mark
Danke! dies mal hat das funktioniert!
kannst du mir bitte diese Zeile erklären!
PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);
Danke!
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:
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
"PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);" ist einfach nur eine Zusammenfassung davon.
MfG Mark
Danke!
findest du mein Programm zu lang ?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.