AKSES KEYPAD 4X3 OLEH DST-51 DENGAN BAHASA C Sebuah keypad pada dasarnya adalah saklar-saklar push button yang disusun secara matriks. Saklar-saklar push button yang menyusun keypad yang digunakan kali ini mempunyai 3 kaki dan 2 kondisi. Kondisi pertama yaitu saat saklar tidak ditekan, maka antara kaki 1, 2 dan 3 saling lepas, sebagaimana terlihat pada gambar 1(a). Sedangkan kondisi kedua adalah saat saklar ditekan, maka kaki 1, 2 dan 3 akan saling tersambung sebagaimana terlihat pada gambar 1(b). 1
2 3
2 3
1
(a) Keadaan saat saklar tidak ditekan
(b) Keadaan saat saklar ditekan
Gambar 1 Saklar Push botton 3 kaki
Matriks keypad Ketika saklar-saklar push button itu hendak disusun menjadi matriks keypad, maka satu kaki akan menjadi indeks kolom, satu kaki menjadi indeks baris dan satu kaki menjadi common. Satu misal akan dibuat matriks keypad 4x3 (4 baris dan 3 kolom), maka konfigurasinya adalah sebagaimana terlihat pada gambar 2. R1 1
2 3
1
1
2
2 3
2 3
1
3
R2 1 3
4
2
1
5
2 3
2 3
1
6
R3 1 3
7
2
1
8
2 3
2 3
1
9
R4
3
*
2
C1
1
0
2
C2
Gambar 2 Matriks keypad 4x3
# C3
COMMON
1
3
2 3
1
Seperti terlihat dalam gambar di atas, apabila saklar ‘1’ ditekan, maka baris 1 dan kolom 1 akan terhubung ke common. Apabila saklar ‘2’ ditekan, maka baris 1 dan kolom 2 akan terhubung ke common dan seterusnya.
Menghubungkan keypad 4x3 dengan Modul DST-51 R1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
2 3 4 5 6 7 8 9
VCC 1 R-PACK
S1 KEYPAD 4X3 1
2
3
4
5
6
7
8
9
*
0
#
JP1 P1.3 P1.2 P1.1 P1.0
P1.0 P1.2 P1.4 P1.6
1 3 5 7 9
2 4 6 8 10
P1.1 P1.3 P1.5 P1.7
PORT 1
P1.4 P1.5 P1.6
Gambar 3 Interface Keypad 4 x 3 Agar keypad tersebut dapat memberian input pada DST-51, maka terlebih dahulu keypad ini harus disusun dalam sebuah rangkaian di mana terdapat perbedaan kondisi pada pinpinnya antara kondisi tidak ada penekanan tombol dengan ada penekanan tombol. Kondisi tidak adanya penekanan tombol diatur dengan adanya kondisi logika high dengan menghubungkan semua pin keypad (kecuali common) ke VCC melalui resistor pull up. Pada saat tombol tidak ditekan, maka arus akan mengalir dari VCC melalui resistor menuju ke port seperti tampak pada gambar berikut.
Gambar 3 Aliran arus saat tombol tidak ditekan Sedangkan saat tombol ditekan, maka baris dan kolom akan terhubung ke ground sehingga kondisi pada baris dan kolom tersebut akan menjadi low. Apabila tombol ‘1’ ditekan, maka baris 1 dan kolom 1 akan terhubung ke ground sehingga kondisi baris dan kolom tersebut akan berubah menjadi low, demikian pula pada tombol ‘2’ dan seterusnya sehingga terbentuk tabel berikut.
Tombol 1 2 3 4 5 6 7 8 9 0 * #
P1.7 1 1 1 1 1 1 1 1 1 1 1 1
C1 P1.6 0 1 1 0 1 1 0 1 1 0 1 1
Tabel 1 Kombinasi Keypad C2 C3 R1 R2 P1.5 P1.4 P1.3 P1.2 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1
R3 P1.1 1 1 1 1 1 1 0 0 0 1 1 1
R4 P1.0 1 1 1 1 1 1 1 1 1 0 0 0
Hexa B7 D7 E7 BB DB EB BD DD ED BE DE EE
Pengambilan data dari keypad dilakukan dengan menunggu adanya penekanan tombol keypad. Kondisi tidak ada penekanan tombol adalah high untuk semua pin keypad kecuali common yang terhubung ke ground atau FFh pada port mikrokontroler. Untuk itu program akan mendeteksi dengan tidak adanya kondisi FFh pada port sebagai detektor adanya penekanan tombol. Setelah ditemukan adanya penekanan tombol, maka dilakukan pencarian tombol apa yang ditekan berdasarkan angka–angka yang tercantum pada tabel 1. Jika tidak ditemukan salah satu kombinasi maka berarti ada lebih dari satu tombol yang ditekan, atau ada “gangguan lain” yang menyebabkan data tidak valid. Untuk itu ulangi lagi menunggu tombol ditekan. Jika telah ditemukan data valid, maka lakukan konversi nilai tersebut menjadi data yang diinginkan. Rutin Pembacaan keypad bisa dilihat pada potongan program 1.
Potongan program 1: Rutin Ambil_Keypad 01: unsigned char Ambil_Keypad(void){ 02: unsigned char temp,i;
03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: }
sbit flag; flag = 0; while (flag == 0){ P1 = 0xff; temp = 0xff; while (temp == 0xff) temp = P1; i=0; while ((temp != nomer[i]) && (i<12)) i++; if (i<12) flag = 1; } Delay_50mS(); while (P1 != 0xff); return (tombol[i]);
rutin diatas mengembalikan satu nilai bertipe unsigned char, yang tidak lain adalah hasil pembacaan keypad. Proses menunggu tombol ditekan dilakukan dengan instruksi baris 08: while (temp == 0xff) temp = P1; program akan berhenti pada instruksi ini sampai ada tombol ditekan (P1 tidak sama dengan 0xff); Selanjutnya nilai P1 dibandingkan dengan nilai tabel dengan instruksi baris 10: while ((temp != nomer[i]) && (i<12)) i++; Dengan terlebih dulu didefinisikan konstanta nomer sbb: code unsigned char nomer[12] = {0xb7, 0xbb, 0xbd, 0xbe,
0xd7, 0xdb, 0xdd, 0xde,
0xe7, 0xeb, 0xed, 0xee};
Setelah didapatkan data valid, maka lakukan konversi menjadi data yang diinginkan, sekaligus sebagai nilai kembalian rutin: return (tombol[i]); dimana tombol adalah konstanta array yang berisi data yang diinginkan. Misal diinginkan data yang akan dikembalikan berupa nilai ASCII dari tombol yang ditekan, maka didefinisikan tombol sbb: code unsigned char tombol[12] = "123456789*0#";
Instruksi baris ke 13 digunakan sebagai delay antiboncing, dan insttruksi baris 14 untuk menunggu tombol dilepas kembali.
Gambar 4
Tampilan C Compiler SDCC dalam IDE Software
Gambar 6 Instalasi Modul DST-51 dengan Keypad 4x3 Program lengkap dan artikel ini dapat didownload di www.delta-electronic.com bagian application note.