Anda di halaman 1dari 11

PRAKTIKUM 3

MENAMPILKAN DATA KEYPAD PADA LCD

3.1 Tujuan Instruksional Khusus


 Mahasiswa memahami rangkaian interface keypad 4x4 dengan
mikrokontroller
 Mempelajari pemrograman mikrokontroler untuk mengakses LCD 2x16
 Mahasiswa memahami bahasa assembly untuk pengambilan data keypad
dan mengtransfernya pada tampilan LCD Karakter

3.2 Dasar Teori

KEYPAD
Keypad sering digunakan sebagai suatu input pada beberapa peralatan
yang berbasis mikroprosessor atau mikrokontroller. Keypad pada dasarnya terdiri
dari sejumlah saklar, yang terhubung sebagai baris dan kolom dengan susunan
seperti yang ditunjukkan pada Gambar 5.1.

Gambar 3.1. Skema Keypad Matrix 3×4

30
Agar mikrokontroller dapat melakukan scan keypad, maka port yang
terhubung dengan keypad dibuat agar dapat mengeluarkan salah satu bit yang
terhubung pada kolom dengan logika low “0” dan selanjutnya membaca 4 bit
pada baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut.
Sebagai konsekuensi, selama tidak ada tombol yang ditekan, maka
mikrokontroller akan menerima input port sebagai logika high “1” pada setiap pin
yang terhubung ke baris.

3.3 Daftar alat dan bahan


1. Software Proteus
2. Software M-IDE Studio for MCS-51
2. Unit Komputer

3.4 Keselamatan Kerja


1. Menggunakan pakaian praktikum dengan baik dan rapi
2. Sambungkan perangkat-perangkat yang digunakan sesuai dengan petunjuk
pembimbing praktikum
3. Jalankan sistem setelah mendapat izin dari pembimbing praktikum.
4. Bila praktikum telah selesai, maka bongkar semua perangkat yang digunakan
dan simpan pada tempat semula dengan rapi
3.5. Gambar Kerja

Gambar 3.2. Rangkaian interface MCS-51 dengan keypad dan LCD

3.6 Program Mikrokontroler

Program:

col3 bit P0.2


col2 bit P0.1
col1 bit P0.0
row1 bit P0.3
row2 bit P0.4
row3 bit P0.5
row4 bit P0.6
keydata equ 70h
keybounc equ 71h
keyport equ P0

org 0h
mov P0,#0FFH
call Init_LCD

start: call keypad4x4 ;calling subroutine keypad4x4


Mov A,keydata ;A = keydata
Cjne A,#0FFh,WrLCD;

sjmp start ;LOOPING FOREVER PART 1

WrLCD: Mov R1,#80h ;Pick DDRAM 1st row and 1st col
call write_inst
Mov R1,#30h
Add A,R1
Mov R1,A
call write_data ;write data
Sjmp start ;LOOPING FOREVER PART 2;

Init_lcd: mov r1,#00000001b ;Display clear


call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret

Write_inst: clr P3.5 ; = RS =0


CLR P3.6
mov P1,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; =EN = 1
call delay ; call delay time
clr P3.7 ; =EN = 0
ret

Write_data: setb P3.5 ; = RS =1


clr P3.6 ; R/W = 0
mov P1,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; =EN = 1
call delay ; call delay time
clr p3.7 ; =EN = 0
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; subroutine scan keypad 4x4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Keypad4x4:
mov keybounc,#50 ;keybounc = 50
mov keyport,#0FFh ;keyport=P2= FF
CALL DELAY

CLR col3
key3: jb row1,key6
djnz keybounc,key3 ; Key 3
mov keydata,#03h ;Data Output
ret
key6: jb row2,key9
djnz keybounc,key6 ; Key 6
mov keydata,#06h ;Data Output
ret
key9: jb row3,keyENT
djnz keybounc,key9 ; Key 9
mov keydata,#09h ;Data Output
ret
keyENT: jb row4,key2
djnz keybounc,keyENT ; Key ENT
mov keydata,#0F3h ;Data Output
ret

key2: setb col3


clr col2
jb row1,key5
djnz keybounc,key2
mov keydata,#02h ;Data Output
ret
key5: jb row2,key8
djnz keybounc,key5
mov keydata,#05h ; Data Output
ret

key8: jb row3,key0
djnz keybounc,key8
mov keydata,#08h ;Data Output
ret
key0: jb row4,key1
djnz keybounc,key0
mov keydata,#00h ;Data Output
ret

key1: setb col2


clr col1
jb row1,key4
djnz keybounc,key1
mov keydata,#01h ;Data Output
ret
key4: jb row2,key7
djnz keybounc,key4
mov keydata,#04h ;Data Output
ret
key7: jb row3,keyCAN
djnz keybounc,key7
mov keydata,#07h ;Data Output
ret
keyCAN: jb row4,Nokey
djnz keybounc,keyCAN
mov keydata,#0FAh ;Data Output
ret

Nokey: mov keydata,#0FFh


ret

delay: mov R0,#0


delay1: mov R2,#50
djnz R2,$
djnz R0,delay1
ret
end
3.7 Langkah Percobaan
A. Hubungkan LCD ke port 1 untuk data dan port 3 untuk kontrol dan
hubungkan keypad pada port 0 seperti pada Gambar 5.2.
B. Ketikkan program pada editor dan kompile program tersebut.
C. Download program berformat .hex ke prosesor pada sistem yang didesain
dengan aplikasi proteus
D. Jalankan desain sistem pada proteus
E. Catat tampilan karakter pada LCD untuk setiap penekanan tombol keypad
F. Lakukan analisis data dan buatlah kesimpulan-kesimpulan yang diperoleh
3.8 Data
Tabel. 3.1 Hasil Percobaan

Penekanan Tampilan LCD (kolom)


Tombol
baris 0 1 2 3 4 5 6 7 8 9 A B C D E F
Baris 1 3
3
Baris 2
Baris 1 6
6
Baris 2
Baris 1 9
9
Baris 2
Baris 1 #
#
Baris 2
Baris 1 2
2
Baris 2
Baris 1 5
5
Baris 2
Baris 1 8
8
Baris 2
Baris 1 0
0
Baris 2
Baris 1 1
1
Baris 2
Baris 1 4
4
Baris 2
Baris 1 1
7
Baris 2
* Baris 1 1
Baris 2

3.9 Pertanyaan
a. Lakukan analisis terhadap hasil percobaan
b. Buatlah kesimpulan terhadap hasil analisis yang telah dilakukan
c. Lakukan modifikasi terhadap program di atas untuk mendapatkan
tampilan LCD seperti Gambar 5.3 berikut:

Gambar 5.3 Tampilan karakter pada LCD


col3 bit P0.2
col2 bit P0.1
col1 bit P0.0
row1 bit P0.3
row2 bit P0.4
row3 bit P0.5
row4 bit P0.6
keydata equ 70h
keybounc equ 71h
keyport equ P0
org 0h
mov P0,#0FFH
call Init_LCD
PRE_DISP: MOV DPTR,#BARIS_1
MOV R6,#0Fh
ULANG1: CLR A
MOVC A,@A+DPTR
INC DPTR
MOV R1,A
call write_data
CALL DELAY
DJNZ R6,ULANG1
start: call keypad4x4 ;calling subroutine keypad4x4
Mov A,keydata ;A = keydata
Cjne A,#0FFh,WrLCD;
sjmp start ;LOOPING FOREVER PART 1
WrLCD: Mov R1,#8Bh ;Pick DDRAM 1st row and 1st col
call write_inst
Mov R1,#30h
Add A,R1
Mov R1,A
call write_data ;write data
Sjmp start ;LOOPING FOREVER PART 2;
Init_lcd: mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
Write_inst: clr P3.5 ; = RS =0
CLR P3.6
mov P1,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; =EN = 1
call delay ; call delay time
clr P3.7 ; =EN = 0
ret
Write_data: setb P3.5 ; = RS =1
clr P3.6 ; R/W = 0
mov P1,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; =EN = 1
call delay ; call delay time
clr p3.7 ; =EN = 0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; subroutine scan keypad 4x4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Keypad4x4:
mov keybounc,#50 ;keybounc = 50
mov keyport,#0FFh ;keyport=P2= FF
CALL DELAY
CLR col3
key3: jb row1,key6
djnz keybounc,key3 ; Key 3
mov keydata,#03h ;Data Output
ret
key6: jb row2,key9
djnz keybounc,key6 ; Key 6
mov keydata,#06h ;Data Output
ret
key9: jb row3,keyENT
djnz keybounc,key9 ; Key 9
mov keydata,#09h ;Data Output
ret
keyENT: jb row4,key2
djnz keybounc,keyENT ; Key ENT
mov keydata,#0F3h ;Data Output
ret
key2: setb col3
clr col2
jb row1,key5
djnz keybounc,key2
mov keydata,#02h ;Data Output
ret
key5: jb row2,key8
djnz keybounc,key5
mov keydata,#05h ; Data Output
ret
key8: jb row3,key0
djnz keybounc,key8
mov keydata,#08h ;Data Output
ret
key0: jb row4,key1
djnz keybounc,key0
mov keydata,#00h ;Data Output
ret
key1: setb col2
clr col1
jb row1,key4
djnz keybounc,key1
mov keydata,#01h ;Data Output
ret
key4: jb row2,key7
djnz keybounc,key4
mov keydata,#04h ;Data Output
ret
key7: jb row3,keyCAN
djnz keybounc,key7
mov keydata,#07h ;Data Output
ret
keyCAN: jb row4,Nokey
djnz keybounc,keyCAN
mov keydata,#0FAh ;Data Output
ret
Nokey: mov keydata,#0FFh
ret
delay: mov R0,#0
delay1: mov R2,#50
djnz R2,$
djnz R0,delay1
ret
BARIS_1: DB " Tombol= "
End

3.10 Analisa
Keypad merupakan saklar yang terdiri dari baris dan kolom. Kolom
berlogika 0 sedangkan baris berlogika 1. Mikrokontroller dapat melakukan scan
keypad jika salah satu baris dan kolom terhubung. Artinya tombol ditekan, maka
baris dan kolom akan terhubung sehingga menghasilkan logika 0. Kemudian
untuk dapat menampilkan nilai pada tombol yang ditekan ke layar LCD. Kita
dapat melihat penggalan statement dari program yang akan dijalankan pada
mikrokontroller.
start: call keypad4x4 ;calling subroutine keypad4x4
Mov A,keydata ;A = keydata
Cjne A,#0FFh,WrLCD;
sjmp start ;LOOPING FOREVER PART 1

A merupakan data yang berdasarkan dari tombol yang ditekan. Kita


dapat mengasumsikan A merupakan tombol 3. Mikrokontroller akan mengecek
nilai yang ditekan pada tombol. Jika sesuai, maka data akan disimpan pada
register, sedangkan jika tidak maka mikrokontroller akan terus melakukan
looping ke awal untuk melakukan pengecekan. Kemudian kita dapat melihat
pada penggalan statement berikutnya :

WrLCD: Mov R1,#80h ;Pick DDRAM 1st row and 1st col
call write_inst
Mov R1,#30h
Add A,R1
Mov R1,A
call write_data ;write data
Sjmp start ;LOOPING FOREVER PART 2;

Data 30h dipindahkan ke R1. Data 30h ini merupakan kode ASCII untuk
menampilkan keluaran pada layar LCD. Kemudian R1 ditambahkan pada A.
Kemudian A yang bernilai 3 tersebut dipindahkan ke R1 agar nilai tersebut dapat
ditampilkan pada layar LCD.

3.11 Kesimpulan
Berdasarkan hasil analisa dapat disimpulkan bahwa pada keypad terdiri
dari baris dan kolom. Pada kolom berlogika 0. Jika salah satu keypad tidak
ditekan, maka pada baris masih berlogika 1. Kemudian mikrokontroller dapat
melakukan scan keypad jika salah satu tombol ditekan artinya saklar pada baris
dan kolom terhubung sehingga menghasilkan logika 0. Kemudian tombol yang
ditekan menghasilkan data yang nantinya data tersebut di cek terlebih dahulu
oleh mikrokontroller, setelah itu disimpan di data register. Kemudian data hasil
dari pada scan keypad tersebut ditambahkan ada kode ASCII yang digunakan
untuk menampilkan keluaran pada layar LCD.

Anda mungkin juga menyukai