2011_P16

Table of contents

1. Results [edit]

2. Download [edit]

Calculator de buzunar

Project Description

Pentru proiect avem de implementat un calculator cu ajutor placii Z3. Calculatorul va implementa urmatoarele operatii:

  • adunare, scadere, inmultire, impartire, modulo
  • sinus, cosinus
  • logaritm in baza 2 si in baza 10

Project Requirements

Trebuie sa emulati Calculatorul din Windows.

Operatii: + - * / % intreaga

logaritm - intreg (baza 2 10)

cos sin

La logaritm ma intereseaza ce algoritm folositi. La cos/sin folositi tabele de cosinus si sinus (atentie la memoria maxima folosita - << 32-8KB)

User Flow

 

Se incarca programul ce se vrea rulat cu metoda binecunoscuta de la laborator apoi facem pasii Go->0800-0000->CHG/RET si va incepe executia programului.

Datorita insuficientei de butoane avute la dispozitie vom face implementarea operatiilor +,-,/,*,% intr-un program iar in altul operatiile sin, cos, log2, log10;

Din aceasta clipa utilizatorul poate folosi oricare din functiile implementate in programul respectiv.

Implementarea butoanelor:

Pentru program:

0->9 tastele numerice;

A-> '+' ;

B-> '-' ;

C-> '*' ;

D-> '/' ;

E-> '%' ;

F-> 'CE';

arrow-right-> 'sin';

arrow-left-> 'cos';

CHG/RET-> "=" ;

 

Tastatura avuta la dispozitie si displayul LCD :

 

Required components

Implementarea tastelor pentru Program1:

 

 

Din platform_io.h am folosit functia ReadKey pentru citirea inputurilor is DisplayString pentru afisarea datelor prelucrate.

 

Software Design

In primul rand a trebuit sa construim o metoda care va atribui fiecarei tasta valoarea inscriptionata pe ea (atribuirea facuta de producator e cel putin defectuoasa) si anume metoda convert();
char convert(int key){
static char cod[19]={'0','2','4','6','8','A','C','E','c','l','1','3','5','7','9','B','D','F','r'};
return cod[key];
}
Programul este bazat in jurul unui switch-case care evalueaza daca tastei apasate ii corespunde o operatie sau nu; in caz ca e adevarat se va efectua operatia respectiva in caz ca nu automat s-a introdus un numar care va fi salvat, aceasta fiind optiunea default:
switch(c)
{
case 'A' : { operatie='p'; nr1=nr2; nr2=0; break;}
case 'B' : { operatie='m'; nr1=nr2; nr2=0; break;}
case 'C' : { operatie='i'; nr1=nr2; nr2=0; break;}
case 'D' : { operatie='d'; nr1=nr2; nr2=0; break;}
case 'E' : { operatie='r'; nr1=nr2; nr2=0; break;}
case 'F' :{nr2=0;nr1=0;break;}
case 'r' :{s=sin[nr2];nr2=0;i=1;break;}
case 'l' :{s=sin[90-nr2];nr2=0;i=1; break;}
case 'c' : {switch (operatie)
{
case 'p': {nr2=nr2+nr1;break;}
case 'm': {nr2=nr1-nr2;break;}
case 'd': {nr2=nr1/nr2;break;}
case 'r': {nr2=nr1%nr2;break;}
case 'i': {nr2=nr1*nr2;break;}
}break;}
default :{
nr2=nr2*10 + (c-'0');
}

}
c-> inputul de la tastatura;
Daca tasta apasata nu corespunde unei operatii se va memora char-ul/-ile introdus/e de la tastatura intr-un integer ca apoi va fi afisat folosind metoda afisare() -care este secreta din motive de spionaj industrial;
La fel s-a procedat si la Programul 2 cu observatia ca pentru functiile sin si cos s-a folosit  un vector de valori,
sin(x) returnand valoarea de pe pozitia lui x si cos(x)=sin(90-x) - nice and simple :D.

Results [edit]

Consider ca aceste aspecte au fost deja acoperite in capitolele precedente.

Download [edit]

Arhiva cu schema hardware + cod microcontroller + tot proiectul OpenWatcom.

Arhiva va contine 2 directoare (1 singur pentru proiecte doar software)

Hardware design - schema uC + codul folosit pentru a genera fisierul .HEX

Software design - template-ul Open Watcom folosit

Status

20 Aprilie-> in sfarsit am gasit o placa Z3 care functioneaza corect :D

27 Aprilie-> am implementat convert si am reusit sa citim de la tastatura + DisplayString afiseaza corect pe LCD

11 Mai-> Program este terminat switch-case-ul functioneaza :)

17 Mai-> Finalizat Program si testat proiectul :D:D