Andrei DUMITRESCU (67382) - Hangman 2.0 pe LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Ce face?

Proiectul presupune implementarea jocului Hangman(spanzuratoarea), ce prezinta mai multe functionalitati fata de jocul original. Pe display-ul LCD 16×2 va fi afisat cuvantul (literele ghicite pana in momentul respectiv, celelalte fiind ascunse si inlocuite cu caracterul “_”) si numarul de incercari ramase jucatorului. Jucatorul poate introduce literele de la o tastatura 4×4.

Ideea de la care am pornit?

Am vrut sa implementez un joc de Hangman, care insa sa fie un pic mai complex fata de jocul original. Astfel proiectul va avea mai multe functii in afara de cea cunoscuta, permitand jucatorului sa isi personalizeze jocul (limba din care provine cuvantul, domeniul, etc.).

Utilitate?

Este util pentru mine deoarece ma ajuta sa ma familiarizez cu procesul de creare/implementare a unui proiect de acest gen si util in general pentru ca poate fi personalizat dupa preferintele unui jucator interesat de un joc de acest gen.

Descriere generală

Schema bloc

<imgcaption image1|>Adds an ImageCaption tag</imgcaption>

Jucatorul va primi un cuvant de o lungime aleatoare (ce va aparea pe display-ul LCD 16×2) si acesta va avea un numar limitat de incercari de a ghici cuvantul respectiv. Jucatorul introduce literele cu ajutorul keypad-ului cu 16 taste. Introducerea se va face astfel: keypad-ul va folosi aproximativ acelasi principiu ca o tastatura de telefon, astfel incat fiecarui numar de pe keypad ii sunt asociate 3 litere ce pot fi alese apasand tasta 1-9 in combinatie cu una din litere A,B,C,D. In momentul in care jucatorul a ghicit o litera, aceasta va aparea pe ecran de cate ori era prezenta in cuvant. Daca jucatorul a gresit de prea multe ori, jocul se termina. De asemenea jucatorul poate alege limba in care sa fie scris cuvantul (numarul de limbi in care poate fi scris cuvantul va fi limitat), litera cu care sa inceapa cuvantul sau domeniul din care sa fie cuvantul (istorie, geografie, flora, fauna, etc.).

Hardware Design

Lista componente de baza

Denumire Cantitate Distribuitor Pret
Microcontroller ATMEGA324A-PU 1 Farnell 18,84
Mufa USB tip-B 1 Farnell 3,42
Soclu microcontroller 1 Farnell 2,85
Diode ZENER 2 Farnell 0,08
Condensator 100nF 3 Farnell 0,34
Condensator 15pF 2 Farnell 0,20
Rezistenta 10K 1 Farnell 0,18
Rezistenta 1.5K 1 Farnell 0,14
Rezistente 100 3 Farnell 0,16
Rezistente 470 3 Farnell 0,17
LED Rosu 2 Farnell 0,31
Push Button 2 Farnell 0,29
Quartz 1 Farnell 0,81
Header 1×40 1 Farnell 5.89
Jumper 1 Farnell 0,51
Total - - 34,19

<imgcaption image2|>Adds an ImageCaption tag</imgcaption>

Lista piese

Denumire Cantitate Distribuitor Pret
Placa de baza 1 - 8
Componente de baza PM 2017 1 Farnell 34,19
Display LCD 16×2 cu backlight 1 Optimus 10,49
Keypad cu 16 taste 1 Optimus 4,99
Rezistenta 10k 1 Farnell 0,14
Rezistenta 1k 1 Farnell 0,15
Fire mama-tata 2 Optimus 8,90
Header 1×40 1 Farnell 5.89
Total - - 72.75

<imgcaption image3|>Adds an ImageCaption tag</imgcaption>

Schema electrica

<imgcaption image4|>Adds an ImageCaption tag</imgcaption>

Keypad-ul 4×4 a fost conectat ulterior la portul A.

Software Design

Mediul de dezvoltare

  • Programmer's Notepad (WinAVR) → mediul de dezvoltare al programului;
  • HIDBootFlash → programul prin care se incarca fisierul .hex.

Biblioteci

  • avr/io.h;
  • util/delay.h.

Surse

  • lab1.c → in care se afla logica de afisare pe LCD, prin verificarea pinilor setati si tastelor apasate;
  • lcd.c → in care se afla functii auxiliare utile pentru afisarea pe LCD.

Logica jocului

Jucatorul are 6 incercari de a ghici cuvantul ce este afisat in prima faza prin “_”. Prim apasarea combinata a doua taste jucatorul va introduce o litera. Daca litera este corecta, aceasta se va afisa pe ecran de cate ori este prezenta in cuvant, iar in cazul contrar se va scadea o incercare din numarul total mentionat anterior. Logica selectarii literelor este mai putin intuitiva, dar se face similar cu tastarea la telefoanele mobile cu taste, unde fiecarei taste ii sunt asociate mai multe litere. Astfel, cifrele de pe keypad de la 1 la 9 au asociate in ordine cate unul din sirurile de caractere: “abc”, “def”, “ghi”, “jkl”, “mno”, “pqr”, “stu”, “vwx”, “yz”. Pentru a introduce o litera, se apase pe cifra sirului respectiv de litere si apoi pe tastele A, B sau C pentru a selecta litera corespunzatoare.

Implementarea programului este realizata aproape exclusiv in main, cu exceptia unei functii auxiliare numite search(), ce realizeaza cautarea literei introduse de catre jucator din keypad in interiorul cuvantului ce trebuie ghicit. Daca litera este gasita, atunci este afisata pe LCD in toate pozitiile in care este prezenta.

Implementarea in sine este una simpla, verificand ce pini sunt setati, in functie de apasarea keypad-ului si astfel stabilind ce litera a introdus jucatorul de la keypad. Pe LCD sunt afisate numarul incercari si literele descoperite in momentul respectiv.

Pentru implementarea logicii LCD-ului 16×2 m-am folosit de laboratorul 1, deoarece LCD-urile sunt similare (http://cs.curs.pub.ro/wiki/pm/lab/lab1) si de data sheet-ul LCD-ului RC1602 http://www.raystar-optronics.com/UserFiles/RC1602B-BIW-JSX.pdf.

Pentru logica keypad-ului am urmat un exemplu simplu gasit pe net cu un keypad similar. http://winavr.scienceprog.com/example-avr-projects/4x4-keypad-example-using-avr-gcc-c-language.html

Rezultate Obţinute

<imgcaption image5|>Adds an ImageCaption tag</imgcaption>

Concluzii

A fost un proiect interesant. Consider ca a fost o experienta placuta din care am invatat foarte multe lucruri noi, dar cel mai important am invatat cum sa ma descurc la un proiect de tip hardware/software.

Download

Arhiva se poate descarca de aici:

hangman_dumitrescu_andrei_333ca.rar

Jurnal

4 Mai - Am terminat de lipit placa de baza.

<imgcaption image6|>Adds an ImageCaption tag</imgcaption>

6 Mai - Am comandat toate piesele necesare proiectului.

<imgcaption image7|>Adds an ImageCaption tag</imgcaption>

11 Mai - Am programat placuta la laborator, incarcand un program simplu ce facea un led sa clipoceasca.

14 Mai - Am conectat keypad-ul 4×4. (Ulterior am conectat keypad-ul la portul A)

<imgcaption image8|>Adds an ImageCaption tag</imgcaption>

18 Mai - Am lipit LCD-ul 16×2 si l-am conectat pe placa.

19 Mai - Am lipit si conectat toate piesele necesare proiectului (keypad + LCD + placa de baza).

<imgcaption image9|>Adds an ImageCaption tag</imgcaption>

23 Mai - Am terminat de scris programul si l-am incarcat pe placa.

<imgcaption image10|>Adds an ImageCaption tag</imgcaption>

Bibliografie/Resurse

Resurse Hardware

Resurse Software

  • Documentația în format PDF
pm/prj2017/amocanu/adumitrescu.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0