LCD DISPLAY dengan KEYPAD ATMEGA16

LCD DISPLAY dengan KEYPAD ATMEGA16
          Pada postingan kali ini akan membahas tentang menampilkan karakter pada lcd menggunakan keypad sebagai sumber input. LCD dengan KEYPAD ini diaplikasikan dengan pemrograman dasar kalkulator yang terintegrasi dengan sismin ATMEGA16. LCD (Liquid Crystal Display) adalah suatu jenis media tampil yang menggunakan kristal cair sebagai penampil utama. Aplikasi yang sudah diterapkan pada alat–alat elektronik seperti televisi, kalkulator, AC, atau pun layar komputer.
          Fungsinya sebagai penampil yang nantinya akan digunakan untuk menampilkan status kerja alat untuk sistem pemantauan.
Keterangan :
GND : catu daya 0Vdc
VCC : catu daya positif
Constrate : untuk kontras tulisan pada LCD
RS (Register Select) :
High : untuk mengirim data
Low : untuk mengirim instruksi
R/W (Read/Write)
High : mengirim data
Low : mengirim instruksi
Dihubungkan dengan LOW untuk pengiriman data ke layar
E (enable) : untuk mengontrol ke LCD ketika bernilai LOW, LCD tidak dapat diakses
D0 – D7 = Data Bus 0 – 7
Backlight + : dihubungkan ke VCC untuk menyalakan lampu latar
Backlight – : dihubungkan ke GND untuk menyalakan lampu latar
          Keypad Matriks adalah tombol-tombol yang disusun secara maktriks (baris x kolom) sehingga dapat mengurangi penggunaan pin input. Sebagai contoh, Keypad Matriks 4×4 cukup menggunakan 8 pin untuk 16 tombol. Hal tersebut dimungkinkan karena rangkaian tombol disusun  secara horizontal membentuk baris dan secara vertikal membentuk kolom.
          Berikut ini contoh Program Kalkulator untuk Operasi aritmetik sederhana antara operand1 dan operand2 hasil = operand1  operator  operand2 Operator yg digunakan :  X(kali), / (bagi), + (tambah), dan  – (kurang) Contoh  operasi aritmatik :   hasil = 34 X 2.  
     Keterangan: 34 adalah operand1 X adalah operator 2 adalah operand2 Rangkaian Simulasi dengan Proteus.
          Berikut ini listing program dari aplikasi kalkulator menggunakan atmega16 tersebut :
#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;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 &amp;quot;=&amp;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;
}

1 komentar :

Click here for komentar
11 Januari 2020 pukul 01.57 ×

Jestem pod wrażeniem. Bardzo dobry artykuł.

Congrats bro Joanna Zadrożna you got PERTAMAX...! hehehehe...
Reply
avatar