ich hab von einem kollegen ein fertig programmiertes spiel "Kniffel" bekommen das auch so weit funktioniert. Für meinen zweck will ich aber nur das man mit einem schalter nach und nach jeden LED- würfel der auf der platine ist anhalten kann, jedoch hab ich keine ahung wie ich des anstellen soll. wäre nett wenn ihr mir dabei helfen könntet!! hier ist der quellcode: #include <reg517.h> /**** globale Konstantendeklaration **********************************/ /**** globale Variablendeklaration ***********************************/ // Ports deklarieren sfr wurfel = 0x80; // P0 sfr enable = 0x90; // P1 sfr ausgabe = 0xB0; // P3 // Schalter initalisieren sfr schalter = 0xA0; // P2 sbit s1 = schalter^0; sbit s2 = schalter^1; sbit s3 = schalter^2; sbit s4 = schalter^3; sbit s5 = schalter^4; // gewürfelte Werte für Anzeige // 1 2 3 4 5 6 char ergebnis[6] = { 0xF1, 0xF8, 0xF9, 0xFC, 0xFD, 0xFE }; // Strings um die Anzeige zu aktivieren char str[5] = { 0xFE, 0xFD, 0xFB, 0xF7, 0xEF }; // Würfelergebnisse speichern char save[5]; // Für Würfel char erg_aus[5]; // Für Anzeige // ZählVariabeln char x, j; /**** Funktionen *****************************************************/ // Timer 0 Service Routine isr_t0 ( ) interrupt 1 { // Zähler für die Anzeigenauswahl (1 - 5) if (x < 4) x++; else x = 0; // Anzeige deaktivieren & Würfelwerte auf Anzeige schreiben & Anzeige aktivieren enable = 0xFF; wurfel = save[x]; enable = str[x]; // Wenn alle Schalter gedrückt sind addiere alle Würfelergebnisse und gebe sie auf der Anzeige aus if((s1 == 1) && (s2 == 1) && (s3 == 1) && (s4 == 1) && (s5 == 1)) ausgabe = (erg_aus[0] + erg_aus[1] + erg_aus[2] + erg_aus[3] + erg_aus[4]); } // Timer 1 Service Routine isr_t1 ( ) interrupt 3 { // Zähler zum Würfeln (1 - 6) if (j < 5) j++; else j = 0; // Wenn kein Schalter gedrückt Werte übernehmen ansonsten immer nur ein Teil der Werte übernehmen if(s1 == 0) { save[0] = ergebnis[j]; erg_aus[0] = (j + 1); } if(s2 == 0) { save[1] = ergebnis[j]; erg_aus[1] = (j + 1); } if(s3 == 0) { save[2] = ergebnis[j]; erg_aus[2] = (j + 1); } if(s4 == 0) { save[3] = ergebnis[j]; erg_aus[3] = (j + 1); } if(s5 == 0) { save[4] = ergebnis[j]; erg_aus[4] = (j + 1); } } /**** Hauptprogramm **************************************************/ main() { // Timer 1 (16 Bit Modus) && Timer 0 (8 Bit AutoReload Modus) TMOD = 0x12; // Timer 0 & 1 aktivieren EAL = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; // Variabeln initalisieren x = 0; j = 0; while(1) // Endlosschleife => Programmabbruch mit RESET { } // Ende der Endlosschleife } // END MAIN
Wie wäre es wenn Du deinen Kollegen bemühen würdest. Der kennt sich in diesem Programm doch bestens aus. Außerdem kann er, falls noch Änderungen erwünscht sind, besser und schneller das Progi anpassen. Lade in zum Essen ein oder in die Kneipe auf ein Bier.
Versuchmal diese Zeile
> if((s1 == 1) && (s2 == 1) && (s3 == 1) && (s4 == 1) && (s5 == 1))
So zu ändern.
if( (s1 == 1) )
Hab was vergessen, dass hier noch ändern > // Wenn kein Schalter gedrückt Werte übernehmen ansonsten immer nur ein > Teil der Werte übernehmen > if(s1 == 0) { save[0] = ergebnis[j]; erg_aus[0] = (j + 1); } > if(s2 == 0) { save[1] = ergebnis[j]; erg_aus[1] = (j + 1); } > if(s3 == 0) { save[2] = ergebnis[j]; erg_aus[2] = (j + 1); } > if(s4 == 0) { save[3] = ergebnis[j]; erg_aus[3] = (j + 1); } > if(s5 == 0) { save[4] = ergebnis[j]; erg_aus[4] = (j + 1); } und zwar so. // Wenn kein Schalter gedrückt Werte übernehmen ansonsten immer nur ein Teil der Werte übernehmen if(s1 == 0) { save[0] = ergebnis[j]; erg_aus[0] = (j + 1); save[1] = ergebnis[j]; erg_aus[1] = (j + 1); save[2] = ergebnis[j]; erg_aus[2] = (j + 1); save[3] = ergebnis[j]; erg_aus[3] = (j + 1); save[4] = ergebnis[j]; erg_aus[4] = (j + 1); } Hoffe ich habe jetzt keinen fehler gemacht. PS: Bevor Du das Original verhunst bitte zuerst eine Sicherheitskopie machen.
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.