title image


Smiley *Lach*
Hi Carsten,



also Ehrgeizig bist du ja, dass muss man dir lassen :o)



Auf den Wurfel kam ich einfach weil es auf jeder Anfaengerseite als Grundstoff steht.

Binar/Dezimalzaehler, Lauflicht, Ampel und eben ein Wurfel.

Das gleiche Spiel kommt dann mit einem Taster u.s.w.... u.s.w...

Wie gesagt, BASIC habe ich vergessen, dass habe ich zuletzt beim C64 mal gemacht. C und Assembler kann ich noch o,5%, also arbeite ich mich wieder in C ein. Gerade bei Linux ist das dann erweiterbar.

Beim STK sind die LEDs und Taster ja schon drauf, da spielt man dann erst mal mit so einfachen Programmen rum und freut sich wenn ueberhaupt was rumblinkt :o)



Und jetzt muss ich mich erst mal um mein Mopped kuemmern, Getriebe muckt. Das muss Montag laufen, ich habe ab heute ja kein Auto mehr ;( Also nix mit "basteln" uebers WE..



Hier das ganze in C. Nicht anders als deins.



#define WUERFEL_1 0x08 .......... // Muster fuer 1

#define WUERFEL_2 0x41 .......... // Muster fuer 2

#define WUERFEL_3 0x2A .......... // Muster fuer 3

#define WUERFEL_4 0x63 ......... // Muster fuer 4

#define WUERFEL_5 0x6B .......... // Muster fuer 5

#define WUERFEL_6 0x77 .......... // Muster fuer 6



uint8_t phase;



void warte(uint16_t t) { .......... // Funktion "Warteschleife"

uint16_t i, j;



for (i=0;i
for (j=1;j<200;j++) {

asm volatile ("nop");

}

}

}



uint8_t taster(void) { .......... // Tasterabfrage durch kurzes Umschalten auf Eingang

uint8_t status, ret_val;



status=PORTD&0x08; .......... // Alten Status merken

cbi(DDRD,3); .......... // Bit auf Eingang schalten

sbi(PORTD,3);



if (bit_is_clear(PIND,3)) .......... // Taster abfragen

ret_val=1;

else

ret_val=0;



PORTD=(PORTD&0xF7)|status; .......... // Alten Status wieder herstellen

sbi(DDRD,3); .......... // Bit wieder auf Ausgang schalten



return ret_val;

}



void wuerfel_schritt(void) { .......... // Wuerfel ausgegeben

if (phase==1)

PORTD=~WUERFEL_1; .......... // Muster fuer 1 ausgeben

else if (phase==2)

PORTD=~WUERFEL_2; .......... // Muster fuer 2 ausgeben

else if (phase==3)

PORTD=~WUERFEL_3; .......... // Muster fuer 3 ausgeben

else if (phase==4)

PORTD=~WUERFEL_4; .......... // Muster fuer 4 ausgeben

else if (phase==5)

PORTD=~WUERFEL_5; .......... // Muster fuer 5 ausgeben

else if (phase==6)

PORTD=~WUERFEL_6; .......... // Muster fuer 6 ausgeben

phase++;

if (phase>6)

phase=1;

}



int main (void) {

uint16_t zeit;



DDRB=0xFF; .......... // Port B auf Ausgang

PORTB=0xFF; .......... // Alle Ausgaenge auf 1



DDRD=0xFF; .......... // Port D auf Ausgang

PORTD=0xFF; .......... // Alle Ausgaenge auf 1



phase=1;

zeit=5000;

for (;;) { .......... // Endlosschleife

if (taster()) { .......... // Auf Taster warten

wuerfel_schritt();

zeit=1000;

PORTB=0x00;

}

else if (zeit<5000) { .......... // Ausrollen

wuerfel_schritt();

warte(zeit);

zeit=zeit+250;

if (zeit>=5000)

PORTB=0xFF;

}

}

}

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: