Table of Contents

Calculator de buzunar

Introducere

Scopul acestui proiect a fost implementarea hardware si software a unui calculator de buzunar cu urmatoarele functionalitati:

Descriere generală

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.

Hardware Design

Piese folosite

Schema

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:

Software Design

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 ++)

Rezultate Obţinute

Momentan, proiectul nu este functional, pentru ca LCD-ul nu preia bine datele de la microcontroler.

Concluzii

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.

Download

calculator.zip

Bibliografie/Resurse

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