Mi-am propus sa realizez un joc de tipul Snake, comandat printr-o tastatura PS2. Pentru reprezentarea grafica a jocului voi folosi un afisaj LCD de Nokia 3310.
Va fi un singur jucator. Schema bloc este urmatoarea :
Pentru interactiunea cu jucatorul uman voi folosi sagetile de la o tastatura PS2. Calculatorul va genera pozitii random pentru bilele pe care va trebui sa le manance snake-ul, iar la fiecare noua bila mancata, snake-ul va creste in lungime. Jocul se va incheia atunci cand snake-ul se va lovi fie de peretii inconjuratori fie de el insusi, si ii va fi calculat un scor bazat pe lungimea sa.
Pentru realizarea hardware a acestui proiect, sunt necesare, pe langa placa de baza, urmatoarele componente:
- LCD de Nokia 3310
- 5 rezistente 3k3
- 5 rezistente 1k8
Limbaj de programare : C
Mediu dezvoltare : Notepad++
Compilator : AVR-GCC
Pentru lucrul cu display-ul LCD de Nokia 3310 am folosit functiile din primul laborator de PM :
/************************************************************************ * DEFINE-uri pentru parametrizarea modulului LCD ************************************************************************/ #define LcdDATA_DDR DDRA // Portul pe care conectam firele de date la LCD-ul #define LcdDATA_PORT PORTA #define LcdDATA_PIN PINA #define LcdCMD_DDR DDRA // Portul pe care conectam firele de comenzi la LCD #define LcdCMD_PORT PORTA #define LcdCMD_PIN PINA #define LcdD4 PA0 // Pin-ul pentru firul de date D4 de pe LCD #define LcdD5 PA1 // Pin-ul pentru firul de date D5 de pe LCD #define LcdD6 PA2 // Pin-ul pentru firul de date D6 de pe LCD #define LcdD7 PA3 // Pin-ul pentru firul de date D7 de pe LCD #define LcdRS PA4 // Pinul pentru selectare operatie (LCD) #define LcdRW PA5 // Pinul pentru Read/ Write (LCD) #define LcdE PA6 // Pinul de Enable (LCD) #define LCD_INSTR_4wire 0x28 // 4 fire date, font 5x8 #define LCD_INSTR_display 0x0C // Display On, Cursor On, Blinking On ( 1 Display Cursor Blink ) #define LCD_INSTR_clearDisplay 0x01 // Clear Display #define LCD_INSTR_returnHome 0x02 // Return Cursor and LCD to Home Position #define LCD_INSTR_nextLine 0xC0 // Return Cursor and LCD to Home Position #define LCD_INSTR_gotoCGRAM 0x40 // go to Character Generator RAM /************* * API 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
In constructie.
Din pacate, lipsa timpului nu mi-a permis sa finalizez proiectul.
Detalii joc : http://en.wikipedia.org/wiki/Snake_(video_game)
Driver LCD : http://www.quantumtorque.com/content/view/32/37/
Datasheet LCD : http://www.amontec.com/lcd_controller_pcd8544.pdf
Datasheet Atmega16 : http://www.datasheetcatalog.com/datasheets_pdf/A/T/M/E/ATMEGA16.shtml