Scopul acestui proiect a fost implementarea hardware si software a unui calculator de buzunar cu urmatoarele functionalitati:
In momentul in care se apasa o tasta care reprezinta un numar sau un operator, pe LCD se va afisa caracterul respectiv. Cand se apasa egal, se face calculul si se afiseaza rezultatul, iar cand se apasa clear se sterge ecranul.
Tipul de tastaura folosit este putin mai “anormal”. Astfel:
Pinul 1 corespunde coloanei 2
Pinul 2 corespunde randului 1
Pinul 3 corespunde coloanei 1
Pinul 4 corespunde randului 4
Pinul 5 corespunde coloanei 3
Pinul 6 corespunde randului 3
Pinul 7 corespunde randului 2
Conectarea LCD-ului la ATMEGA16 se face folosind portul C. Conectarea Tastaturilor la ATMEGA16: Tastura 1:
Tastatura 2:
Mediu de dezvoltare : Notepad ++ Limbaj de programare : C Sistem de operare : Windows 2008 Server 32 biti
In implementare, am folosit API-ul de LCD din laboratorul 2:
void LCD_init();
void LCD_writeInstruction(unsigned char _instruction);
void LCD_writeData(unsigned char _data);
void LCD_write(unsigned char _byte);
void LCD_waitNotBusy();
void LCD_waitInstructions(unsigned char _instructions);
void LCD_print(char* _msg);
void LCD_print2(char* _msg1, char* _msg2);
void LCD_printDecimal2u(unsigned int _n);
void LCD_printHexa(unsigned int _n);
void LCD_gotoXY(unsigned char x, unsigned char y);
Am adaugat functiile key_init()
si get_key()
care initializeaza respectiv returneaza tasta apasata.
In incercarea de a obtine functionalitatea programului, am implemenentat urmatorul algoritm :
Se verifica valoarea tastei apasate : In cazul unei cifre este pur si simplu afisata pe ecran si valoarea sa adaugata unui sir de caractere,ce reprezinta numarul cu care se vor face operatii. In cazul unui operator, se retine intr-un sir auxiliar numarul de pe ecran, se da clear, se scrie operatorul si se asteapta un al doilea numar. In cazul de '=', se calculeaza si se afiseaza rezultatul operatiei si se retine intr-un sir. In cazul clear, se sterge tot de pe ecran. La fiecare pas se pastreaza ultimul operator folosit, care este verificat inainte de fiecare noua operatie (pentru a evita situatii gen ++)
Momentan, proiectul nu este functional, pentru ca LCD-ul nu preia bine datele de la microcontroler.
Proiectul a fost unul interesant si destul de usor de realizat din punct de vedere hardware, desi eu am intampinat mari probleme la conectarea LCD-ului. Eu consider ca implementarea unui calculator de buzunar a fost o ocazie buna de a vedea complexitatea din spatele unei simple adunari.
Datasheet ATMEGA16 Datasheet LCD http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s1999/sam/ http://www.8051projects.net/keypad-interfacing/avr-programming.php http://www.societyofrobots.com/robotforum/index.php?topic=12557.5;wap2 http://extremeelectronics.co.in/avr-tutorials/4x3-matrix-keypad-interface-avr-tutorial/ http://winavr.scienceprog.com/example-avr-projects/4x4-keypad-example-using-avr-gcc-c-language.html