Anda di halaman 1dari 21

LAPORAN PRAKTIKUM MIKROKONTROLER

ANTARMUKA MIKROKONTROLER DENGAN KEYPAD

Disusun Untuk Memenuhi Tugas


Mata Kuliah Praktikum Mikrokontroler
Semester 3

Dosen Pengajar:
Nur Sulaiman, S.T.,M.T.

Penyusun:

Dimas Maulana

2231130092

TT 2B

PROGRAM STUDI D-III TEKNIK TELEKOMUNIKASI


JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI MALANG
2023
A. TUJUAN
1. Melakukan proses scanning pada keypad sebagai input
2. Dapat membuat proses kontrol display LED sebagai output

B. ALAT DAN BAHAN


• Software Proteus : 1 buah
• Software Arduino Uno : 1 buah

C. DASAR TEORI
1. Keypad
 Rangkaian tombol yang berfungsi untuk memberi sinyal pada suatu rangkaian
dengan menghubungkan jalur-jalur tertentu.
 Beberapa saklar/tombol, yang terhubung sebagai baris dan kolom, misalnya 3×4
dan 4×4.
 Sebagai suatu input pada beberapa peralatan yang berbasis mikroprosessor atau
mikrokontroller.

2. Keypad Matrix
a. Keypad Matrix 4x4
b. Keypad Matrix 3x4

 Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan


salah satu bit dari 3 bit yang terhubung pada kolom dengan logika low “0”,
selanjutnya membaca 4 bit pada baris untuk menguji jika ada tombol yang
ditekan pada kolom tersebut.
 Banyak peralatan yang menggunakan keypad, misalnya : remote control TV,
Hand phone, dll.
3. Scanning Keypad
- Prinsip Kerja Keypad
 Proses scaning keypad dilakukan untuk setiap kolom C0-C2 dengan memberikan
logika “0‟ pada kolom yang akan diaktifkan dan memberikan logika “1‟ pada
kolom lainya.
 Kemudian membaca data pada baris R0-R3. Jika terjadi penekanan tombol pada
keypad maka tombol yang ditekan dapat diketahui dengan melihat baris dan
kolom yang berlogika “0‟.
 Proses meng-aktifkan kolom dilakukan secara bergantian.

 C0-C2 dihubungkan dengan (Output) keluaran dari Mikroprosesor


 R0-R3 dihubungkan (Input) masukan ke Mikroprosesor
4. Hardware
a) Keypad 3x4
Alat dan Rangkaian :
• Arduino Uno Board
• 1 buah Keypad 3x4
• 1 buah resistor 330 ohm
• 1 buah LED
• Kabel jumper

Rangkaian :

Penekanan tombol “1″ akan menghubungkan pin no. 2 dengan no.3,


penekanan tombol “2″ akan menghubungkan pin no.1 dengan no.2
dan begitu seterusnya.
Program :
b) Keypad 4x4
Alat dan Rangkaian :
• Arduino Uno Board
• 1 buah Keypad 4x4
• Kabel jumper
Rangkaian :
Program :
D. GAMBAR RANGKAIAN SIMULASI
1. Keypad Array
2. Keypad Value

E. PROSEDUR PERCOBAAN
1. Buka perangkat lunak Proteus dan buat proyek baru.
2. Tambahkan mikrokontroler pada proteus dan pilih model yang sesuai.
3. Tambahkan display 7 segmen pada proteus.
4. Tambahkan komponen papan tombol (keypad) pada proteus dan sambungkan ke
mikrokontroler. Barisan keypad harus dihubungkan ke pin masukan
mikrokontroler sesuai dengan inputan pada codingan, lalu kolom harus
dihubungkan ke pin keluaran.
5. Tulis program untuk memindai papan tombol dan mendeteksi tombol mana yang
ditekan. Hal ini dapat dilakukan dengan mengatur setiap kolom secara berurutan
untuk menghasilkan output dan membaca baris untuk mendeteksi penekanan
tombol.
6. Setelah penekanan tombol terdeteksi, program akan menampilkan karakter yang
sesuai pada perangkat keluaran yaitu pada tampilan display 7-segmen.
7. Simulasikan program untuk menguji fungsi pada papan tombol(keypad).

Penjelasan lebih lengkap prosedur percobaan


1. Buka Perangkat Lunak Proteus dan Buat Proyek Baru:
 Buka Proteus dan buat proyek baru dengan mengklik "File" -> "New Project."
2. Tambahkan Mikrokontroler pada Proteus:
 Untuk menambahkan mikrokontroler, pilih "Pick Devices" atau "P" pada
toolbar.
 Cari dan pilih mikrokontroler yang sesuai yaitu Arduino Uno (Simulino Uno)
3. Tambahkan Display 7 Segmen pada Proteus:
 Klik "Pick Devices" lagi.
 Cari dan pilih komponen "7-Segment Display."
 Letakkan display 7 segmen di area kerja.
4. Tambahkan Komponen Papan Tombol (Keypad) pada Proteus:
 Klik "Pick Devices" lagi.
 Cari dan pilih komponen "Keypad Matrix" atau "Keypad 4x4."
 Letakkan papan tombol (keypad) di area kerja.
 Sambungkan baris-baris keypad ke pin masukan mikrokontroler sesuai dengan
kode ke dalam codingan
 Sambungkan kolom-kolom keypad ke pin keluaran mikrokontroler.
5. Tulis Program untuk Memindai Papan Tombol:
 Tulis program pada IDE yang sesuai dengan mikrokontroler digunakan.
Pastikan program dapat memindai keypad dengan benar dan mendeteksi
tombol mana yang ditekan.
 Program harus mengatur setiap kolom secara berurutan untuk menghasilkan
output dan membaca baris untuk mendeteksi penekanan tombol. Ini biasanya
melibatkan pemindaian (scanning) berulang untuk mengidentifikasi tombol
yang ditekan.
 Program juga harus mengatur tampilan karakter pada display 7 segmen sesuai
dengan tombol yang ditekan.
6. Simulasikan Program:
 Kembali ke Proteus.
 Klik dua kali pada mikrokontroler untuk membuka kode sumber.
 Salin dan tempel kode program ke arduino
 Tekan tombol "Start Simulation" untuk menjalankan simulasi.

F. HASIL PROGRAM
1. Keypad Array
byte Kode7s[] = { 3, 0x9F,0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 1, 9, 0x0FE };
char bufferDisplay = 10;

const byte scanBA = 0b00011100, scanBB = 0b00101100, scanBC =


0b00110100, scanBD = 0b00111000;
byte keyScan[] = { scanBA, scanBB, scanBC, scanBD }, iKeyB = 0,
iKeyC,keyDetect, keyBuff;
char listKey[4][5] = { { "789/"}, {"456"}, {"123-"}, {"C0=+"} };
long tDsp0 = millis(), tScan0 = millis();

void setup() {
DDRD = 0b11111111;
PORTB = (PORTB & 0b11000011) | 0b00111100;
DDRB = 0b00111100;
PORTC = (PORTC & 0b11000011) | 0b00111100;
DDRC = 0b00000000;
}

void loop() {
if ((millis() - tDsp0) > 13) {
tDsp0 = millis();
PORTD = Kode7s[bufferDisplay];
}

if ((millis() - tScan0) > 10) {


tScan0 = millis();
PORTB = (PORTB & 0b11000011) | keyScan[iKeyB];
delay(10);
keyDetect = PINC & 0b00111100;
if (keyDetect != 0b00111100) {
switch (keyDetect) {
case scanBA: iKeyC = 0; break;
case scanBB: iKeyC = 1; break;
case scanBC: iKeyC = 2; break;
case scanBD: iKeyC = 3; break;
}
keyBuff = listKey[iKeyB][iKeyC];
}
if ((keyBuff >= 0x30) & (keyBuff <= 0x39) ){ bufferDisplay = keyBuff &
0x0F; }
else {bufferDisplay = 10;}

++iKeyB;
if (iKeyB == 4) { iKeyB = 0; }
}
}

2. Keypad Value
byte Kode7s[] = {3, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 1, 9, 0x0FE};
char bufferDisplay = 10;

const byte scanBA = 0b00011100, scanBB = 0b00101100, scanBC =


0b00110100, scanBD = 0b00111000;
byte keyScan[] = { scanBA, scanBB, scanBC, scanBD }, iKey = 0, keyDetect,
keyBuff;
long tDsp0 = millis(), tScan0 = millis();

void setup(){
DDRD = 0b11111111;
PORTB = (PORTB & 0b11000011) | 0b00111100;
DDRB = 0b00111100;
PORTC = (PORTC & 0b11000011) | 0b0011100;
DDRC = 0b0000000;
}

void loop(){
if((millis() - tDsp0) > 13) {
tDsp0 = millis();
PORTD = Kode7s[bufferDisplay];
}

if ((millis() - tScan0) > 10){


tScan0 = millis();
PORTB = (PORTB & 0b11000011) | keyScan[iKey];
delay(10);
keyDetect = PINC & 0b00111100;
if(keyDetect !=0b00111100){
switch(keyScan[iKey]){
case scanBA:
switch(keyDetect){
case scanBA: keyBuff = 7; break;
case scanBB: keyBuff = 8; break;
case scanBC: keyBuff = 9; break;
case scanBD: keyBuff = 10; break;
}
break;
case scanBB:
switch(keyDetect){
case scanBA: keyBuff = 4; break;
case scanBB: keyBuff = 5; break;
case scanBC: keyBuff = 6; break;
case scanBD: keyBuff = 10; break;
}
break;
case scanBC:
switch(keyDetect){
case scanBA: keyBuff = 1; break;
case scanBB: keyBuff = 2; break;
case scanBC: keyBuff = 3; break;
case scanBD: keyBuff = 10; break;
}
break;
case scanBD:
switch(keyDetect){
case scanBA: keyBuff = 10; break;
case scanBB: keyBuff = 0; break;
case scanBC: keyBuff = 10; break;
case scanBD: keyBuff = 10; break;
}
break;
}
bufferDisplay = keyBuff;
}
++iKey;
if(iKey == 4) {iKey = 0;}
}
}

G. FLOWCHART
1. Keypad Array
2. Keypad Value
H. ANALISIS
1. Array Keypad
Praktikum bertujuan untuk mengendalikan sebuah keypad serta display tujuh
segmen. Keypad digunakan untuk memasukkan angka dan operasi, sementara
display tujuh segmen menampilkan angka atau operasi yang dimasukkan.
Kode Program:
1. Deklarasi Variabel:
 byte Kode7s[]: Array ini berisi kode bit untuk menampilkan digit dari 0
hingga 9 serta beberapa karakter operasi pada display tujuh segmen.
 char bufferDisplay: Variabel ini digunakan untuk menyimpan nilai yang
akan ditampilkan pada display.
 const byte scanBA, scanBB, scanBC, scanBD: Konstanta yang berisi pola
bit untuk mengendalikan pemindaian keypad.
 byte keyScan[]: Array yang berisi pola pemindaian untuk keypad.
 iKeyB, iKeyC, keyDetect, keyBuff: Variabel yang digunakan untuk
memantau input dari keypad dan menyimpan karakter yang dimasukkan.
 char listKey[4][5]: Array dua dimensi yang berisi karakter-karakter pada
keypad.
 long tDsp0, tScan0: Variabel waktu yang digunakan untuk mengatur interval
pembaruan display dan pemindaian keypad.
2. Setup:
 Mengatur pin digital sebagai output menggunakan DDRD, DDRB, PORTC,
dan DDRC sesuai kebutuhan untuk mengendalikan display tujuh segmen dan
keypad.
3. Loop:
 Setiap 13 milidetik, program memeriksa dan memperbarui display tujuh
segmen dengan mengatur PORTD berdasarkan nilai bufferDisplay.
 Setiap 10 milidetik, program memindai keypad:
 Mengatur PORTB untuk mengirim pola pemindaian yang sesuai ke
keypad.
 Kemudian, program memeriksa input dari keypad dan menentukan
tombol mana yang ditekan, menyimpan karakter yang sesuai dalam
keyBuff.
 Jika karakter yang ditekan adalah angka (0-9), maka karakter tersebut
disimpan dalam bufferDisplay.
 Jika karakter yang ditekan adalah operasi (seperti /, -, +, atau =), maka
display akan menampilkan operasi tersebut, dan bufferDisplay akan
diatur sesuai dengan operasi tersebut.
 Selanjutnya, program memindai keypad secara bergantian dengan
mengubah iKeyB dan mengatur iKeyC.
Dengan menggunakan array, program dapat dengan efisien mengatur cara display
tujuh segmen menampilkan karakter-karakter tertentu dan juga memeriksa tombol
mana yang ditekan pada keypad. Dengan demikian, array memainkan peran
penting dalam memungkinkan interaksi antara pengguna, display, dan keypad

2. Value Keypad
Dalam coding yang digunakan terdapat penggunaan keypad untuk memasukkan
nilai ke dalam variabel bufferDisplay yang kemudian akan ditampilkan pada
tujuh segmen display LED. Berikut adalah analisis dari berbagai aspek dalam
coding tersebut:
a. Array Kode7s:
 Array ini berisi data dalam bentuk byte yang mewakili kode untuk
digit 0 hingga 9 serta karakter khusus. Setiap elemen array mewakili
kode biner untuk tujuh segmen display LED yang digunakan untuk
menampilkan digit atau karakter tertentu.
b. Variabel bufferDisplay:
 Variabel ini digunakan untuk menyimpan nilai yang akan ditampilkan
pada tujuh segmen display LED. Nilai ini dapat diubah melalui
keypad.
c. Array keyScan dan Variabel iKey:
 Array keyScan berisi konfigurasi bit untuk melakukan pemindaian
keypad. Variabel iKey digunakan sebagai indeks untuk mengakses
elemen-elemen array keyScan.
d. Inisialisasi Pin dan Konfigurasi Keypad:
 Di dalam fungsi setup(), terdapat konfigurasi pin input/output pada
PORTD, PORTB, PORTC, DDRC, dan DDRB yang diperlukan untuk
menghubungkan dan mengontrol keypad.
e. Loop Utama:
 Loop utama, yaitu fungsi loop(), melakukan pemindaian keypad secara
berulang.
 Terdapat dua kondisi waktunya yang digunakan untuk mengatur
tampilan dan pemindaian keypad: tDsp0 untuk tampilan dan tScan0
untuk pemindaian keypad.
f. Tampilan:
 Setiap 13 milidetik, kode dalam bufferDisplay akan ditampilkan pada
tujuh segmen display LED melalui PORTD.
g. Pemindaian Keypad:
 Setiap 10 milidetik, keypad akan dipindai menggunakan konfigurasi
bit dalam array keyScan.
 Kode kunci yang terdeteksi akan disimpan dalam keyDetect dan
kemudian diproses untuk mengubah nilai bufferDisplay.
h. Pengubahan Nilai bufferDisplay:
 Nilai keyBuff digunakan untuk menyimpan nilai baru yang akan
ditampilkan di display.
 Proses pengubahan ini tergantung pada konfigurasi bit dalam array
keyScan dan nilai yang terdeteksi dalam keyDetect.
i. Iterasi Melalui Array keyScan:
 Setelah pemindaian satu set konfigurasi keypad selesai, variabel iKey
akan diincrement. Jika iKey mencapai 4, maka akan direset ke 0.

Coding ini digunakan untuk mengontrol tujuh segmen display LED melalui
sebuah keypad dengan konfigurasi tertentu. Nilai yang dimasukkan melalui
keypad akan ditampilkan pada display.

I. KESIMPULAN
Dalam konteks coding, terdapat perbedaan mendasar antara "Keypad Value" (nilai
keypad) dan "Keypad Array" (matriks keypad). Perbedaan ini berkaitan dengan cara
data dari keypad diproses dan disimpan dalam kode.
1. Keypad Value (Nilai Keypad):
 Konsep "Keypad Value" merujuk pada penggunaan nilai-nilai yang langsung
mewakili karakter atau angka dari keypad.
 Setiap tombol pada keypad memiliki nilai yang langsung dikaitkan dengan
karakter atau angka yang akan ditampilkan atau diproses.
 Nilai-nilai ini dihubungkan langsung ke representasi digit, karakter, atau operasi
yang sesuai.
 Contoh implementasi "Keypad Value" dalam kode yang diberikan adalah dengan
menggunakan array Kode7s. Array ini berisi nilai-nilai yang mewakili digit 0
hingga 9 dan karakter khusus.

Coding ini digunakan untuk membaca input dari keypad dan menampilkannya
pada display tujuh segmen. Algoritma yang digunakan untuk menentukan nilai
keyBuff didasarkan pada kombinasi dari keyScan dan keyDetect.

2. Keypad Array (Matriks Keypad):


 Konsep "Keypad Array" melibatkan penggunaan matriks atau array multidimensi
untuk menghubungkan kombinasi tombol pada keypad dengan karakter atau
angka yang akan ditampilkan.
 Kombinasi tombol pada keypad (biasanya dalam bentuk baris dan kolom)
mengacu pada indeks tertentu dalam matriks untuk menentukan karakter yang
akan ditampilkan atau operasi yang akan dilakukan.
 Contoh implementasi "Keypad Array" dalam kode yang diberikan adalah dengan
menggunakan array listKey. Matriks ini menyimpan daftar karakter yang akan
ditampilkan sesuai dengan konfigurasi keypad yang dipilih.

Coding ini digunakan untuk membaca input dari keypad dan menampilkannya
pada display tujuh segmen. Karakter yang ditampilkan pada display tujuh segmen
ditentukan oleh hasil pemindaian keypad dan diambil dari array listKey.
"Keypad Value" lebih sederhana dan langsung dalam pemetaan tombol ke karakter
atau angka, sementara "Keypad Array" memberikan fleksibilitas lebih besar untuk
mengatur hubungan antara tombol keypad dan tampilan yang diinginkan.

J. Drive Hasil Simulasi


https://drive.google.com/drive/folders/
1UvIPfV2NyhWwCZD525w3lB4rXRPAw8Uv?usp=drive_link

Anda mungkin juga menyukai