Pada ulasan berikut ini saya akan membahas tentang cara membuat kalkulator sederhana menggunakan atmega16. Pada umumnya fungsi kalkulator sendiri adalah sebagai alat bantu kita dalam proses perhitungan agar lebih mudah dan cepat, disini saya akan membuat kalkulator sederhana dengan output LCD yang berfungsi sebagai penampil yang digunakan untuk status kerja dan dengan input keypad matrik yang berfungsi sebagai masukan yang nantinya akan kita gunakan.
Berikut adalah tampilan skematik dari proteus;
Berikut adalah listing program dari aplikasi kalkulator menggunakan atmega16;
#include <mega16.h>
#include <delay.h>;
#include <lcd.h>;
#include <stdlib.h>;
#include <math.h>;
#define scanKeypad 1
#define stopScan 0
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>;
int bacaKeyPad(void);
float kalkulator(void);
int operand1 = 0 , operand2 = 0 ;
float hasil = 0 ;
char kode=0 , bufferLCD[50] ;
void main(void)
{
PORTA=0x00;
DDRA=0x0F;
PORTC=0x00;
DDRC=0x00;
lcd_init(20);
while (1)
{
kalkulator();
};
}
//==================
int bacaKeyPad(void){
char StatusBaca = scanKeypad ;
while(StatusBaca==scanKeypad){
PORTA.0 = 1 ;
PORTA.1 = 0 ;
PORTA.2 = 0 ;
PORTA.3 = 0 ;
if(PINA.4 == 1){return 7 ; StatusBaca = stopScan;}
if(PINA.5 == 1){return 8 ; StatusBaca = stopScan;}
if(PINA.6 == 1){return 9 ; StatusBaca = stopScan;}
if(PINA.7 == 1){return 10; StatusBaca = stopScan;}
//==========================================
PORTA.0 = 0 ;
PORTA.1 = 1 ;
PORTA.2 = 0 ;
PORTA.3 = 0 ;
if(PINA.4 == 1){return 4 ; StatusBaca = stopScan;}
if(PINA.5 == 1){return 5 ; StatusBaca = stopScan;}
if(PINA.6 == 1){return 6 ; StatusBaca = stopScan;}
if(PINA.7 == 1){return 11; StatusBaca = stopScan;}
//==========================================
PORTA.0 = 0 ;
PORTA.1 = 0 ;
PORTA.2 = 1 ;
PORTA.3 = 0 ;
if(PINA.4 == 1){return 1 ; StatusBaca = stopScan;}
if(PINA.5 == 1){return 2 ; StatusBaca = stopScan;}
if(PINA.6 == 1){return 3 ; StatusBaca = stopScan;}
if(PINA.7 == 1){return 12; StatusBaca = stopScan;}
//==========================================
PORTA.0 = 0 ;
PORTA.1 = 0 ;
PORTA.2 = 0 ;
PORTA.3 = 1 ;
if(PINA.4 == 1){return 15; StatusBaca = stopScan;}
if(PINA.5 == 1){return 0 ; StatusBaca = stopScan;}
if(PINA.6 == 1){return 14; StatusBaca = stopScan;}
if(PINA.7 == 1){return 13; StatusBaca = stopScan;}
StatusBaca = scanKeypad ;
}
}
//==========================
float kalkulator(void)
{
int StatusBaca = scanKeypad ;
kode = bacaKeyPad();
if( kode < 10 ) // kalau angka 0-9 ditekan
{
operand1 = (operand1*10)+ kode ;
itoa(kode , bufferLCD); // rubah kode ke ASCII
lcd_puts(bufferLCD); //tampilkan kode operand1 yg ditekan
delay_ms(50);
}
//==========================
if( kode >; 9 &amp;amp;&amp;amp; kode < 16 ) // jika ditekan 10,11,12,13,14,15 (X, -, +, atau /)
{
if(kode == 10)lcd_putchar('/') ;
if(kode == 11)lcd_putchar('X') ;
if(kode == 12)lcd_putchar('-') ;
if(kode == 13)lcd_putchar('+') ;
operator = kode; // simpan operator yg dipilih
{
kode = bacaKeyPad();
if( kode < 10 )
{
operand2 = (operand2*10)+kode ;
itoa(kode , bufferLCD); // rubah kode ke ASCII
lcd_puts(bufferLCD); //tampilkan kode operand2 yg ditekan
delay_ms(50);
}
else if(kode == 14) //jika ditekan &quot;=&quot; laksanakan operasi
{
lcd_putchar('=');
if(operator == 10){ // jika ditekan '/'
hasil = operand1 / operand2 ;
}
if(operator == 11){ // jika ditekan 'X'
hasil = operand1 * operand2 ;
}
if(operator == 12){ // jika ditekan '-'
hasil = operand1 - operand2 ;
}
if(operator == 13){ // jika ditekan '+'
hasil = operand1 + operand2 ;
}
ftoa(hasil , 1 , bufferLCD); // rubah hasil ke string ( string adalah array berisi ascii diakhiri NULL )
lcd_puts(bufferLCD); // print hasil ke LCD
delay_ms(100);
kode = 0 ;
StatusBaca = stopScan ;
}
}
}
//==============================
return 0;
}
Cukup sekian dan selamat mencoba .
Komentar spam dilarang
EmoticonEmoticon