Scopul proiectului este crearea unui dispozitiv similar unui calculator de buzunar care să poată efectua operaţiile aritmetice de bază:
şi funcţiile trigonometrice:
Privind utilitatea acestuia, consider ca e o metodǎ foarte bună pentru a invǎţa şi a experimenta, din punctul de vedere al începătorului în domeniul proiectării microprocesoarelor. Utilitatea produsului final este evidentă.
Schema bloc cu modulele hardware şi software ale proiectului:
Prin intermediul modulului “Interfata tastatura”, microprocesorul preia datele introduse de utilizator prin keypad(cifre/operatori/paranteze/reset).
Microprocesorul poate avea drept input un buton. La apǎsǎri succesive, se va efectua operaţia arcsin, respectiv arccos, alternativ.
Dupa validarea operaţiei cerute şi efectuarea calculelor, microprocesorul afiseaza rezultatul pe LCD, cu ajutorul modului software “Interfata LCD”.
Pe lânga plǎcuţa de bazǎ, realizatǎ în prima etapă, mai sunt necesare urmǎtoarele piese:
Urmǎtoarea schemǎ(ISIS Proteus) prezintǎ modul in care componentele menţionate anterior se leagă la placuţa de bazǎ:
Ţinând cont de faptul ca pinii:
erau deja folosiţi de componentele menţionate în dreptul lor, voi ataşa noile piese, astfel:
Soluţia aleasă este conectarea pinilor corespunzători liniilor în portul B (A:PB1, B:PB2, C:PB3, D:PB4) şi conectarea
pinilor corespunzători coloanelor în portul A (1:PA2, 2:PA3, 3:PA4, 4:PA5, 5:PA6, 6:PA7), adicǎ în porturi separate.
Acest lucru va spori puţin complexitatea modulului de interfaţare a keypadului.
Modulul software de interfaţare a LCD-ului se va baza pe API-ul din primul laborator:
void LCD_init(); // Initializare modul LCD. // Trebuie apelata inainte de a se face orice operatie cu LCD-ul. // Initializarea este facuta considerand o interfatare pe 4 fire. void LCD_writeInstruction(unsigned char _instruction); // Trimite o instructiune catre l. void LCD_writeData(unsigned char _data); // Trimite date catre LCD pentru afisare. void LCD_write(unsigned char _byte); // Trimite un byte catre LCD pe pinii D4-7 in 2 timpi. // Se trimit intai bitii mai semnificativi si apoi cei mai putin semnificativi. void LCD_waitNotBusy(); // Functia asteapta pana cand lcd-ul devine disponibil pt o noua comanda. void LCD_print(char* _msg); // Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere din msg) void LCD_print2(char* _msg1, char* _msg2); // Afisare pe 2 lini pe LCD. // Pe prima linie afiseaza _msg1 si pe a 2-a _msg2. 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 void LCD_waitInstructions(unsigned char _instructions); // Asteapta un numar de cicli de ceas
În ceea ce priveşte detecţia tastei apǎsate, microcontrollerul va scana continuu keypad-ul:
Din intersecţia liniei şi coloanei, se obţine tasta apăsată.
Etapele efectuării calculelor numerice: