"Kembali Ke Dasar Elektronika Digital ... "

Kamis, 19 Desember 2013

[TUTORIAL] KEYPAD to 16 x 2 LCD MATRIX



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
Share:

1 komentar:

  1. 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

Kontak Langsung



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

ANTI SPAM !



Blog Ini Mendukung Blogger Indonesia Yang Jujur dan Memberikan Informasi Sebenarnya, Bukan Menyampah Demi $Rp$ Yang Hanya Merendahkan Blogger Indonesia

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (1) dasar (31) display (2) gcc (1) infrared (2) Input Output (3) jam (6) jualan (10) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (9) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (48) mikrokontroller (1) mikrotik (4) paket belajar (19) palang pintu otomatis (1) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) sms (5) software (16) tachometer (2) telepon (7) televisi (16) transistor (1) troubleshoot (3) tulisan (34) tutorial (67) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Diskusi


kaskus
Forum Hobby Elektronika