vieleicht klappt folgendes
Code:
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
int main () {
uint8_t start=1;
DDRB = 0x00; // B Eingänge
DDRD = 0xFF; // D Ausgänge
PORTD = 0x00; //Standard: D0,D4 gesetzt 0x11
DDRA = 0xFF; // A Ausgänge
PORTA = 0x00;
// pb0 , pb1, pb2 oefner, also geben sie immer ne eins aus
while(1)
{
if (PORTB==0b00000101) /*|| !(PORTB==0b00000011)*/) // Wenn B1 oder B2 == 0 dann ...
{
PORTD = 0x00; // Alle D Ports auf 0
start=1;
}
if ( PORTB==0b00010111 ) // Wenn B4 == 1 dann
// die letxten 3 einser, weil die oefner immer einser liefern solang sie nicht betaetigt sind
{
PORTD = 0x17; //D0,D1,D2,D4 gesetzt
}
if ( PORTB==0b00001111 ) // Wenn B3 == 1 dann
{
PORTD = 0x19; //D0,D1,D4 gesetzt
}
if (PORTB==0b00000110 ) // Wenn B0 == 0 dann
{
PORTD = 0x11; //Standard: D0,D4 gesetzt
start=0;
}
if(start==0)
{
if((bit_is_set (PORTD,4))) //2LEDs abwechselnd blinken //Wenn PortD4 gesetzt
{
PORTD &= ~(1 << PD4); //PortD4 auf 0 setzen PD4 statt nur 4
PORTD |= (1 << PD5); //PortD5 auf 1 setzen
_delay_ms(40);
}
else
{
PORTD &= ~(1 << PD5); //PortD5 auf 0 setzen PD5 statt nur 5
PORTD |= (1 << PD4);
_delay_ms(40);
}
}
}
return 0;
}
gruss
Lesezeichen