Sebelum melanjutkan ke tutorial berikut ada baiknya membaca pembahasan terdahulu mengenai keypad dan menulis ke lcd
Episode berikut dari pembahasan mengenai keypad akan membahas mengenai pemindahan data dari keypad menuju LCD Matrix 16x2 . Display LCD yang umum didapatkan di toko hoby elektronika ini berharga dikisaran 40-60 ribu. Sedangkan modul keypad dijual dengan harga 30 ribu (keypad keras) dan 20 ribu untuk keypad pita/tipis.
Pembahasan mengenai penulisan LCD pernah ditulis dalam blog ini, dimana akan digunakan library langsung pakai yang sangat simple yaitu pfleury. Ada 2 file yang harus dicopykan yaitu lcd.h dan lcd.c yang kemudian akan ditambahkan pada script. Untuk lcd.h perlu dilakukan penyesuaian terhadap penempatan kaki-kaki pin dari lcd terhadap microcontroller yang digunakan. Perhatikan skematik yg digunakan dalam tutorial ini.
klik pada gambar untuk memperjelas
Rangkaian diatas menggunakan AVR ATMEGA8535 , dengan PortA sebagai kontrol LCD dan mode data yg digunakan 4 bit. Jadi pada file lcd.h diubah sebagai berikut :
#define XTAL 1000000 //default clock adalah 1Mhz #define LCD_LINES 2 // jumlah line LCD #define LCD_DISP_LENGTH 16 // jumlah karakter per line #define LCD_IO_MODE 1 // mode 0=8bit, 1=4 bit // selanjutnya adalah definisi pin yang dipakai, berikut ini hasil edit yang sesuai skematik diatas #define LCD_PORT PORTA #define LCD_DATA0_PORT LCD_PORT #define LCD_DATA1_PORT LCD_PORT #define LCD_DATA2_PORT LCD_PORT #define LCD_DATA3_PORT LCD_PORT #define LCD_DATA0_PIN 3 #define LCD_DATA1_PIN 2 #define LCD_DATA2_PIN 1 #define LCD_DATA3_PIN 0 #define LCD_RS_PORT LCD_PORT #define LCD_RS_PIN 6 #define LCD_RW_PORT LCD_PORT #define LCD_RW_PIN 5 #define LCD_E_PORT LCD_PORT #define LCD_E_PIN 4 |
Jangan lupa juga dengan cara menambahkan library lcd.c seperti gambar berikut (AVR STUDIO 4)
Karena penulisan LCD matrix sangat simple , maka script pun menjadi semakin simple. Hanya dengan menggunakan logika sederhana untuk menentukan baris yang akan ditulis maka didapatkan script utama seperti berikut :
int main(void)
{
uint8_t keypad,posisi;
DDRA |= _BV(PA0) | _BV(PA1) | _BV(PA2) | _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6) ; //LCD PORT yg digunakan
//keypad
DDRD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD2); //col
DDRD |= _BV(PD3) | _BV(PD4) | _BV(PD5) | _BV(PD6); //row
posisi=0; //variabel penanda posisi kursor
lcd_init(LCD_DISP_ON_CURSOR); //inisialisasi LCD
while(1)
{
keypad=tombol(); //fungsi keypad, silahkan baca pembahasan sebelumnya
if(keypad!= 100 && keypad !=21 && keypad !=20 ) //jika tombol ditekan
{
if( posisi < 32 ) { //ada 32 buah ruang untuk menulis (16 x 2 )
lcd_putc( keypad + 48 ) ; //48 adalah ascii dari angka 0
posisi++; //tambahkan nilai posisi
}
if(posisi == 16){ //jika melewati 16 karakter di baris 1
lcd_gotoxy(0,1); //pindah ke baris kedua
}
_delay_ms(150);
}
if(keypad == 21 ) // penekanan * berarti hapus 1 kebelakang
{
if(posisi != 0) posisi--; //posisi kursor dikurangi
if(posisi < 16 ){ //baris 1
lcd_gotoxy(posisi,0); //mundur 1 posisi di baris 1
lcd_putc(' '); //bersihkan kursos
lcd_gotoxy(posisi,0); //balik lagi
}
else { //baris 2
lcd_gotoxy((posisi - 16),1); //mundur 1 posisi di baris 2
lcd_putc(' '); //bersihkan angka
lcd_gotoxy((posisi - 16),1); //balik lagi
}
_delay_ms(150);
}
else if(keypad == 20 ) // penekanan # berarti bersihkan layar lcd
{
posisi = 0;
lcd_clrscr();
_delay_ms(150);
}
}
return 0;
}
Yang menarik dari script diatas adalah karena yg ditampilkan berupa angka saja sedangkan LCD menerima input karakter ASCII, maka untuk merubah dari integer ke ascii cukup dengan menambahkan angka 48. Kenapa ? Karena ascii dari angka 0-9 berurutan dari 48-57 jadi simple saja menggunakan script lcd_putc( keypad + 48) Script selengkapnya dapat didownload di sini.
SELAMAT MENCOBA
mas, gmn cara menampilkan angka dari 000 s.d 999 menggunakan keypad matrik 3x4, arduino uno r3 dan 3 buah led 7segmen? tlng d bantu mas.
BalasHapus