Kamis, 21 Juni 2012

Menggunakan Keypad dengan Mikrokontroller Part #1


Tentu sudah tahu kita arti keypad ini khan...? keypad bisa dilihat di gambar di atas, keypad diatas berjenis keypad 4x4, artinya 4 kolom dan 4 baris.
Terus bagaimana cara menggunakan keypad diatas untuk mikrokontroller. Sebenarnya kalau kita buka keypad isi daleman keypad hanya saklar biasa. coba lihat gambar dibawah ini
nah ternyata keypad tersusun atas  saklar-saklar. misal keypad angka 3 di tekan itu berarti kolom 3(col3) dan baris 3 (row 3) saling terhubung, demikian untuk yang lain. Keypad diatas sering juga disebut dengan keypad matriks. lantas gimana untuk menghubungkan keypad diatas dengan mikrokontroler..? salah satu cara yang bisa kita pakai adalah dengan teknik scaning. berikut langkah2nya:
1. jadikan DDR untuk bagian baris (row) sebagai output.
2. jadikan DDR untuk bagian kolom (col) sebagai input dan aktifkan internal pullup dalam mikrokontrollernya
3. beri nilai low(0) untuk baris1, sementara baris 2,3,4 dalam high(1), 
4. beri nilai low(0) untuk baris2, sementara baris 1,3,4 dalam high(1), 
5. beri nilai low(0) untuk baris3, sementara baris 1,2,4 dalam high(1), 
6. beri nilai low(0) untuk baris4, sementara baris 1,2,3 dalam high(1), 
7. ulangi terus langkah 3 sampai 6 secara berulang-ulang dengan delay yang sangat cepat, misalnya (100ms)

Nah itu logika teknik scaning ini.Apa udah udah selesai...? eit sabar itu masih penjelasan awal. 

Nah dari sini dapat kita ketahui misal keypad  3 kita tekan berarti kolom 3 dan baris 3 saling bertemu. karena kolom dijadikan input maka kita mendeteksi nilai pada saat barisnya bernilai low (0)...(ingat nilai baris secara bergantian berubah nilainya). Nah pada saat mendeteksi nilai low (0) kita gunaka dalam program bahwa keypad yang di tekan adalah angka 3.  begini pseudocodenya...

PORT_key = 0b11111011;
delay_ms(30);
if (PIN_key.4 == 0) {i++; array[i]=1; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.5 == 0) {i++; array[i]=2; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.6 == 0) {i++; array[i]=3; simpan_dlm_1variabel(); delay_ms(100);}


PORT_key merupakan PORT mikro yang dijadikan output.  ok program lengkapnya silahkan lihat dibawah ini.

#include <mega16.h>
#include <delay.h>
#include <stdio.h>


#define DDR_key     DDRC
#define PORT_key    PORTC
#define PIN_key     PINC


unsigned int nilai,i=0;
int array[8];
unsigned char buffer[16];


#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>


void simpan_dlm_1variabel()
{
       if (i==1){nilai=array[i];} 
         
       if (i>=2 && i<=4)
           {
           nilai=(nilai*10)+array[i];
           }   



void scanning_keypad()//scanning pendeteksian penekanan keypad
{
PORT_key = 0b11111110;
delay_ms(30);
if (PIN_key.4 == 0) {i++; array[i]=7; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.5 == 0) {i++; array[i]=8; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.6 == 0) {i++; array[i]=9; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.7 == 0) {lcd_clear();i=0;nilai=0;delay_ms(300);}


PORT_key= 0b11111101;
delay_ms(30);
if (PIN_key.4 == 0) {i++; array[i]=4; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.5 == 0) {i++; array[i]=5; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.6 == 0) {i++; array[i]=6; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.7 == 0) {delay_ms(300);}


PORT_key = 0b11111011;
delay_ms(30);
if (PIN_key.4 == 0) {i++; array[i]=1; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.5 == 0) {i++; array[i]=2; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.6 == 0) {i++; array[i]=3; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.7 == 0) {delay_ms(300);}


PORT_key= 0b11110111;
delay_ms(30);
if (PIN_key.4 == 0) {delay_ms(300);}
if (PIN_key.5 == 0) {i++; array[i]=0; simpan_dlm_1variabel(); delay_ms(100);}
if (PIN_key.6 == 0) {delay_ms(300);}
if (PIN_key.7 == 0) {delay_ms(300);}
}


void tampil_lcd()
{             
        lcd_gotoxy(0,0);     
        sprintf(buffer,"%d ",nilai);        
        lcd_puts(buffer);
}


void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORT_key=0xFF;
DDR_key=0x0F;
lcd_init(16);
#asm("sei")
while (1)
      { 
      scanning_keypad();
      tampil_lcd();         
      };
}

Penjelasan program diatas sebagai berikut:
1. mikrokontroler akan menjalankan program di bawah tulisan while(1) secara terus-menerus. disitu ada fungsi  scanning_keypad(); dan  tampil_lcd();  jadi kedua fungsi tersebut akan dijalankan terus menerus.
2. misal tombol 5 ditekan, , berarti kolom 2 dan baris 2 tersambung, maka  nilai 5 akan disimpan ke dalam variable array[i] ,kemudian hasil ini disimpan lagi dalam  variable nilai  dan akan ditampilkan ke lcd.
3. dan begitu seterusnya.. 

ini hasil simulasi di proteusnya, menggunakan mikrokontroler ATmega16 (bisa diganti sesuai kebutuhan)



program ini masih sangat sederhana, untuk pengembangan silahkan di kreasikan sendiri. download lengkap projectnya disini

1 komentar:

  1. mas apa bisa keypad digabung dengan potensio meter, terimakasih

    BalasHapus

Silahkan isi komentar yang dapat membangun blog ini. Atas komentarnya saya ucapkan terimakasih

Related Posts Plugin for WordPress, Blogger...