Hallo, ich bins wieder, der mit dem Würfelspiel in C :) Das Hardware Problem wurde inzwischen von meinem Lehrer behoben und ich habe selbst noch weiterprogrammiert und ein Stücken geschafft. Und zwar „würfeln“ jetzt alle Würfel und wenn man einen Schalter von einem x-beliebigen Würfel betätigt hält dieser an und zeigt das gewürfelte Ergebnis. Leider würfeln in der Zeit die anderen Würfel nicht weiter und die restlichen Aufgabenpunkte fehlen auch noch da ich keine Ahnung habe wie ich das realisieren soll. Ich hoffe ihr könnt mir wieder ein wenig helfen, alleine schaffe ich das nicht. Hier ist noch mal der Link zu meinem letzten Thread: Beitrag "Re: Würfelspiel programmieren in C, leider keine Ahnung wie" Das Aufgabenblatt lade ich noch mal hoch. Quelltext: /**** globale Variablendeklaration *******************************************************/ sfr Daten=0x90; //Port1 sfr Steuer=0x0A0; //Port2 sfr Schalter=0x0B0; //Port3 bit merker0; bit merker1; bit merker2; bit merker3; bit merker4; char wuerfel [5]={0xFE,0xFD,0xFB,0xF7,0xEF}; //die 5 würfel char leds [6]={0x01,0x04,0x05,0x0C,0x0D,0x0E}; //die zaheln 1-6 //char aus[1]={0x00}; sbit w0=Schalter^0; sbit w1=Schalter^1; sbit w2=Schalter^2; sbit w3=Schalter^3; sbit w4=Schalter^4; int i,y,b; long int x; int blub; /**** Funktionen ************************************************************************ */ /**** Hauptprogramm **********************************************************************/ main() { while(1) // Endlosschleife => Programmabbruch mit RESET { //Würfel 0 i=0; while(!w0&&!w1&&!w2&&!w3&&!w4){ Daten=0x00; for(i=0;i<=6;i++) Steuer=wuerfel[i]; Daten=leds[blub]; for(x=0;x<=150;x++); //ich weis nicht wo das hinmuss if(blub>5) blub=0; else blub++; } if (w0==1){ Steuer=wuerfel[0]; Daten=leds[blub]; } if (w1==1){ Steuer=wuerfel[1]; Daten=leds[blub]; } if (w2==1){ Steuer=wuerfel[2]; Daten=leds[blub]; } if (w3==1){ Steuer=wuerfel[3]; Daten=leds[blub]; } if (w4==1){ Steuer=wuerfel[4]; Daten=leds[blub]; } } // Ende der Endlosschleife } // END MAIN Mit freundlichen Grüßen, Carsten
Benenn erstmal deine Variablen richtig und versuche den Code mal ordentlich einzurücken. Indent nach K&R sieht jeder gern :) http://de.wikipedia.org/wiki/Einr%C3%BCckungsstil#Variation:_Original_K.26R_.2F_Kernel_.2F_Linux_.2F_UNIX_.2F_Stroustrup
Hi, wie wärs mit interrupts? Achso noch ein tip: Bunutze die C Formatanweisung des Forums :) Alex
Carsten Stulgies schrieb: > habe selbst noch weiterprogrammiert und ein Stücken geschafft. Und zwar > „würfeln“ jetzt alle Würfel und wenn man einen Schalter von einem > x-beliebigen Würfel betätigt hält dieser an und zeigt das gewürfelte > Ergebnis. Leider würfeln in der Zeit die anderen Würfel nicht weiter Ich würde mal sagen, da würfelt überhaupt nur 1 Würfel. blub (welch selten dämlicher Name) hält die Augenzahl eines Würfels. Zumindest ist das die einzige Variable, die würfelähnliches Verhalten einprogrammiert bekommen hat. > if(blub>5) blub=0; > else blub++; Du hast ergo nur einen einzigen Würfel in deinem Programm, zeigst diesen aber auf allen LED-Würfel an. Kein Wunder, dass die immer alle dasselbe anzeigen. Du brauchst 5 Variablen, wobei jede einzeln die Augenzahl eines eigenen Würfels repräsentiert.
Hallo, vielen Dank für die Antworten, das mit dem Einrücken tut mir leid wie haben das in der Schule groß nicht gelernt, aber ich habe mich bemüht das ganze ein wenig übersichtlicher zu gestalten. Also, ich habe jetzt auf kbuchegg´s Rat für jeden Würfel eine eigene Schleife zum durchwürfeln. Aktuell sieht es so aus das alle Würfel würfeln und wenn man einen schalter betätigt geht der entsprechende Würfel aus und die restlichen würflen weiter. Leider zeigt der gestoppte Würfel kein Ergebnis mehr an. Ich hoffe ihr könnt mir sagen woran das liegt und wie ich die reslichen Aufgabenpunkte angehen soll. Ich freue mich über Antworten. Mir freundlichen Grüßen, Carsten
Primär liegt das meiner Meinung nach daran, dass du ziemlich konzept- und planlos an die Sache rangehst Wie wäre es damit
1 | int AugenZahl1; // Die Augenzahl von Würfel 1 0..5 |
2 | int AugenZahl2; // Die Augenzahl von Würfel 2 0..5 |
3 | int AugenZahl3; // Die Augenzahl von Würfel 3 0..5 |
4 | int AugenZahl4; // Die Augenzahl von Würfel 4 0..5 |
5 | int AugenZahl5; // Die Augenzahl von Würfel 5 0..5 |
6 | |
7 | ...
|
8 | |
9 | |
10 | int main() |
11 | {
|
12 | ...
|
13 | |
14 | while( 1 ) { |
15 | |
16 | // behandle Würfel 1
|
17 | // wenn sein Schalter auf ein steht, dann würfelt er und
|
18 | // zählt seine Augenzahl rum. Wenn nicht, dann macht er nichts
|
19 | if( w0 == 0 ) { |
20 | AugenZahl1++; |
21 | if( AugenZahl1 > 5 ) |
22 | AugenZahl = 0; |
23 | }
|
24 | |
25 | // Würfel 1 hat gewürfelt (oder auch nicht, je nach Schalter)
|
26 | // aber auf jeden Fall kann seine Augenzahl angezeigt werden
|
27 | Steuer = wuerfel[0]; |
28 | Daten = leds[ AugenZahl1 ]; |
29 | |
30 | // Ein wenig warten, damit die LEDs auch leuchten können
|
31 | wait(); |
32 | |
33 | |
34 | // behandle Würfel 2
|
35 | // wenn sein Schalter auf ein steht, dann würfelt er und
|
36 | // zählt seine Augenzahl rum. Wenn nicht, dann macht er nichts
|
37 | if( w1 == 0 ) { |
38 | AugenZahl2++; |
39 | if( AugenZahl2 > 5 ) |
40 | AugenZah2 = 0; |
41 | }
|
42 | |
43 | // Würfel 2 hat gewürfelt (oder auch nicht, je nach Schalter)
|
44 | // aber auf jeden Fall kann seine Augenzahl angezeigt werden
|
45 | Steuer = wuerfel[0]; |
46 | Daten = leds[ AugenZahl2 ]; |
47 | |
48 | // Ein wenig warten, damit die LEDs auch leuchten können
|
49 | wait(); |
50 | |
51 | ...
|
52 | }
|
53 | }
|
54 | |
55 | void wait() |
56 | {
|
57 | int x; |
58 | |
59 | for( x = 0; x < 150; +x ) |
60 | ;
|
61 | }
|
Deine Code formatierung ist immer noch scheuslich. Bei jeder öffnenden {
wird das nachfolgende eingerückt, bis wieder die schliessende } kommt!
Viel zuviele Variablen für nichts uasser dass man ständig überall
rumkopieren muss. Da gibts die io und die merker und eigentlich machen
alle dasselbe.
> Leider zeigt der gestoppte Würfel kein Ergebnis mehr an.
Doch das tut er. Aber er tut es so kurz, dass du es nicht mehr siehst.
Mal so als Gedankenanstoss...
1 | main
|
2 | ....
|
3 | while(1){ |
4 | for (i=0;1;5){ |
5 | If Taste[i] == 0{ |
6 | If Würfelnr[i][augenzahl] < 6 |
7 | Würfelnr[i][augenzahl]++; |
8 | else
|
9 | Würfelnr[i][augenzahl]=0; |
10 | }
|
11 | Steuer = i; |
12 | Daten = leds[ würfelnr[i][augenzahl] ]; |
13 | }
|
14 | }
|
15 | waitms(100); |
>das mit dem Einrücken tut mir leid wie >haben das in der Schule groß nicht gelernt, aber ich habe mich bemüht >das ganze ein wenig übersichtlicher zu gestalten. Naja, aber sieht ja schon besser aus, aber Rücke mit Tabs ein, nicht mit Leerzeichen. Jedes mal nach "{" und Enter kommt einfach noch ein Tab, wenn du einen guten Editor hast, der nicht nach jedem Enter wieder an den Zeilenanfang geht. Und zwischendrin haste auch einige vergessen. Durch das wird der Code schon gut lesbar.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.