#include #include #define F_CPU 12000000UL #include //makros #define set_bit(var, bit) ((var) |= (1 << (bit))) #define clear_bit(var, bit) ((var) &= (unsigned)~(1 << (bit))) #define anode1 PORTA #define anode2 PORTB #define shift PORTD #define ser 3 #define rck 4 #define sck 5 #define rst 6 #define enable 7 //funktionen void shift_enable (char zustand); void shift_reset (void); void shift_0 (void); void shift_1 (void); void shift_strobe (void); void shift_enable (char zustand) //schieberegister ein/ausschalten { if (zustand==1) { set_bit (shift,enable); } else { clear_bit (shift,enable); } } void shift_reset () //register zurücksetzen { clear_bit (shift,rst); set_bit (shift,rst); set_bit (shift,rck); clear_bit (shift,rck); } void shift_1 () // 1 reinschieben { set_bit (shift,ser); set_bit (shift,sck); clear_bit (shift,ser); clear_bit (shift,sck); } void shift_0 () //0 reinschieben { set_bit (shift,sck); clear_bit (shift,sck); } void shift_strobe () //wert übernehmen { set_bit (shift,rck); clear_bit (shift,rck); } //array erzeugen int data[16]; int main (void) { DDRA=0xFF; //PORTA ausgang DDRB=0xFF; //PORTB ausgang DDRD=0xFF; //PORTD ausgang //ugly data[0]= 0b0000111111100000; data[1]= 0b0001000010011000; data[2]= 0b0010000100000100; data[3]= 0b0011110100000010; data[4]= 0b0100001000000001; data[5]= 0b1101100100011101; data[6]= 0b1001100100011101; data[7]= 0b1000000100011111; data[8]= 0b1100001111111101; data[9]= 0b1011111000100101; data[10]= 0b1001001000100101; data[11]= 0b0101001000100110; data[12]= 0b0010101000111010; data[13]= 0b0010011000100100; data[14]= 0b0001001000111000; data[15]= 0b0000111111100000; /* //alle leds an data[0]= 0b1111111111111111; data[1]= 0b1111111111111111; data[2]= 0b1111111111111111; data[3]= 0b1111111111111111; data[4]= 0b1111111111111111; data[5]= 0b1111111111111111; data[6]= 0b1111111111111111; data[7]= 0b1111111111111111; data[8]= 0b1111111111111111; data[9]= 0b1111111111111111; data[10]= 0b1111111111111111; data[11]= 0b1111111111111111; data[12]= 0b1111111111111111; data[13]= 0b1111111111111111; data[14]= 0b1111111111111111; data[15]= 0b1111111111111111; */ shift_reset(); shift_enable(1); while(1) { shift_1(); for(int i=0; i<16; i++) { anode1= data[i]; anode2= data[i] >>8; shift_strobe(); shift_0(); _delay_ms(1); } } }