Introducere

Proiectul presupune realizearea unui joc electronic. Obiectivul acestui joc este acela de a ghici un numar de cinci cifre generat aleator. Jucatorul are la dispozitie 9 incercari pentru a ghici acest numar. In ajutorul jucatorului vin 5 leduri verzi si 5 leduri rosi care vor indica cate cifre corecte au fost introduse pe pozitii corecte si, respectiv, cate cifre corecte au fost introduse pe pozitii gresite.

De asemenea, pe designul acestui joc poate fi implementat software fara probleme si un joc in gen joc de memorie (secvente de leduri aprinse).

Ideea acestui joc se bazeaza oarecum pe jocul MasterMind (http://en.wikipedia.org/wiki/Mastermind_%28board_game%29) desi prezinta un grad mai mare de dificultate.

Descriere Generala

Schema Bloc a componentelor proiectului:


Mod de interactiune:

Microcontroller-ul va genera un numar de 5 cifre in mod aleator dupa care va astepta sa primeasca un numar de cinci cifre introduse, pe rand, de la tastatura de catre utilizator. Pe baza comparatiei dintre cifrele celor doua numere, microcontroller-ul va aprinde numarul corespunzator de Led-uri verzi/rosi. De asemenea, pe LCD va fi afisat ultimul nr introdus de la tastatura precum si nr. de incercari ramase, nr. de jocuri pierdute si nr. de jocuri castigate.
Pentru a incepe un joc nou, din starea de game over(→ jocul a fost castigat sau pierdut), se apasa tasta *.

Hardware Design

Lista de piese folosite:

  • 5 Led-uri Albe 5mm
  • 5 Led-uri Rosii 3mm
  • 10 Rezistente de 1K Ohm
  • 1 Tastatura 3×4
  • 1 Ecran Lcd 16×2

Schema electrica realizata in Proteus ISIS:

Software Design

Codul a fost dezvoltat in AVR Studio 4. Programul contine 3 fisiere sursa:

  • Lcd.c
  • Keypad.c
  • Game.c

Metode principale Lcd.c:

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

Se observa ca implementarea folosita pentru LCD este cea de la laborator.

Meode principale Keypad.c:

void key_init(); //initializam coloanele ca input cu pull-up si liniile ca output de 1
uint8_t get_key();// detectam cheia apasata sau nici o cheie (valoare 13)

Pentru keypad m-am inspirat de la http://www.8051projects.net/keypad-interfacing/avr-programming.php.

Metode principale Game.c:

void Light_init();//initializez porturile de output pt leduri
void Light(uint8_t right, uint8_t aright);//aprind Led-urile care sa indice nr de cifre corecte pe pozitii corecte si celor pe pozitii gresite
void Game_init(); //jocul in sine
void seed_gen_init();//va seta un nou seed de generare a numerelor aleatoare prin incarcarea unei valorii de pe eeprom
int main(); //metoda principala unde apelez metodele de init pt lcd, keypad si game

In ceea ce priveste algoritmul de functionare, se intra intr-o bucla while unde se verifica daca a fost apasata o cheie. In caz pozitiv, se verifica daca acesta cheie umple un nr de introdus de utilizator (este a cincea cifra). Daca da se compara numarul de ghicit cu cel introdus si in baza rezultatului se trimit mesaje corespunzatoare la LCD si Led-uri.

Exemplu de output pe LCD:

Rezultate Obţinute

Jocul obtinut merge impecabil, respectand obiectivele propuse in intregime.
Cateva poze:

Concluzii

Proiectul pune la dispozitia unui utilizator un joc interactiv si interesant. De asemenea, designul proiectului permite si implementarea altor moduri de joc.
In rest, rezultatele cu placuta vorbesc de la sine.

Bibliografie/Resurse

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