Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2020 mgr Jerzy Wałaszek
I LO w Tarnowie

Bity w elektronice

Kostka do gry

SPIS TREŚCI
Podrozdziały
Różnego rodzaju gry elektroniczne są wciąż bardzo popularne i w przyszłości zapewne sytuacja ta nie ulegnie zmianie. Gry losowe wykorzystują przypadkowość różnych zdarzeń - np. ułożenie kart w potasowanej talii, zatrzymanie się kulki na odpowiednim polu ruletki, układ oczek na kostce itp. Samodzielne zaprojektowanie losowej gry logicznej może być bardzo ambitnym wyzwaniem. Ten rozdział może wam w tym pomóc.

Opis

W tym rozdziale zaprojektujemy sterownik elektronicznej kostki do gry. Na wejściu będziemy podawać w kodzie 8421 liczbę od 0 do 7, a na wyjściu otrzymamy sygnały sterujące 7 diodami LED, tworzącymi oczka kostki. Opisany sterownik może posłużyć jako element gry elektronicznej w kości, ale to już inny temat. Poniżej przedstawiamy definicje sygnałów wejściowych i wyjściowych sterownika:

obrazek

W poniższej tabeli zestawiliśmy kody wejściowe oraz wynikowe stany kostki. W ostatnim wierszu są podane wyjścia sterownika, które mają stan wysoki dla danego układu kostki.

kod 000 001 010 011 100 101 110 111
kostka obrazek obrazek obrazek obrazek obrazek obrazek obrazek obrazek
wyjścia - D BF BDF ABFG ABDFG ABCEFG ABCDEFG

Na kostce nie występuje nigdy układ 7 oczek - wprowadziliśmy go jednak umyślnie wraz z układem zerowym (a nóż się przyda).

Na początek:  podrozdziału   strony 

Określenie funkcji logicznych

Układ sterowania kostką jest transkoderem kodu 8421 na kod oczek kostki. Ułóżmy zatem tabelkę sygnałów wejściowych i wyjściowych:

c b a A B C D E F G
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0
0 1 0 0 1 0 0 0 1 0
0 1 1 0 1 0 1 0 1 0
1 0 0 1 1 0 0 0 1 1
1 0 1 1 1 0 1 0 1 1
1 1 0 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1 1 1

Na podstawie powyższej tabeli tworzymy mapy Karnaugha dla poszczególnych wyjść, sterujących diodami LED w kostce. Funkcje sprowadzamy do postaci NAND i NOT, tam gdzie jest to konieczne.

Wyjścia A i G : 100, 101, 110, 111

obrazek 00 01 11 10
0 0 0 0 0
1 1 1 1 1

Wyjścia B i F : 010, 011, 100, 101, 110, 111

obrazek 00 01 11 10
0 0 0 1 1
1 1 1 1 1
obrazek 00 01 11 10
0 0 0 1 1
1 1 1 1 1

Wyjścia C i E : 110, 111

obrazek 00 01 11 10
0 0 0 0 0
1 0 0 1 1

Wyjście D : 001, 011, 101, 111

obrazek 00 01 11 10
0 0 1 1 0
1 0 1 1 0

Podsumujmy

Na początek:  podrozdziału   strony 

Budowa sieci logicznej

Rozpoczynamy budowę sieci logicznej od sygnałów wejściowych i ich negacji:

Teraz realizujemy kolejne funkcje dla wyjść A...G:





Na początek:  podrozdziału   strony 

Symulacja sieci w języku C++

Numerujemy bramki:

Definiujemy sieć połączeń:

YB1 = NOT(c)
YB2 = NOT(b)
YB3 = NAND(c,b)
YB4 = NAND(YB1,YB2)
YB5 = NOT(YB3)
A = c
B = YB4
C = YB5
D = a
E = YB5
F = YB4
G = c

Na wejście sieci będą podawane sygnały a,b,c w kodzie 8421. Na wyjściach A ... G powinniśmy otrzymać sygnały zgodne z tabelką:
c b a A B C D E F G
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0
0 1 0 0 1 0 0 0 1 0
0 1 1 0 1 0 1 0 1 0
1 0 0 1 1 0 0 0 1 1
1 0 1 1 1 0 1 0 1 1
1 1 0 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1 1 1
C++
// Symulacja sieci logicznej
// transkodera z kodu 8421 na
// kod oczek kostki do gry
// (C)2020 mgr Jerzy Wałaszek
// I LO w Tarnowie

#include <iostream>

using namespace std;

// Funkcje bramek

int NOT(int a)
{
    return !a;
}

int NAND(int a, int b)
{
    return !(a && b);
}

int main( )
{
  // Stany wejściowe oraz stany wyjściowe
  int a,b,c,A,B,C,D,E,F,G;

  // Stany wyjściowe bramek
  int YB1,YB2,YB3,YB4,YB5;


  cout << " c b a | A B C D E F G\n"
          "-------+---------------" << endl;

  // W pętli generujemy kody 000...111
  for(c = 0; c < 2; c++)
    for(b = 0; b < 2; b++)
      for(a = 0; a < 2; a++)
      {
        // Symulacja sieci

        YB1 = NOT(c);
        YB2 = NOT(b);
        YB3 = NAND(c,b);
        YB4 = NAND(YB1,YB2);
        YB5 = NOT(YB3);
        A = c;
        B = YB4;
        C = YB5;
        D = a;
        E = YB5;
        F = YB4;
        G = c;

        // Wyświetlamy wyniki

        cout << " " << c << " " << b << " " << a << " | "
             << A << " "
             << B << " "
             << C << " "
             << D << " "
             << E << " "
             << F << " "
             << G << endl;
  }
  cout << endl;

  return 0;
}
Wynik:
 c b a | A B C D E F G
-------+---------------
 0 0 0 | 0 0 0 0 0 0 0
 0 0 1 | 0 0 0 1 0 0 0
 0 1 0 | 0 1 0 0 0 1 0
 0 1 1 | 0 1 0 1 0 1 0
 1 0 0 | 1 1 0 0 0 1 1
 1 0 1 | 1 1 0 1 0 1 1
 1 1 0 | 1 1 1 0 1 1 1
 1 1 1 | 1 1 1 1 1 1 1

Na początek:  podrozdziału   strony 

Symulacja interaktywna

Z lewej strony ustawiasz liczbę oczek w kodzie 8421 kliknięciami w kwadratowe przyciski. Kolor czarny oznacza stan 0, kolor czerwony oznacza stan 1. Gdy na przyciskach ustawisz odpowiedni kod, sieć logiczna ustawi układ oczek na kostce.

Symulator
Na początek:  podrozdziału   strony 

Spis elementów

SN7400 × 1

obrazek

SN7404 × 1

obrazek

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2020 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.