LED-Würfel mit schalter anhalten

#883478
Lesenswert?

da ich hier neu im forum bin, erst mal hallo!!
aber, jetzt zu meiner frage. 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. 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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren