Oleh Kelompok 6:
1. Abdur Rohman (150534603246)
2. Ahmat Nur Santoso (150534603442)
3. Amin Khoirun Nisak (150534601748)
4. Andi Suryo Handoyo (150534602292)
A. Tujuan Praktikum
Mahasiswa daoat Mengetahui dan memahami cara mengantarmukakan mikrokontroler
dengan keypad.
MahasiswaMengetahui dan memahami bagaimana memrogram mikrokontroler untuk
membaca masukan dari keypad.
B. Dasar Teori
Keypad adalah bagian penting dari suatu perangkat elektronika yang membutuhkan
interaksi manusia. Keypad berfungsi sebagai interface antara perangkat (mesin) elektronik dengan
manusia atau dikenal dengan istilah HMI (Human Machine Interface). Matrix keypad 4×4 memiliki
konstruksi atau susunan yang simple dan hemat dalam penggunaan port mikrokontroler.
Konfigurasi keypad dengan susunan bentuk matrix ini bertujuan untuk penghematan port
mikrokontroler karena jumlah key (tombol) yang dibutuhkan banyak pada suatu sistem dengan
mikrokontroler. Keypad merupakan tombol push button yang disusun sebagai baris dan kolom
sehingga membentuk matriks. Keypad banyak digunakan sebagai piranti masukan dalam piranti
elektronik. Gambar 4.1 memperlihatkan bentuk fisik keypad. Keypad ini memiliki 16 tombol yaitu
0,1,2,3,4,5,6,7,8,9,A,B,C, D,* dan #.
Dalam modul I/O yang di Dalam gambar 4.2 keypad dihubungkan ke PORTB mikrokontroler
dengan posisi baris (b1-b4) terhubung ke PORTB.0-PORTB.3 dan posisi kolom (c1-c4) terhubung ke
PORTB.4-PORTB.7. Sedangkan untuk mengetahui tombol apa yang ditekan oleh user, 8 buah LED yang
terdapat dalam MODUL I/O dihubungkan ke PORTC.
Gambar 2.2 Rangkaian keypad dan LED
Proses Scaning Matrix Keypad 4×4 Untuk Mikrokontroler Proses scaning untuk membaca
penekanan tombol pada matrix keypad 4×4 untuk mikrokontroler diatas dilakukan secara bertahap
kolom demi kolom dari kolom pertama sampai kolom ke 4 dan baris pertama hingga baris ke 4.
Program untuk scaning matrix keypad 4×4 dapat bermacam-macam, tapi pada intinya sama. Misal kita
asumsikan keyapad aktif LOW (semua line kolom dan baris dipasang resistor pull-up) dan dihubungkan
ke port mikrokontrolr dengan jalur kolom adalah jalur input dan jalur baris adalah jalur output maka
proses scaning matrix keypad 4×4 diatas dapat dituliskan sebagai berikut.
1. Mengirimkan logika Low untuk kolom 1 (Col1) dan logika HIGH untuk kolom yang lain
kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama
(Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan
tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau
tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang
ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom
pertama yang di tekan maka data pembacaan baris akan 1111.
2. Mengirimkan logika Low untuk kolom 2 (Col2) dan logika HIGH untuk kolom yang lain
kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama
(Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan
tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau
tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang
ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom
pertama yang di tekan maka data pembacaan baris akan 1111.
3. Mengirimkan logika Low untuk kolom 3 (Col3) dan logika HIGH untuk kolom yang lain
kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama
(Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan
tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau
tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang
ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom
pertama yang di tekan maka data pembacaan baris akan 1111
4. Mengirimkan logika Low untuk kolom 4 (Col4) dan logika HIGH untuk kolom yang lain
kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama
(Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan
tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau
tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang
ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom
pertama yang di tekan maka data pembacaan baris akan 1111.
Kemudian data pembacaan baris ini diolah sebagai pembacaan data penekanan tombol
keypad. Sehingga tiap tombol pada matrix keypad 4×4 diatas dengan teknik scaning tersebut akan
menghasilkan data penekanan tiap-tiap tombol sebagai berikut.
Data port mikrokontroler, misalkan pada SW2 = 1011 0111 tersebut terbagi dalam nible atas
dan nible bawah dimana data nible atas (1011) merupakan data yang kita kirimkan sedangkan data
nible bawah (0111) adalah data hasil pembacaan penekanan tombol keypad SW2 pada proses
scaning matrix keypad 4×4 diatas
C. METODOLOGI
PROSEDUR
1. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper KEYPAD
dan soket jumper PORTC pada minimum system dengan soket jumper OUTPUT pada
I/O.
2. Buat program dengan menggunakan aplikasi Code Vision AVR
3. Buatlah file project (.prj) kemudian pilih IC yang digunakan (ATmega8535) dan atur
clock 4.000 Mhz. (seperti praktikum sebelumnya)
4. Buatlah file source (.c) kemudian hubungkan file project dengan file source seperti
pada praktikum sebelumnya.
5. Tambahkan file header
10. Compile dan Build program jika ada yang error perbaiki program. Masukkan file hex
menggunakan Khanzama AVR Programer. Klik auto program, tekan tombol keypad,
amati nyala LED dan isi Tabel 4.1.
11. Ubah program utama untuk algoritma berikut:
a. Jika tombol 0 ditekan semua LED mati.
b. Jika tombol 1 ditekan semua LED menyala.
12. Buatlah satu program dengan algoritma sebagai berikut:
a. Jika tombol 0 ditekan LED bit 0 menyala.
b. Jika tombol 1 ditekan LED bit 1 menyala.
c. Jika tombol 2 ditekan LED bit 2 menyala.
d. Jika tombol 3 ditekan LED bit 3 menyala.
e. Jika tombol 4 ditekan LED bit 4 menyala.
f. Jika tombol 5 ditekan LED bit 5 menyala.
g. Jika tombol 6 ditekan LED bit 6 menyala.
h. Jika tombol 7 ditekan LED bit 7 menyala.
i. Jika tombol 8 ditekan LED menyala sesuai gambar dibawah ini ber urutan dari
atas kebawah dengan delay 1 detik. (Gunakan perulangan for ...)
LED Menyala
LED Mati
j. Jika tombol 9 ditekan LED menyala sesuai gambar dibawah ini ber urutan dari
atas kebawah dengan delay 1 detik. (Gunakan perulangan for ...)
LED Menyala
LED Mati
k. Jika tombol A ditekan LED bit 0,2,4,6 menyala dan bit 1,3,5,7 mati.
l. Jika tombol B ditekan LED bit 0,2,4,6, mati dan bit 1,3,5,7 menyala.
m. Jika tombol C ditekan ditekan algoritma k dan l dilaksanakan bergantian dengan
delay 1 detik.
n. Jika tombol D ditekan ditekan maka LED menyala menunjukkan nilai biner dua
digit terakhir NIM anda.
o. Jika tombol * semua LED mati.
p. Jika tombol # semua LED menyala.
while (1)
{
#include <mega8535.h>
#include <delay.h>
unsigned char keypad();
unsigned char keypad()
{
PORTB=0b11111110; //mengaktifkan baris ke 1
delay_ms(10); //nilai delay setiap pergantian tampilan LED (saat
tombol ditekan)
}
};
if(PINB.6==0) //tombol 9
{
char urutan[9]={0x18,0x3c,0x7e,0xff,0xff,0xff,0x7e,0x3c,0x18};
char u;
for(u=0;u<9;u++)
{
PORTC=urutan[u];
delay_ms(100);
}
}
if(PINB.5==0) //tombol 8
{
Char
urutan[15]={0xf0,0xe0,0xd0,0xc0,0xb0,0xa0,0x90,0x80,0x70,0x60,0x50,0x
40,0x30,0x20,0x10};
char u;
for(u=0;u<15;u++)
{
PORTC=urutan[u];
delay_ms(100);
}
}
if(PINB.4==0)return(128); //tombol 7
while (1)
{
E. ANALISA DATA
Program keypad satu berfungsi menampilkan nilai dari setiap tombol keypad yang
ditekan pada rangkaian LED yang terdiri dari 7 bit sesuai dengan nilai yang ada pada tombol
namun dikonversikan dalam bentuk bilangan biner. Dimana setiap LED mewakili satu bit
bilangan biner. hasil dari konversi nilai tombol menjadi nyala LED yang nilainya sesuai dengan
nilai tombol yang ditekan dapat dilihat pada tabel 4.1.
Pada tabel 4.1 tertera tombol yang ditekan, hasil tampilan LED dan nilainya jika
dikonversikan menjadi bilangan desimal. Seprti jika tombol 1 ditekan maka LED bit 1 akan
menyala dan LED bit ke 1 ini jika dalam bilangan biner berarti berniali 1 apabila dikonversikan
menjadi bilangan desimal. Sedangkan untuk tombol A, B, C, D, * dan # apabila ditekan akan
menghasilkan tampilan LED yang apabila nilainya dikonversikan menjadi bilangan desimal
memiliki nilai yang berurutan mulai dari 10, 11, 12, 13, 14 dan 15.
Untuk bisa membuat hasil tampilan seperti yang dijelaskan diatas maka kita terlebih
dahulu harus mengetahui perkalian matriks setiap tombol – tombol keypadnya. Pada keypad
yang kita gunakan merupakan jenis keypad 4x4 yang berarti memiliki 4 baris dan 4 kolom.
Baris satu kolom 1, 2, 3, 4 yang masing – masing merupakan tombol dengan nilai 1, 2, 3, A.
Sedangkan baris dua kolom 1, 2, 3, 4 yang masing – masing merupakan tombol dengan nilai
4, 5, 6, B. Baris tiga kolom 1, 2, 3, 4 yang masing – masing merupakan tombol dengan nilai 7,
8, 9, C. Dan terakhir baris 4 kolom 1, 2, 3, 4 yang masing – masing merupakan tombol dengan
nilai *, 0, #, D.
Sedangkan LED yang terhubung pada PORTC berfungsi sebagai output. Karena PORTC
bekerja sebagai output maka setting register DDRC = 0x00 (aktif low).
Untuk dapat mengaktifkan baris maka baris yang diingkan harus diberi logika 0 dan
ketika tombol ditekan maka akan membuat kolom yang terhubung dengan baris yang
berlogika nol menjadi ikut berlogika nol. Dan pada saat inilah kita bisa memberi nilai balik
pada kolom dengan nilai yang sesuai dengan nilai tombol. Nilai balik yang diberikan
merupakan bilangan desimal. Nantinya bilangan desimal ini akan dikonversi menjadi bilangan
biner 8 bit yang nilainya akan ditampilkan pada LED yang terhubung dengan PORTC. Berikut
adalah contoh source code dari penjelasan diatas :
pemberian nilai balik pada setiap baris dan kolom ini dilakukan dengan memasukan
setiap inisialisasi logika dan nilai balik pada sebuah fungsi yang nantinya akan dipanggil pada
program utama.
Perintah pemanggilan fungsi ini adalah sebagai berikut :
Peletakan inisialisasi logika baris dan kolom serta pemberian nilai balik ini dailakukan
dengan pemanggilan fungsi dengan tujuan agar program utama source code program keypad
ini tidak terlalu panjang.
Secara keseluruhan program keypad 2 memiliki cara perancagan dan source code
yang sama seperti progaram pertama. Perbedaannya hanya pada pemberian nilai balik yang
berbeda pada tombol satu dan nol. Karena pada program ini ingin membuat semua LED
menyala ketika tombol satu ditekan dan membuat semua LED mati ketika tombol nol ditekan.
Untuk bisa membuat tampilan LED menyala semua ketika tomol satu ditekan maka
terlebih dahulu harus mengkonversikan nilai biner dari nyala LED menjadi bilangan desimal.
Karena ada 8 bit LED dan semua dibuat menyala berarti jika dijadikan nilai biner akan
menghasilkan bilangan 11111111. Bilangan biner ini jika dikonversikan menjadi bilangan
desimal akan bernilai 255. Jadi pada baris 1 kolom 4 harus diberi nilai balik 255. Berikut adalah
source codenya :
if(PINB.4==0)return(255);
sedangkan jika LED mati semua maka nilai binernya adalah 00000000, apabila
dikonversikan menjadi bilangan desimal maka bernilai 0. Jadi saat tombol nol ditekan atau
pada baris 4 kolom ke 2 nilai baliknya adalah nol. Berikut adalah source codenya :
if(PINB.5==0)return(0);
sama dengan program keypad sebelumnya pada program keypad ini untuk membuat
tampilan nyala LED sesuai dengan apa yang diinginkan maka dilakukan dengan memberikan
nilai balik pada tombol dan baris yang sesusi dengan tombol yang ingin diatur tampilan nyala
LED nya. Namun pada beberapa tombol karena yang harus ditampilkan merupakan
konfigurasi nyala LED maka dilakukan dengan membuat sebuah perulangan dengan perintah
perulangan for.
Pada tombol 0 sampai 7 untuk menampilkan nyala LED dilakukan dengan pemberian
nilai balik sesuai dengan nilai yang diingkan jika tombol ditekan. Seperti contoh jika tombol
satu ditekan maka LED bit 1 akan menyala. Untuk bisa menciptakan kondisi ini maka harus
mengkonversi dahulu nilai biner LED pada bilangan desimal. Jika LED bit satu menyala berarti
nilai bilangan binernya adalah 00000010 jika dikonversikan menjadi desimal maka akan
menghasilkan bilangan 2. Jadi nilai balik pada baris 1 kolom 1 adalah 2
if(PINB.4==0)return(2); //tombol 1
sedangkan untuk membuat konfigurasi nyala LED digunakan perulangan for. Namun
sebelum membuat perulangan terlebih dahulu harus mengkonversikan nyala setiap LED yang
akan dikonfigurasikan menjadi nilai bilangan desimal. Nilai ini kenudian dimasukan pada
sebuah fungsi yang akan dipanggil pada proses perulangan. Sebagai contoh jika tombol 9
ditekan akan menghasilkan konfigurasi LED seperti :
Untuk bisa menampilakan kofigurasi seperi gambar diatas maka kita perlu
mengkonfigurasi setiap baris tampilan LED menjadi bilangan desimal, kemudian memasukan
nilai desimal setiap baris LED pada sebuah fungsi kemudian memanggilnya pada perulangan.
Berikut adalah source codenya :
if(PINB.6==0) //tombol 9
{
char
urutan[9]={0x18,0x3c,0x7e,0xff,0xff,0xff,0x7e,0x3c,0x18};
char u;
for(u=0;u<9;u++)
{
PORTC=urutan[u];
delay_ms(100);
}
}
2. Instruksi apa yang digunakan untuk mebaca tombol keypad yang ditekan?
Instruksi yang digunakan untuk membaca tombol keypad yang ditekan adalah
untuk membaca tombol yang ditekan terlebih dahulu harus memberi logika nol pada baris.
Ketika baris berlogika nol maka baris tersebut aktif. Setelah itu jika ada tombol yang ditekan
maka akan membuat kolom akan aktif sehingga kolom akan terhubung dengan baris dan akan
memiliki logika nol. Saat kolom pada tobol yang ditekan berlogika nol maka yombol keypad
akan dibaca aktif.
3. Instruksi yang digunakan untuk menyalakan LED sesuai keypad yang ditekan?
Untuk menyalakan LED sesuai tombol yang ditekan dilakukan dengan memberi nilai balik
setiap kali kolom aktif atau kolom berlogika nol
Contoh :
if(PINB.5==0)return(32); //tombol 5
perintah return berfungsi untuk memberi nilai balik sehingga LED akan menyala sama sepe rti
nilai balik yang diberikan. Jika nilai balik merupakan bilangan desimal maka akan
dikonversikan menjadi bilangan biner 8 bit sedangkan jika bilangan hexadesimal akan
dikonversikan menjadi bilangan biner 4 bit
Algoritma :
mulai
A
salah
end
PINB.6==0 benar Return 8
B Tampilkan
hassil
pada LED
Fungsi keypad
PINB.5==0 benar Return 4
B
B A
A
Salah
Return 2
PINB.7==4
A
Aktifan baris 2
salah
Tampilkan
hassil
pada LED
Salah
Return 16
PINB.7==4
A
Aktifan baris 1
salah
Tampilkan
hassil
pada LED
Salah
Return 0x00
PINB.7==4