Anda di halaman 1dari 17

JOBSHEET 4

ANTARMUKA MIKROKONTROLER DENGAN


KEYPAD
Disusun untuk memenuhi tugas Matakuliah
Mikrokontroler Yang diampu oleh Yogi Dwi
Mahandi, S.Pd., M.T.

Disusun Oleh :

ANISATUL KHOIRIYAH (220536600441)


AFFAN ENDRIAWAN (220536605873)
LINTANG DENI LAKSANA (220536600087)

UNIVERSITAS NEGERI
MALANG FAKULTAS TEKNIK
DEPARTEMEN TEKNIK ELEKTRO DAN
INFORMATIKA
PRODI S1 TEKNIK
ELEKTRO
OKTOBER 2023
JOBSHEET IV
ANTARMUKA MIKROKONTROLER DENGAN KEYPAD

TUJUAN

• Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan keypad.


• Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk membaca
masukan dari keypad.

KEYPAD

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

Gambar 4.1 Keypad 4x4


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 4.2
Rangkaian keypad dan LED

ALAT DAN BAHAN YANG DIGUNAKAN

• 1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
• 1 buah catu daya DC +5V
• 1 buah multimeter
• 1 buah ISP Downloader AVR
• 1 buah sistem minimum AVR
• 1 buah modul I/O
• 1 buah keypad
• 1 buah kabel printer USB
• 2 buah kabel pita hitam

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

6. Buatlah program utama dan inisialisasikan PORTB.0-PORTB.3 sebagai output dengan


kondisi awal berlogika HIGH dan PORTB.4-PORTB.7 sebagai input dengan pull-up
(DDRB = 0FH dan PORTB=FFH), serta PORTC sebagai output dan kondisi awal
LOW (DDRC = FFH dan PORTC=00H), sehingga inisialisasi PORTB dan PORTC
terlihat sebagai berikut:

7. Deklarasikan fungsi keypad() dengan bilangan yang dikembalikan ke program utama


sebagai bilangan integer pada global variabel ( diluar program utama).
8. Tambahkan fungsi keypad berikut di luar program utama :

9. Tuliskan program berikut pada program utama tepatnya di dalam while(1).


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.

DATA HASIL PERCOBAAN

1. Tabel 4.1
Tombol keypad yang Tampilan Nilai tampilan LED
No
ditekan LED (dalam desimal)
1 0 0
2 1 1
3 2 2
4 3 3
5 4 4
6 5 5
7 6 6
8 7 7
9 8 8
10 9 9
11 A 10
12 B 11
13 C 12
14 D 13
15 * 14
16 # 15
2. Source code program pada langkah percobaan nomor 11
#include <mega8535.h>
#include <delay.h>

unsigned char keypad()


{
PORTB=0b11111110;
delay_ms(100);
if(PINB.7==0)return(10);
if(PINB.6==0)return(3);
if(PINB.5==0)return(2);
if(PINB.4==0)return(0b11111111);

PORTB=0b11111101;
delay_ms(100);
if(PINB.7==0)return(11);
if(PINB.6==0)return(6);
if(PINB.5==0)return(5);
if(PINB.4==0)return(4);

PORTB=0b11111011;
delay_ms(100);
if(PINB.7==0)return(12);
if(PINB.6==0)return(9);
if(PINB.5==0)return(8);
if(PINB.4==0)return(7);

PORTB=0b11110111;
delay_ms(100);
if(PINB.7==0)return(13);
if(PINB.6==0)return(15);
if(PINB.5==0)return(0);
if(PINB.4==0)return(14);
}
void main(void){
PORTB=0xFF;
DDRB=0x0F;
PORTC=0x00;
DDRC=0xFF;
while(1)
{
PORTC=keypad();
}
}

3. Source code program pada langkah percobaan nomor 12


#include <mega8535.h>
#include <delay.h>
unsigned char keypad()
{
PORTB=0b11111110;
delay_ms(100);
if(PINB.7==0)return(10);
if(PINB.6==0)return(0b00001000);
if(PINB.5==0)return(0b00000100);
if(PINB.4==0)return(0b00000010);

PORTB=0b11111101;
delay_ms(100);
if(PINB.7==0)return(11);
if(PINB.6==0)return(0b01000000);
if(PINB.5==0)return(0b00100000);
if(PINB.4==0)return(0b00010000);

PORTB=0b11111011;
delay_ms(100);
if(PINB.7==0)return(12);
if(PINB.6==0)return(9);
if(PINB.5==0)return(8);
if(PINB.4==0)return(0b10000000);

PORTB=0b11110111;
delay_ms(100);
if(PINB.7==0)return(13);
if(PINB.6==0)return(15);
if(PINB.5==0)return(0b00000001);
if(PINB.4==0)return(14);
}
void main(void){
PORTB=0xFF;
DDRB=0x0F;
PORTC=0x00;
DDRC=0xFF;

while(1)
{
PORTC=keypad();
}
}

ANISA :
#include <mega8535.h>
#include <delay.h>
unsigned char keypad()
{
PORTB=0b11111110;
delay_ms(10);
if(PINB.7==0)return(10);
if(PINB.6==0)return(3);
if(PINB.5==0)return(2);
if(PINB.4==0)return(1);

PORTB=0b11111101;
delay_ms(10);
if(PINB.7==0)return(11);
if(PINB.6==0)return(6);
if(PINB.5==0)return(5);
if(PINB.4==0)return(4);

PORTB=0b11111011;
delay_ms(10);
if(PINB.7==0)return(12);
if(PINB.6==0)return(9);
if(PINB.5==0)return(8);
if(PINB.4==0)return(7);

PORTB=0b11110111;
delay_ms(10);
if(PINB.7==0)return(13);
if(PINB.6==0)return(15);
if(PINB.5==0)return(0);
if(PINB.4==0)return(14);
}
unsigned char bila[15]={0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80, 0x70,
0x60, 0x50, 0x40, 0x30, 0x20, 0x10};
int kanana;

unsigned char bilb[9]={0x18, 0x3C, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x3C, 0x18,};
int kananb;
void main(void)
{
PORTB=0xff;
DDRB=0x0f;
PORTC=0x00;
DDRC=0xff;

while (1)
{
unsigned char key = keypad();
if (key <8 )
{
PORTC = (1 << key);
}
else if (key == 8)
{
kanana=0;
for (kanana=0; kanana<15;kanana++)
{
PORTC = bila[kanana];
delay_ms(1000);
}
}
else if (key == 9)
{
kananb=0;
for (kananb=0; kananb<9;kananb++)
{
PORTC = bilb[kananb];
delay_ms(1000);
}
}
else if (key == 10)
{
PORTC = 0b01010101;
}
else if (key == 11)
{
PORTC = 0b10101010;
}
else if (key == 12)
{
PORTC = 0b01010101;
delay_ms(100);
PORTC = 0b10101010;
delay_ms(100);
}
else if (key == 13)
{
PORTC = 0b01000001;
}
else if (key == 14)
{
PORTC = 0b00000000;
}
else if (key == 15)
{
PORTC = 0b11111111;
}
}
}

LINTANG :
#include <mega8535.h>
#include <delay.h>

unsigned char keypad()


{
PORTB=0b11111110;
delay_ms(10);
if(PINB.7==0)return(10);
if(PINB.6==0)return(3);
if(PINB.5==0)return(2);
if(PINB.4==0)return(1);

PORTB=0b11111101;
delay_ms(10);
if(PINB.7==0)return(11);
if(PINB.6==0)return(6);
if(PINB.5==0)return(5);
if(PINB.4==0)return(4);

PORTB=0b11111011;
delay_ms(10);
if(PINB.7==0)return(12);
if(PINB.6==0)return(9);
if(PINB.5==0)return(8);
if(PINB.4==0)return(7);

PORTB=0b11110111;
delay_ms(10);
if(PINB.7==0)return(13);
if(PINB.6==0)return(15);
if(PINB.5==0)return(0);
if(PINB.4==0)return(14);

}
unsigned char bila[15]={0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80, 0x70,
0x60, 0x50, 0x40, 0x30, 0x20, 0x10};
int kanana;

unsigned char bilb[9]={0x18, 0x3C, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x3C, 0x18,};
int kananb;

void main(void)
{

PORTB=0xff;
DDRB=0x0f;
PORTC=0x00;
DDRC=0xff;

while (1)
{

unsigned char key = keypad();

if (key <8 )
{
PORTC = (1 << key);
}
else if (key == 8)
{
kanana=0;
for (kanana=0; kanana<15;kanana++)
{
PORTC = bila[kanana];
delay_ms(1000);
}
}

else if (key == 9)
{
kananb=0;
for (kananb=0; kananb<9;kananb++)
{
PORTC = bilb[kananb];
delay_ms(1000);
}
}

else if (key == 10)


{
PORTC = 0b01010101;
}

else if (key == 11)


{
PORTC = 0b10101010;
}
else if (key == 12)
{
PORTC = 0b01010101;
delay_ms(100);
PORTC = 0b10101010;
delay_ms(100);
}

else if (key == 13)


{
PORTC = 0b10000111;
}

else if (key == 14)


{
PORTC = 0b00000000;
}

else if (key == 15)


{
PORTC = 0b11111111;
}
}
}

AFFAN :
#include <mega8535.h>
#include <delay.h>

unsigned char keypad()


{
PORTB=0b11111110;
delay_ms(10);
if(PINB.7==0)return(10);
if(PINB.6==0)return(3);
if(PINB.5==0)return(2);
if(PINB.4==0)return(1);

PORTB=0b11111101;
delay_ms(10);
if(PINB.7==0)return(11);
if(PINB.6==0)return(6);
if(PINB.5==0)return(5);
if(PINB.4==0)return(4);
PORTB=0b11111011;
delay_ms(10);
if(PINB.7==0)return(12);
if(PINB.6==0)return(9);
if(PINB.5==0)return(8);
if(PINB.4==0)return(7);

PORTB=0b11110111;
delay_ms(10);
if(PINB.7==0)return(13);
if(PINB.6==0)return(15);
if(PINB.5==0)return(0);
if(PINB.4==0)return(14);
}
unsigned char bila[15]={0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80, 0x70,
0x60, 0x50, 0x40, 0x30, 0x20, 0x10};
int kanana;
unsigned char bilb[9]={0x18, 0x3C, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x3C, 0x18,};
int kananb;
void main(void)
{
PORTB=0xff;
DDRB=0x0f;
PORTC=0x00;
DDRC=0xff;
while (1)
{
unsigned char key = keypad();
if (key <8 )
{
PORTC = (1 << key);
}
else if (key == 8)
{
kanana=0;
for (kanana=0; kanana<15;kanana++)
{
PORTC = bila[kanana];
delay_ms(1000);
}
}
else if (key == 9)
{
kananb=0;
for (kananb=0; kananb<9;kananb++)
{
PORTC = bilb[kananb];
delay_ms(1000);
}
}
else if (key == 10)
{
PORTC = 0b01010101;
}
else if (key == 11)
{
PORTC = 0b10101010;
}
else if (key == 12)
{
PORTC = 0b01010101;
delay_ms(100);
PORTC = 0b10101010;
delay_ms(100);
}
else if (key == 13)
{
PORTC = 0b01110011;
}
else if (key == 14)
{
PORTC = 0b00000000;
}
else if (key == 15)
{
PORTC = 0b11111111;
}
}
}

ANALISIS DATA

1. Analisis hasil percobaan pada tabel 4.1!


Dalam pengaktifan LED sebagai hasil dari keypad, ada proses pemindaian yang terjadi
untuk melakukan pengecekan. Untuk melaksanakan proses pengecekan ini, kita dapat
menggunakan pernyataan "if". Saat kita mendeklarasikan program utama, perlu
ditambahkan "unsigned char keypad()" agar keypad dapat dibaca oleh program utama.
Ini juga bertujuan agar keypad dapat dibaca oleh program yang terhubung dengan
mikrokontroler.
- Jika tombol KEYPAD ditekan angka 0, maka LED akan menampilkan nilai 0 dan
semua LED mati.
- Jika tombol KEYPAD ditekan angka 1, maka LED akan menampilkan nilai 1 dan
hanya LED bit ke 0 yang menyala.
- Jika tombol KEYPAD ditekan angka 2, maka LED akan menampilkan nilai 2 dan
hanya LED bit ke 1 yang menyala.
- Jika tombol KEYPAD ditekan angka 3, maka LED akan menampilkan nilai 3 dan
LED bit ke 0 dan bit ke 1 akan menyala.
- Jika tombol KEYPAD ditekan angka 4, maka LED akan menampilkan nilai 4 dan
hanya LED bit ke 2 yang menyala.
- Jika tombol KEYPAD ditekan angka 5, maka LED akan menampilkan nilai 5 dan
LED bit ke 2 dan bit ke 0 akan menyala.
- Jika tombol KEYPAD ditekan angka 6, maka LED akan menampilkan nilai 6 dan
LED bit ke 2 dan bit ke 1 akan menyala.
- Jika tombol KEYPAD ditekan angka 7, maka LED akan menampilkan nilai 7 dan
LED bit ke 2, bit ke 1, dan bit ke 0 akan menyala.
- Jika tombol KEYPAD ditekan angka 8, maka LED akan menampilkan nilai 8 dan
hanya LED bit ke 3 yang menyala.
- Jika tombol KEYPAD ditekan angka 9, maka LED akan menampilkan nilai 9 dan
LED bit ke 3 dan bit ke 0 akan menyala.
- Jika tombol KEYPAD ditekan angka A, maka LED akan menampilkan nilai 10 dan
LED bit ke 3 dan bit ke 1 akan menyala.
- Jika tombol KEYPAD ditekan angka B, maka LED akan menampilkan nilai 11 dan
LED bit ke 3, bit ke 1, dan bit ke 0 akan menyala.
- Jika tombol KEYPAD ditekan angka C, maka LED akan menampilkan nilai 12 dan
LED bit ke 3 dan bit ke 2 akan menyala.
- Jika tombol KEYPAD ditekan angka D, maka LED akan menampilkan nilai 13 dan
LED bit ke 3, bit ke 2, dan bit ke 0 akan menyala.
- Jika tombol KEYPAD ditekan angka *, maka LED akan menampilkan nilai 14 dan
LED bit ke 3, bit ke 2, dan bit ke 1 akan menyala.
- Jika tombol KEYPAD ditekan angka #, maka LED akan menampilkan nilai 15 dan
semua LED bit ke 3, bit ke 2, bit ke 1, dan bit ke 0 akan menyala.

2. Instruksi apa yang digunakan untuk membaca tombol keypad yang ditekan?
Unsigned char keypad ()

3. Instruksi yang digunakan untuk menyalakan LED sesuai keypad yang ditekan?
While (1)
{
PORTC=keypad();//menampilkan hasil yang dikembalikan oleh fungsi ke led
}

4. Buatlah flowchart instruksi pada nomor 3 dan jelaskan algoritmanya!

Anda mungkin juga menyukai