PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm schreiben..!



RIFMAN
04.04.2007, 13:26
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

p_mork
04.04.2007, 13:41
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

RIFMAN
04.04.2007, 13:48
Danke!
hat aber leider nicht funktioniert!

p_mork
04.04.2007, 15:10
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

RIFMAN
05.04.2007, 08:11
Danke! dies mal hat das funktioniert!
kannst du mir bitte diese Zeile erklären!

PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);

Danke!

RIFMAN
05.04.2007, 09:14
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;
}

p_mork
05.04.2007, 09:39
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

RIFMAN
05.04.2007, 10:03
Danke!
findest du mein Programm zu lang ?