Introducere

Acest proiect consta in realizarea jocului copilariei noastre, Hangman (spanzuratoarea) folosind un display LCD pentru afisare si un keypad de 16 caractere, ambele atasate la porturile microcontroller-ului Atmega16. Scopul urmarit in realizarea acestui proiect este legat atat de partea de divertisment pe care o implica, fiind unul dintre jocurile preferate ale copiilor de pretutindeni, precum si de natura educativa a acestuia prin testarea cunostintelor generale si a capacitatilor cognitive(intuitie si inteligenta) ale participantilor la joc. Implementarea acestui proiect este una simplista incercand sa evidentieze modul de folosire a display-urilor LCD si a keypad-urilor pentru realizarea unor jocuri ce folosesc diverse meniuri si necesita participarea activa a utilizatorilor prin furnizarea unor optiuni.

Descrierea jocului

Toata lumea cunoaste jocul spanzuratoarea: trebuie sa ghicesti un cuvant sau mai multe prin incercari succesive de litere. In mod clasic se joaca pe o foaie de hartie in doi, dar se poate juca si impotriva unui sistem automatizat, folosind dictionare din mai multe categorii. Dupa fiecare incercare, litera selectata se inlocuieste automat in interiorul cuvantului, sau in caz de esec se pierde una din sansele de castig. In cazul imprementarii realizate, daca gresesti de mai mult de dublul numarului de litere ale cuvantului joculetul “te spanzura” >:).

Descriere Generala

Schema Bloc

In figura de mai jos este prezentata schema bloc cu toate modulele continute in proiect:

Descriere Componente

Componentele utilizate pentru implementarea proiectului sunt urmatoarele:

  • Placa de baza ce contine microcontroller-ul Atmega16.
  • Display LCD utilizat pentru afisarea de mesaje utilizatorilor.
  • Keypad cu 16 taste utilizat pentru primirea de input de la utilizator (literele considerate a face parte din cuvantul ghicit sau anumite optiuni corespunzatoare meniului).

Design Hardware

Componentele hardware utilizate sunt urmatoarele:

  • Placa de baza:
  • Display LCD
    • Rezistenta 2.2K pentru conectarea pinului de contrast al LCD-ului la GND
  • Keypad cu 16 caractere
  • Observatii:
    • Din punct de vedere hardware interfatarea LCD-ului este similara celei din laborator singura exceptie fiind reprezentata de existenta pinilor pentru backlight. Astfel interfatarea se relizeaza pin la pin cu microcontroller-ul dupa cum este ilustrat in figurile de mai sus. Am folosit un LCD cu doua linii si 16 caractere, pentru testarea functionalitatii lui punand o rezistenta de 2.2 kohmi intre pinul de contrast si ground. Am realizat o interfatare specifica unui mod de lucru restrans folosind numai patru biti de date. Am preferat aceasta abordare deoarece este nevoie de doar 7 biti pentru controlul complet al LCD-ului (chiar daca la jumatate de viteza). Toti cei 7 biti au fost mapati in acelasi registru de IO al microcontrollerului si anume registrul specific portului A (D4 - D7(Data4 - Data7) → PA0 - PA3, RS(instructions/data) → PA4, RW(read/write) → PA5, E(enable) → P6, VSS → GND, VDD → Vcc, VEE(contrast) → GND(prin intermediul unei rezistente)).
    • In mod asemanator a fost interfatata si tastatura direct la pinii portului C ai microcontroller-ului. Tastatura prezinta 16 caractere fiecare avand un buton specific accesat prin intermediul unui pin linie si a unui pin colona, in total existand 8 pini prin intermediul carora se face interfatarea acesteia cu cei 8 pini ai portului C din cadrul microcontroller-ului Atmega16.

Design Software

Proiectul a fost realizat si compilat folosind WinAVR. Functionalitatea acestuia este urmatoarea:

  • Jocul este destinat folosirii de catre doi utilizatori simultan: unul care va introduce un cuvant si celalalt care va fi provocat sa ghiceasca respectivul cuvant.
  • Initial utilizatorilor li se prezinta un mesaj de bun-venit si sunt intrebati daca doresc sa inceapa jocul. In caz afirmativ utilizatorii pot incepe procedurile necesare desfasurarii jocului. Primul utilizator va introduce numarul de litere ale cuvantului dorit si mai apoi va continua cu introducerea cuvantului respectiv. Dupa ce aceasta operatiune ia sfarsit celalalt utilizator incepe jocul ghicirii valorii introduse avand posbilitatea sa introduca un numar dublu lungimii cuvantului de litere gresite pana cand jocul este pierdut si jucatorul “spanzurat”.

Modulele principale ale programului sunt urmatoarele:

  • Interfatarea display-ului LCD:
    • void LCD_init();                                        // Initializare modul LCD.Trebuie apelata inainte de a se face orice operatie cu LCD-ul
      void LCD_writeInstruction(unsigned char _instruction);	// Trimite o instructiune catre lcd (vezi datasheet)
      void LCD_writeData(unsigned char _data);		// Trimite date catre LCD pentru afisare
      void LCD_write(unsigned char _byte);			// trimite un bute catre LCD la modul general (nu conteaza daca e instructiune sau date)
      void LCD_waitNotBusy();					// Asteptam pana cand lcd-ul devine disponibil pt o noua comanda
      void LCD_waitInstructions(unsigned char _instructions);	// Asteapta un numar de cicli de ceas.
      void LCD_print(char* _msg);				// Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere)
      void LCD_print2(char* _msg1, char* _msg2);		// Afisare pe 2 lini pe LCD
      void LCD_printDecimal2u(unsigned int _n);		// Afisare numar in baza 10 pe LCD
      void LCD_printHexa(unsigned int _n);			// Afisare numar in baza 16 pe LCD
  • Interfatarea keypad-ului:
    • int get_column();                                       // Obtinere coloana buton apasat
      int get_row();                                          // Obtinere rand buton apasat
      char read_letter();                                     // Citire litera in functie de butoanele apasate
      int read_number();                                      // Citire cifra in functie de butoanele apasate
    • Posibilitatea introducerii de litere este disponibila prin urmatoarea tehnica:
      • Cifrele de la 1 la 9 au asociate fiecare cate un sir de caractere: “abc”, “def”, “ghi”, “jkl”, “mno”, “pqr”, “stu”, “vwx”, “yz”.
      • Mai intai se va apasa butonul specific pentru selectarea sirului de caractere si apoi se va apasa un buton suplimentar pentru selectarea caracterului din cadrul sirului (* - 1, 0 - 2, # - 3).

Rezultate obtinute

Rezultatele obtinute costau in implementarea atat a partii hardware cat si a celei software conform specificatiilor. Drept exemplificare pot fi vizualizate imaginile urmatoare:

Concluzii

Implementarea acestui joculet a fost destul de simplista si nu am intampinat dificultati nici la realizarea partii hardware, nici la impelmentarea sofware-ului care sa ruleze pe aceasta. Mi-ar fi placut totusi sa realizez o versiune complexa a acestui joc care sa permita mai multe optiuni si posibilitati de joc, insa acest lucru trebuia anticipat si aplicat in primul rand in alocarea timpului pentru acest proiect.

Referinte

Download

pm/prj2010/rtataroiu/hangman-ionelavoinescu.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