33_36.pdf

(294 KB) Pobierz
Gra w kółko i krzyżyk - AVT-5101
P R O J E K T Y
Gra w kó³ko i krzy¿yk
AVT-5101
Przedstawiamy ³atwy
w wykonaniu uk³ad
elektronicznej wersji jednej
z najpopularniejszych gier
towarzyskich: kó³ko i krzy¿yk.
Rekomendacje : grê
polecamy szczególnie uczniom
i studentom, którym pomo¿e
ona zabiæ lekcyjn¹
(wyk³adow¹) nudê, a tak¿e
wszystkim fanom dobrej
rozrywki.
Pocz¹tkowo planowa³em wyko-
nanie kolejnego wcielenia gry
w koci, ale po przemyleniu
uzna³em, ¿e temat jest tak wyeks-
ploatowany, ¿e zapewne niewielu
Czytelników powiêci³oby uwagê
takiemu opracowaniu. O dziwo ni-
gdy nie spotka³em siê z elektro-
niczn¹ wersj¹ popularnej towa-
rzyskiej gry w kó³ko i krzy¿yk.
Pierwszym odruchem by³a chêæ
zastosowania wywietlacza graficz-
nego, lecz koszt wykonania takiej
zabawki by³yby nieporównywal-
nie du¿e w stosunku do przydat-
noci. Poniewa¿ w grze mamy do
postawienia tylko dwa mo¿liwe
symbole, najprostszym rozwi¹za-
niem okaza³o siê u¿ycie matrycy
3x3 diod dwukolorowych wraz
z zestawem przycisków. Program
umo¿liwia grê w dwójkê oraz
z urz¹dzeniem. Mamy do wyboru
3 poziomy trudnoci. Gramy do
3 zwyciêstw, remisy nie daj¹
punktów nikomu.
Zachêcam wszystkich do wy-
konania tej ¿e gry - na pewno
uchroni nas przed stosem pokre-
lonych kartek i zapewni rozrywkê
np. na nudnych lekcjach czy
wyk³adach.
3 tranzystorów. Na rys. 1 poka-
zano schemat elektryczny urz¹-
dzenia. Mikrokontroler pracuje
w typowej dla siebie aplikacji.
Kondensator C1 ³aduje siê po
w³¹czeniu zasilania, zapewniaj¹c
zerowanie mikrokontrolera. Do za-
silania ca³oci s³u¿y miniaturowy
stabilizator napiêcia 78L05. Uk³ad
zosta³ przewidziany do zasilania
z baterii 9 V.
Bli¿szego omówienia wymaga
czêæ steruj¹ca diodami LED
i przyciskami. Matryca jest stero-
wana multipleksowo co oznacza,
¿e tylko jedna kolumna LED-ów
jest zapalona w danym momencie.
Jednoczenie podczas przemiata-
nia matrycy diod, skanowana jest
klawiatura. Procesor podaje stany
0 na bazy kolejnych tranzystorów
w³¹czaj¹c kolumnê trzech diod.
Nastêpnie z drugiej strony po-
przez inwertery zapewniaj¹ce od-
powiednio du¿¹ wydajnoæ pr¹do-
w¹ (porty procesora w stanie
1 maj¹ j¹ bardzo ma³¹) zapalane
s¹ wybrane diody. Ca³y cykl po-
wtarza siê na tyle czêsto, ¿e
mamy wra¿enie ci¹g³ego wiece-
nia wszystkich LED-ów. Gdy na
bazie danego tranzystora wystêpu-
je 0 i w danej kolumnie naciniê-
ty jest przycisk zaczyna przewo-
dziæ dioda i port mikrokontrolera
jest zwierany do masy. Diody s¹
niezbêdne, aby naciniecie przy-
cisku nie zwiera³o linii na sta³e
Opis dzia³ania
Uk³ad sterowania sprowadza
siê do niemiertelnego procesora
89C4051, szeciu inwerterów s³u-
¿¹cych za bufory wyjciowe oraz
Elektronika Praktyczna 2/2003
33
Gra w kó³ko i krzy¿yk
39642983.035.png 39642983.036.png
Gra w kó³ko i krzy¿yk
Rys. 1. Schemat elektryczny gry
do + zasilania, gdy nie jest ona
wybrana. Oporniki podci¹gaj¹ce
R12...R14 dodano profilaktycznie,
aby unikn¹æ zak³óceñ. Z kolei
R15...R16 s¹ wymagane do popra-
wnej pracy uk³adu jeli zastosu-
jemy inwertery w wersji CMOS
(porty P1.0 i P1.1 s¹ typu otwarty
kolektor).
Na p³ytce drukowanej zamiast
5 rezystorów zastosowano R-Pack.
Rezystory R1...R6 ograniczaj¹ pr¹d
diod do ok. 10 mA, co zapewnia
wystarczaj¹c¹ jasnoæ i maksymal-
ny pobór pr¹du z baterii ok. 30
mA. Dodatkowym osprzêtem jest
przetwornik piezoceramiczny
z wbudowanym generatorem oraz
dwie diody wiec¹ce - czerwona
i zielona, które wskazuj¹ gracza.
Zamiast buzzera mo¿na zastoso-
waæ membranê piezo, lecz gene-
rowany dwiêk jest niskiej jakoci
z powodu cyklicznie wywo³ywa-
nej procedury odwie¿ania matry-
cy. Odpowiednio zmodyfikowane
wersje programów mo¿na znaleæ
na p³ycie CD-EP2/2003B.
niektórych funkcji przez kompila-
tor i braku obs³ugi zmiennych
tablicowych dwuwymiarowych,
które znacznie u³atwi³y by np.
sprawdzanie czy który z graczy
stworzy³ liniê.
Zaraz po uruchomieniu jest
sprawdzane, czy który z klawiszy
nie jest wciniêty. Jeli tak, to
zostaje ca³kowicie wy³¹czony buz-
zer, co umo¿liwia nam granie nie
zwracaj¹c na siebie uwagi ci¹g³ym
pikaniem.
Do wyboru grê w jednym
z dwóch trybów: single player
oraz dual player . Aby zmieniæ
bie¿¹cy tryb pracy nale¿y nacis-
n¹æ przycisk pod diod¹ w dolnym
Dzia³anie programu,
obs³uga gry
Oprogramowanie powsta³o
w Bascom ie 8051. Ca³kowita wiel-
koæ kodu to ok. 3500 bajtów. Jest
to doæ du¿o, ale wynika to po
czêci ze s³abych optymalizacji
34
Elektronika Praktyczna 2/2003
39642983.037.png 39642983.038.png 39642983.001.png 39642983.002.png 39642983.003.png 39642983.004.png 39642983.005.png 39642983.006.png 39642983.007.png 39642983.008.png 39642983.009.png 39642983.010.png 39642983.011.png 39642983.012.png 39642983.013.png 39642983.014.png 39642983.015.png 39642983.016.png 39642983.017.png 39642983.018.png 39642983.019.png 39642983.020.png 39642983.021.png 39642983.022.png 39642983.023.png 39642983.024.png 39642983.025.png
Gra w kó³ko i krzy¿yk
nej partii. Zawszê partiê rozpoczy-
na zwyciêzca z poprzedniej. Gdy
wyst¹pi³ remis gracz inicjuj¹cy jest
losowany. Jeli który gracz wygra³
po raz 3, to po wywietleniu
wyniku ca³e pole zapali siê na
kolor gracza i mignie 3 razy. Na-
ciniecie dowolnego klawisza spo-
woduje powrót do menu wyboru
trybu gry.
Oprogramowanie wykorzystuje
do odwie¿ania wywietlacza we-
wnêtrzny timer procesora 8051.
Nie bêdê przytacza³ ca³ego pro-
gramu, ale procedura wywietla-
j¹ca ( list. 1 ) jest o tyle godna
uwagi, ¿e uzupe³ni wiedzie o dzia-
³aniu sprzêtu.
W programie najwa¿niejsz¹ ro-
lê pe³ni¹ dwie zmienne tablicowe
L(x) oraz S(x). Zawieraj¹ one
informacje o tym, które diody ma-
j¹ byæ zapalone (L) oraz które
przyciski s¹ naciniête. Ca³a pro-
cedura jest ujêta w warunku IF
sprawdzaj¹cym ile razy zosta³o
wywo³ane przerwanie. S³u¿y to
zmniejszeniu czêstotliwoci ska-
nowania. Nastêpnie, w zale¿noci
od wartoci zmiennej refresh , pro-
gram przepisuje zawartoæ tablicy
L(x) do tablicy TL(x). Jest to
przydatne gdy nasza sztuczna in-
teligencja sprawdza ró¿ne mo¿-
liwe kombinacje - poprzez wy³¹-
czenie przepisywania na ekranie
nie bêdzie widaæ mieci.
Wszystkie wyjcia przechodz¹
w stan nieaktywny. Nastêpnie pro-
gram w zale¿noci od zawartoci
zmiennych Pl1 i Pl2 zapala diody
umieszczone ponad polem gry.
Wewn¹trz warunku jest umiesz-
czona swego rodzaju pêtla, dziêki
której stan diody jest negowany
po ok. 200 odwie¿eniach - za-
pewnia to migotanie z czêstotli-
woci¹ ok. 1 Hz. Kolejny warunek
sprawdza, czy nie przekroczyli-
my dopuszczalnej wartoci liczni-
ka kolumn. W zale¿noci od ko-
lumny zmiennym v1 , v2 , v3 oraz
vcol przypisywane s¹ odpowied-
nie wartoci. Zmienne vx zawie-
raj¹ numery pozycji z tablicy do
wywietlenia, a  vcol wartoæ ste-
ruj¹c¹ tranzystorami kolumn.
W wartociach tablicy L(x) bit
0 steruje diod¹ zielon¹, a bit
1 czerwon¹. Wartoci s¹ przepisy-
wane na odpowiednie wyprowa-
dzenia portu P1. Nastêpnie w³¹-
czany jest tranzystor kolumny
(odpowiednia wartoæ w  vcol ).
Rys. 4. Wygl¹d przyk³adowego
pola gry
Rys. 2. Konfiguracja gry
Dalej program sprawdza, czy
który z przycisków nie jest wci-
niêty. Jeli tak - ustawia odpo-
wiedni element tablicy S(x) na 1.
Pewnym problemem by³o wy-
krycie, czy gracz u³o¿y³ zwyciêsk¹
kombinacjê, poniewa¿ Bascom nie
lewym rogu, a nastêpnie przycisk
przeciwleg³y w celu rozpoczêcia
rozgrywki ( rys. 2 ).
Gdy gramy z urz¹dzeniem mu-
simy wybraæ stopieñ trudnoci
gry. ¯eby to zrobiæ naciskamy
jeden z przycisków w rodkowej
kolumnie ( rys. 3 ).
Sztuczna inteligencja naszej
zabawki jest stosunkowo ograni-
czona:
- tryb bardzo ³atwy: program
sprawdza tylko czy mo¿e zrobiæ
ruch tworz¹cy liniê, jeli nie -
losuje,
- tryb ³atwy: jw., sprawdza czy
mo¿e zablokowaæ zwyciêstwo
przeciwnika, jeli tak to losuje
czy ma to zrobiæ,
- tryb normalny: jw., zawsze blo-
kuje kombinacje przeciwnika
umo¿liwiaj¹ce wygran¹.
Po wybraniu ustawieñ zaczyna
siê rozgrywka. Zawsze pierwszy
jest gracz czerwony. Migaj¹ca dio-
da ponad polem gry informuje
który gracz musi teraz wykonaæ
ruch. Przyk³adowa pole gry po-
kazano na rys. 4 . W takim wypad-
ku, po wybraniu przez czerwone-
go gracza pola w górnym prawym
rogu, zwyciêska kombinacja mig-
nie 3 razy i program przedstawi
nam punktacjê, jak przyk³adowo
pokazano to na rys. 5 .
Remis jest sygnalizowany 3
pikniêciami i nikomu nie jest przy-
znawany punkt. W lewej kolumnie
znajduje siê punktacja gracza zie-
lonego, a w prawej czerwonego. Te-
raz naciniecie dowolnego przycis-
ku spowoduje przejcie do nastêp-
List. 1. Procedura obs³uguj¹ca
wywietlanie matrycowe
Scan:
Incr Tim
If Tim = 3 Then
Tim = 0
If Refresh = 1 Then
For Rtemp = 1 To 9
Tl(rtemp) = L(rtemp)
Next Rtemp
End If
P1 = P1 Or &B00111111
P3 = P3 Or &B01111111
If Pl1 = 1 Then
Incr Tim1
If Tim1 = 250 Then
P1.7 = Not P1.7
Tim1 = 0
End If
Else
P1.7 = 1
End If
If Pl2 = 1 Then
Incr Tim2
If Tim2 = 250 Then
P1.6 = Not P1.6
Tim2 = 0
End If
Else
P1.6 = 1
End If
If Col = 4 Then Col = 1
Select Case Col
Case 1:
V1 = 1
V2 = 2
V3 = 3
Vcol = &B01111110
Case 2:
V1 = 4
V2 = 5
V3 = 6
Vcol = &B01111101
Case 3:
V1 = 7
V2 = 8
V3 = 9
Vcol = &B01111011
End Select
P1.0 = Not Tl(v1).0
P1.1 = Not Tl(v2).0
P1.2 = Not Tl(v3).0
P1.3 = Not Tl(v1).1
P1.4 = Not Tl(v2).1
P1.5 = Not Tl(v3).1
P3.0 = 0
P3.1 = 0
P3.2 = 0
P3 = P3 Or Vcol
Temp = P3 And &B00111000
Select Case Temp
Case &B00011000: S(v1) = 1
Case &B00101000: S(v2) = 1
Case &B00110000: S(v3) = 1
Case Else:
S(v1) = 0
S(v2) = 0
S(v3) = 0
End Select
Incr Col
End If
Return
Rys. 3. Wybór stopnia trudnoci gry
Elektronika Praktyczna 2/2003
35
39642983.026.png 39642983.027.png 39642983.028.png
 
Gra w kó³ko i krzy¿yk
List. 2. Procedura obs³ugi
sygnalizatora akustycznego
Sub Beep()
If Beepoff = 0 Then
For Beepx = 1 To 20
P3.7 = 0
Delay
P3.7 = 1
Delay
Next Beepx
End If
End Sub
WYKAZ ELEMENTÓW
Rezystory
R1....R6: 68
W
R9, R10, R11: 1k
W
Rys. 5. W ten sposób jest
sygnalizowana punktacja gry
R12...R16: 10k
W
Kondensatory
C1: 1
F/16V
C2, C3: 33pF
C4: 10
pozwala na tworzenie tablic dwu-
wymiarowych. Postanowi³em wiêc
zastosowaæ sprawdzanie wszyst-
kich mo¿liwy kombinacji. Zachê-
cam zainteresowanych do prze-
jrzenia ca³ego programu - do
ci¹gniêcia z Internetu, dostêpny
jest tak¿e na p³ycie CD-EP2/2003B.
Ma³ego wyjanienia wymaga
jeszcze procedura obs³ugi buzzera,
któr¹ przedstawiono na list. 2 .
Zmienna beepoff zostaje usta-
wiona, gdy przytrzymamy przy
starcie jaki klawisz (patrz wy-
F/16V
C5, C6: 100nF
Pó³przewodniki
D1...D9: 1N4148
DL1...DL9, LED11: LED czerwona
LED10: LED zielona
T1...T3: BC556
U1: AT89CX051 (zaprogramowany)
U2: SN7404N
U3: 78L05
Ró¿ne
B1: BUZZER
X1: 12MHz
S1...S9: SW-PB
m
s), lecz jest to
w praktyce znacznie mniej, po-
niewa¿ praca jest przerywana
przez procedurê odwie¿ania wy-
wietlacza i dochodz¹ opónie-
nia pêtli. W przypadku zastoso-
wania gotowego generatora
z przetwornikiem piezoceramicz-
nym procedura upraszcza
siê do postaci pokazanej
na list. 3 .
Monta¿
i uruchomienie
Urz¹dzenie zmontowano
na p³ytce drukowanej o wy-
miarach ok. 70 x 80 mm,
której schemat monta¿owy
pokazano na rys. 6 . Jest
ona przystosowana do obu-
dowy KM33B (wa¿ne - wer-
sja bez litery B w oznacze-
niu ma maskownicê do
g³onika i nie nadaje siê do
naszego uk³adu). W obudo-
wie przewidziano miejsce
na bateriê 9V.
Pewien problem stanowi
to, ¿e standardowo p³ytka
jest znacznie odsuniêta od
przedniej cianki obudowy
- nale¿y zastosowaæ mikro-
List. 3. Procedura obs³ugi
generatora akustycznego
Sub Beep()
If Beepoff = 0 Then
P3.7 = 0
Waitms 10
P3.7 = 1
End If
End Sub
Rys. 6. Rozmieszczenie elementów
na p³ytce drukowanej
prze³¹czniki z przyciskami o d³u-
goci 9 mm, diody wlutowaæ tak
aby by³y na równi z ³epkami
przycisków.
Po dopasowaniu otworów
w przedniej ciance, musimy przy-
ci¹æ ko³ki wewn¹trz obudowy
i dobraæ odpowiednio d³ugie
wkrêty do skrêcenia ca³oci. ¯eby
p³ytka nie spada³a do wnêtrza
obudowy mo¿na zastosowaæ odpo-
wiedniej d³ugoci tulejki dystan-
sowe lub na drodze wkrêta
wstawiæ uciête fragmenty ko³ków.
Uk³ad po z³o¿eniu i zaprogra-
mowaniu procesora dzia³a od razu
(w zale¿noci od zastosowanego
kondensatora C1 mo¿e startowaæ
dopiero po np. sekundzie).
Micha³ Wysocki
mwsoft@satkabel.com.pl
www.mwsoft.prv.pl
Wzory p³ytek drukowanych w for-
macie PDF s¹ dostêpne w Internecie
pod adresem: http://www.ep.com.pl/
?pdf/luty03.htm oraz na p³ycie
CD-EP2/2003B w katalogu PCB .
36
Elektronika Praktyczna 2/2003
W
R7, R8: 100
m
¿ej). Pêtla for tworzy prosty
generator o czêstotliwoci teore-
tycznie 5 kHz (opónienie delay
- ok. 100
m
39642983.029.png 39642983.030.png 39642983.031.png 39642983.032.png 39642983.033.png 39642983.034.png
Zgłoś jeśli naruszono regulamin