Anda di halaman 1dari 4

Fungsi Akses Keypad untuk Microcontroller AVR dengan bahasa C (CodeVisionAVR)

(oleh Iwan Setiawan) setiaone.iwan@gmail.com http://iwan.blog.undip.ac.id Salah satu jenis perangkat antar muka yang umum dijumpai pada sistem embedded (atau sistem microcontroller) adalah Keypad matrik 4x4 atau 3x4. Walaupun penggunaannya sangat intensive, tetapi kenyataannya sangat jarang perangkat lunak pengembang yang menyediakan fungsi standar untuk pengaksesan keypad tersebut (sejauh pengetahuan penulis). Walaupun nampaknya sepele, tetapi fungsi pengaksesan keypad ini justru menjadi faktor kunci kenyamanan pengguna sistem embedded yang kita rancang. Dalam tulisan singkat ini, penulis ingin berbagi pengalaman dan pengetahuan pada anda para programmer microcontroller, mahasiswa atau embedded system developer dengan menyajikan 3 (tiga) buah fungsi pengaksesan keypad matrik yang menurut penulis sangat clean, terstruktur dan menghasilkan kode mesin yang minimal. Fungsi pengaksesan keypad ini, bukanlah murni hasil coding dari penulis tetapi hasil dari modifikasi fungsi pengaksesan keypad yang penulis peroleh dari sumber internet luar negeri berdasarkan hasil perburuan yang cukup melelahkan (sayang penulis lupa alamat url-nya, karena perburuan dilakukan sekitar tahun 2006-an). Fungsi pengaksesan keypad disusun oleh penulis dengan bahasa C (compiler: CodeVisionAVR) untuk microcontroller AVR. Jika anda menggunakan microcontroller, compiler dan jenis keypad yang berbeda dengan yang penulis gunakan, maka fungsinya tinggal anda modifikasi sedikit. Interkoneksi keypad dan microcontroller juga dapat disesuaikan secara mudah. Layout, interkoneksi serta kode fungsi dapat anda lihat di halaman berikutnya.

Semoga bermanfaat

Fungsi Akses Keypad untuk Microcontroller AVR dengan bahasa C (CodeVisionAVR)

Iwan setiawan, http://iwan.blog.undip.ac.id

Gambar Contoh layout Keypad 4x4 dan Interkoneksi pada Microcontroller Kode: deklarasi dan fungsi pengaksesan keypad //simpan kode ASCII tombol keypad pd memori flash
const char KEYTABLE[4][4] = {{'1','4','7','*'},{'2','5','8','0'},{'3','6','9','#'},{'A','B','C','D'}}; /*koneksikan keypad pada salah satu port, misal disini keypad dikoneksikan dg port A jika dikoneksikan dg port lain, sesuaikan KEY_DIR, KEY_IN dan KEY_OUT nya, untuk bouncing anda nanti dapat sesuikan dg karakteristik keypad anda*/ #define KEY_DIR DDRA #define KEY_IN PINA #define KEY_OUT PORTA #define BOUNCING 10 // deklarasi-deklarasi fungsi yang terkait dengan pengaksesan keypad void initkeypad(); char kbhit(); char getkeypad(); //Definisi fungsi /*---------------------------------------------------------------------------void initkeypad(); fungsi inisialisasi keypad (harus dipanggil sebelum fungsi keypad yang lain -cukup 1x) PORT 0-3 output PIN 4-7 input dengan resistor pull up enabled ----------------------------------------------------------------------------*/ void initkeypad() { KEY_DIR=0x0F; //nible bawah output, nible atas input dg. Pull up enable

Fungsi Akses Keypad untuk Microcontroller AVR dengan bahasa C (CodeVisionAVR)

Iwan setiawan, http://iwan.blog.undip.ac.id


KEY_OUT=0xF0; } /*---------------------------------------------------------------------------char kbhit(); fungsi deteksi penekanan keypad: jika salah satu tombol ditekan maka fungsi ini akan mengembalikan kode ASCII tombol tersebut (lihat KEYTABLE), jika tidak ditekan maka fungsi akan mengembalikan karakter Null (0) ----------------------------------------------------------------------------*/ char kbhit() { unsigned char row, col, row_val, output; unsigned char delaytime; output=0; for(col=0;col<4;col++) { KEY_OUT=~(1<<col); //pull down satu kolom for(delaytime=0x10; delaytime > 0; delaytime--) ; //tunggu bentar aja row_val=~((KEY_IN&0b11110000)>>4); ///baca Port4-7 ->geser ke LSB -> balik logika for(row=0;row<4;row++) { if(row_val & (1<<row)) { output=KEYTABLE[row][col]; return output; } } } return output; }

/*---------------------------------------------------------------------------char getkeypad (); fungsi menunggu penekanan tombol keypad: jika salah satu tombol ditekan maka fungsi ini akan mengembalikan kode ASCII tombol tersebut (lihat fungsi kbhit()) ----------------------------------------------------------------------------*/ char getkeypad() { unsigned char debcount; // debounce counter static unsigned char neykey=0; static unsigned char oldkey=0 do{ newkey = kbhit(); // dapatkan karakter tombol keypad saat ini }while(newkey == oldkey); //jika masih sama dengan sebelumnya looping terus for(debcount=0; debcount < BOUNCING; debcount++) { newkey = kbhit();

Fungsi Akses Keypad untuk Microcontroller AVR dengan bahasa C (CodeVisionAVR)

Iwan setiawan, http://iwan.blog.undip.ac.id


if(newkey == 0 || newkey != oldkey) { debcount=0; // clear-kan debounce counter } oldkey = newkey; // simpan untuk scanning selanjutnya } return(newkey); }

Sumber bacaan Internet url luar negeri: http://www.penulis.lupa.alamatnya.com

Anda mungkin juga menyukai