U23 2008/Gruppe3
< U23 2008
Gruppe3
Wir saßen an der linken Ecke des projizierten Bildes ;)
Mitglieder:
-mkr
-PyroGX
-whitenexx
-The Kenny (Macbook, Brille)
-Gordin
Code:
Es gab wohl mehrere Untergruppen, wir sollten alle unseren Code hier reinstellen.
Ich bin irgendwie zu blöd dafür, den Code richtig im Wiki einzufügen. - The-Kenny
Hab meinen Code jetzt auch mal reingestellt. Code ist bisschen größer (426 Byte) aber man kann als Optionen außer an und aus auch toggle und nichtstun benutzen und tolle Konstanten :P - Gordin
Code von mkr:
#include <avr/io.h> #include <util/delay.h> void set_leds(uint8_t leds) { //alle leds ausschalten PORTC &= ~_BV(PC4); PORTD &= ~_BV(PD3); PORTD &= ~_BV(PD6); PORTD &= ~_BV(PD7); //gewählte leds einschalten PORTC |= ((leds & 1) << PC4 ); //bits aus leds an die richtige stelle schieben PORTD |= ((leds & 2) << (PD3 - 1) ); //minus eins, weils in leds an der stelle 1 steht (von rechts) PORTD |= ((leds & 4) << (PD6 - 2) ); //... PORTD |= ((leds & 8) << (PD7 - 3) ); } int main(void) { uint8_t i = 0; //index der ledconf, die ausgegeben werden soll uint8_t delay_time = 200; //pause zwischen den ausgaben uint8_t ledconf[4] = { //array mit led zuständen 0b00001000, 0b00000100, 0b00000010, 0b00000001, }; // LED Output-Pins konfigurieren DDRC |= _BV(PC4); DDRD |= ( _BV(PD3) | _BV(PD6) | _BV(PD7) ); while(1) { if (i >= sizeof(ledconf)) //index darf maximal so graß sein, wie die anzahl der ledconf elemente - 1 i = 0; set_leds(ledconf[i]); i++; _delay_ms(delay_time); } }
Code von Gordin: hauptcode:
#include "rumpus_ledlib.c" //selbstgeschriebene kleine lib zum steuern der leds #include <util/delay.h> static void display(uint8_t led_config) { //übergibt nur die für die jeweilige Funktion wichtigen bits an die led_X funktionen led_1(led_config & led1); led_2(led_config & led2); led_3(led_config & led3); led_4(led_config & led4); _delay_ms(100); } int main(void) { // Binäre Schreibweise: 11 = led an 10 = led aus 01 = toggle 00 = nichtstun /*uint8_t kr[6] = { 0b11101010 , * 0b10110000, * 0b00101100, * 0b00001011, * 0b00001110, * 0b00111000 }; */ /* Andere möglichkeit: * (Erzeugt die selbe Sequenz wie oben aber das Programm wird ca. 20 Byte größer) * Reihenfolge der leds ist egal */ uint8_t kr[6] = { led1 | led2aus | led3aus | led4aus, led1aus | led2, led2aus | led3, led3aus | led4, led4aus | led3, led3aus | led2, }; led_init(); // leds initialisieren uint8_t i; while(1) { for (i = 0; i < sizeof(kr) ; i++) { // Größe des Arrays muss im Array stehen array[X]... display(kr[i]); } } }
rumpus_ledlib.c:
#include <avr/io.h> // Prototypen void led_1(uint8_t wastun); void led_2(uint8_t wastun); void led_3(uint8_t wastun); void led_4(uint8_t wastun); void led_init(void); const uint8_t led1 = 0b11000000; const uint8_t led1aus = 0b10000000; const uint8_t led1toggle = 0b01000000; const uint8_t led2 = 0b00110000; const uint8_t led2aus = 0b00100000; const uint8_t led2toggle = 0b00010000; const uint8_t led3 = 0b00001100; const uint8_t led3aus = 0b00001000; const uint8_t led3toggle = 0b00000100; const uint8_t led4 = 0b00000011; const uint8_t led4aus = 0b00000010; const uint8_t led4toggle = 0b00000001; /* toggled alle leds */ /* auskommentieren zum benutzen 0o void led_toggleall() { PORTC ^= _BV(PC4); PORTD ^= _BV(PD3) | _BV(PD6) | _BV(PD7); }*/ /* ausführen bevor man was mit den leds macht */ void led_init() { DDRC = _BV(PC4); DDRD = _BV(PD3) | _BV(PD6) | _BV(PD7); PORTC &= ~_BV(PC4); PORTD &= ~_BV(PD3) | ~_BV(PD3) | ~_BV(PD3); } /* Steuerung für led 1: Argumente, die übergeben werden können: * 0b11000000 (led1) = anschalten * 0b10000000 (led1aus) = ausschalten * 0b01000000 (led1toggle) = toggle * 0b00000000 (0) = nichts */ void led_1(uint8_t wastun) { if (wastun == led1aus) { PORTC &= ~_BV(PC4); // löscht PC4 in PORTC } else if (wastun == led1) { PORTC |= _BV(PC4); // setzt PC4 in PORTC } else if (wastun == led1toggle) { PORTC ^= _BV(PC4); // tauscht PC4 in PORTC } } /* Steuerung für led 2: Argumente, die übergeben werden können: * 0b00110000 (led2) = anschalten * 0b00100000 (led2aus) = ausschalten * 0b00010000 (led2toggle) = toggle * 0b00000000 (0) = nichts */ void led_2(uint8_t wastun) { if (wastun == led2aus) { PORTD &= ~_BV(PD3); // löscht PD3 in PORTD } else if (wastun == led2) { PORTD |= _BV(PD3); // setzt PD3 in PORTD } else if (wastun == led2toggle) { PORTD ^= _BV(PD3); // tauscht PD3 in PORTD } } /* Steuerung für led 3: Argumente, die übergeben werden können: * 0b00001100 (led3) = anschalten * 0b00001000 (led3aus) = ausschalten * 0b00000100 (led3toggle) = toggle * 0b00000000 (0) = nichts */ void led_3(uint8_t wastun) { if (wastun == led3aus) { PORTD &= ~_BV(PD6); // löscht PD6 in PORTD } else if (wastun == led3) { PORTD |= _BV(PD6); // setzt PD6 in PORTD } else if (wastun == led3toggle) { PORTD ^= _BV(PD6); // tauscht PD6 in PORTD } } /* Steuerung für led 4: Argumente, die übergeben werden können: * 0b00000011 (led4) = anschalten * 0b00000010 (led4aus) = ausschalten * 0b00000001 (led4toggle) = toggle * 0b00000000 (0) = nichts */ void led_4(uint8_t wastun) { if (wastun == led4aus) { PORTD &= ~_BV(PD7); // löscht PD7 in PORTD } else if (wastun == led4) { PORTD |= _BV(PD7); // setzt PD7 in PORTD } else if (wastun == led4toggle) { PORTD ^= _BV(PD7); // tauscht PD7 in PORTD } }
try this: einfach ein leerzeichen vor die Codezeile packen und es wird dementsprechend interpretiert. -obstfliege