LCD karakter
PERCOBAAN 4
PEMROGRAMAN LCD KARAKTER ( μController )
Tujuan
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2×16.
2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke LCD Karakter 2×16.
3. Mahasiswa memahami beberapa instruksi assembly dasar mov, setb, clr, dan delay.
4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu.
Teori Dasar
Modul LCD dapat dengan mudah dihubungkan dengan mikrokontroller seperti AT89S51. Sesuai
standarisasi yang cukup populer digunakan banyak vendor LCD, yaitu HD44780, yang memiliki
chip kontroler Hitachi 44780. LCD bertipe ini memungkinkan pemrogram untuk mengoperasikan
komunikasi data secara 8 bit atau 4 bit. Jika menggunakan jalur data 4 bit akan ada 7 jalur (3 untuk
jalur kontrol & 4 untuk jalur data). Jika menggunakan jalur data 8 bit maka akan ada 11 jalur (3
untuk jalur kontrol & 8 untuk jalur data). Tiga jalur kontrol ke LCD ini adalah EN (Enable), RS
(Register Select) dan R/W (Read/Write). Berikut adalah rangkaian interface LCD dan susunan
umum pin LCD bertipe HD44780.
Gambar 4. 1 Skematik Rangkaian Interface LCD
Modul Embdded System
Created by Zipong (Frandi)
V-2
Tabel 4. 1 Pin-pin pada LCD HD44780
PIN Nama Fungsi
1 GND Ground
2 VCC Sumber tegangan 5 volt
3 VEE Pengaturan kontras
4 RS
Pemilihan Register
0 = Register Instruksi
1 = Register Data
5 R/W
Mode Baca/ Tulis
0 = Mode Tulis
1 = Mode Baca
6 E
Enable
0 = start to lacht data to LCD character
1= disable
7 DB0 LSB/Data 0
8 DB1 Data 1
9 DB2 Data 2
10 DB3 Data 3
11 DB4 Data 4
12 DB5 Data 5
13 DB6 Data 6
14 DB7 MSB/Data 7
15 BPL Back Plane Light
16 GND Ground
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa sedang
mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus
dibuat logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur yang
lain telah siap, set EN dengan logika “1” dan tunggu untuk sejumlah waktu tertentu ( sesuai dengan
datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data akan dianggap sebagai
sebuah perintah atau instruksi khusus ( seperti clear screen, posisi kursor, dll ). Ketika RS berlogika
high “1”, data yang dikirim adalah data teks yang akan ditampilkan pada display LCD. Sebagai
contoh, untuk menampilkan huruf “T” pada layar LCD maka RS harus diset logika high “1”.
Jalur R/W adalah jalur kontrol Read/ Write. Ketika R/W berlogika low (0), maka informasi pada bus
data akan dituliskan pada layar LCD. Ketika R/W berlogika high ”1”, maka program akan
melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin R/W selalu diberi
logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh
user. Pada bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7.
Modul Embdded System
Created by Zipong (Frandi)
V-3
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD :
Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 DL N E X X
Catatan :
X : Don’t care
DL : Mengatur lebar data
DL = 1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL = 0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
Entry Mode Set
Mengatur increment/ decrement dan mode geser
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 I/D S
Catatan :
I/D : Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke
DDRAM.
I/D = “0”, decrement
I/D = “1”, increment
S : Geser keseluruhan display kekanan dan kekiri
S = 1, geser kekiri atau kekanan bergantung pada I/D
S = 0, display tidak bergeser
Display On/ Off Cursor
Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B
Catatan :
D : Mengatur display
D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali secara
langsung dengan mengatur D = 1.
C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B = 1, kursor blink
Clear Display
Perintah ini hapus layar
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1
Modul Embdded System
Created by Zipong (Frandi)
V-4
Geser Kursor dan Display
Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display. Fungsi
ini digunakan untuk koreksi atau pencarian display
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 S/C R/L X X
Catatan : X = Don’t care
S/C R/L Note
0 0 Shift cursor position to the left
0 1 Shift cursor position to the right
1 0 Shift the entire display to the left
1 1 Shift the entire display to the right
Pengalamatan Posisi Kursor
Modul LCD terdiri dari sejumlah memory yang digunakan untuk display. Semua teks yang kita
tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD secara berturutan
membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.
Gambar 4. 2 Peta Alamat Memori DDRAM Pada LCD 2×16
Pada peta memori tersebut, daerah 00H-0FH dan 40H-4FH adalah display yang tampak.
Sebagaimana yang terlihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris. Pada modul
LCD 2×16 yang tampil pada baris 1 adalah DDRAM alamat 00H-0FH dan yang tampil baris 2
adalah DDRAM alamat 40H-4FH. Demikianlah untuk mengirim sebuah perintah ke LCD dengan
mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi Set Posisi Kursor adalah 80H.
Untuk itu, perlu menambahkan alamat lokasi dimana berharap untuk menempatkan kursor. Sebagai
contoh, jika ingin menampilkan kata pada baris 2 pada posisi kolom 11. Sesuai peta memori, posisi
karakter pada baris 2 kolom 11 mempunyai alamat 4AH sehingga sebelum menulis kata pada LCD
harus mengirim instruksi set posisi kursor dan perintah untuk instruksi ini adalah 80H ditambah
dengan alamat 80H + 4AH = 0CAH. Sehingga dengan mengirim perintah 0CAH ke LCD, akan
menempatkan kursor pada baris 2 kolom 11 dari DDRAM.
1. Modul Training Kit μController, beserta kabel interkoneksi (kabel ribbon).
2. LCD Karakter 2×16.
3. Power Supply Low Cost Micro Sys.
4. Keypad Matrik 3×4
1. Tulis Sebuah Karakter pada LCD Karakter
Al a t – a l a t
Pr o s ed ur Pe r c o b a a n
#include <sfr51.inc>
;
org 0h
;
Start:
acall init_LCD
mov R1,#80h
acall write_inst
mov R1,#’L’
acall write_data
mov R1,#’a’
acall write_data
mov R1,#’b’
acall write_data
mov R1,#’ ‘
acall write_data
mov R1,#’E’
acall write_data
mov R1,#’L’
acall write_data
mov R1,#’K’
acall write_data
mov R1,#’O’
acall write_data
mov R1,#’M’
acall write_data
stop:
sjmp stop
Modul Embdded System
Created by Zipong (Frandi)
V-7
a. Ketik syntax diatas pada program Reads51, save pada My Documents/Embedded
System/Percobaan 4/LCD1.asm, kemudian compile.
b. Bila tidak terdapat pesan kesalahan buka program Atmel ISP, dan lakukan flashing terhadap
file tersebut ke dalam μController.
c. Klik Run target pada program Atmel ISP, amati tampilan pada LCD dan catat hasil
outputnya
Output :
init_LCD:
mov R1,#00000001b ;Display clear
call write_inst
mov R1,#00111000b ;Function set,Data 8 bit,2 line font 5×7
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 P1.2 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P1.3 ; P3.7 =EN = 1
call delay ; call delay time
clr P1.3 ; P3.7 =EN = 0
ret
;
write_data:
setb P1.2 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P1.3 ; P3.7 =EN = 1
call delay ; call delay time
clr P1.3 ; P3.7 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end
2. Tulis Karakter Pada LCD Karakter Dengan Keypad Kontrol
Keterangan Inisialisasi Keypad :
Comm B4 B3 B2 B1 C3 C2 C1
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
Untuk penggunan untuk inisialisai keypad tergantung pada datasheet keypad tersebut. Keypad
yang digunakan ini adalah keypad 3×4 dimana terdiri dari tombol 0 – 9, ‘ * ‘ dan ‘ # ‘. Adapun
pengaktifanya adalah dengan memberikan logika low pada pin yang terdeteksi ketika tombol
keypad ditekan.
Tabel 4. 2 Data keypad yang dapat dibaca pada mikrokontroler
Keterangan Tombol Keterangan Data Hexa
1 Baris 1 Col 1 76H
2 Baris 1 Col 2 75H
3 Baris 1 Col 3 73H
4 Baris 2 Col 1 6EH
5 Baris 2 Col 2 6DH
6 Baris 2 Col 3 6BH
7 Baris 3 Col 1 5EH
8 Baris 3 Col 2 5DH
9 Baris 3 Col 3 5BH
Bintang “ * “ Baris 4 Col 1 3EH
0 Baris 4 Col 2 3DH
Pagar “ # “ Baris 4 Col 3 3BH
#include <sfr51.inc>
;
org 0h
;
cek_tombol1:
clr P3.7
mov A,P3
cjne A,#76H,cek_tombol2
acall delay
acall init_LCD
mov R1,#80h
acall write_inst
mov R1,#’1′
acall write_data
sjmp cek_tombol1
;
Modul Embdded System
Created by Zipong (Frandi)
V-10
cek_tombol2:
cjne A,#75H,cek_tombol3
acall delay
acall init_LCD
mov R1,#81h
acall write_inst
mov R1,#’2′
acall write_data
sjmp cek_tombol1
;
cek_tombol3:
cjne A,#73H,cek_tombol1
acall delay
acall init_LCD
mov R1,#82h
acall write_inst
mov R1,#’3′
acall write_data
sjmp cek_tombol1
;
init_LCD:
mov R1,#00000001b
acall write_inst
mov R1,#00111000b
acall write_inst
mov R1,#00001100b
acall write_inst
mov R1,#00000110b
acall write_inst
ret
;
write_inst:
clr P1.2
mov P0,R1
setb P1.3
acall delay
clr P1.3
ret
;
write_data:
setb P1.2
mov P0,R1
setb P1.3
acall delay
clr P1.3
ret
Modul Embdded System
Created by Zipong (Frandi)
V-11
a. Ketik syntax diatas pada program Reads51, save pada My Documents/Embedded
System/Percobaan 4/LCD2.asm, kemudian compile.
b. Bila tidak terdapat pesan kesalahan buka program Atmel ISP, dan lakukan flashing terhadap
file tersebut ke dalam μController.
c. Klik Run target pada program Atmel ISP, catat hasil output yang tampil pada LCD.
Jika ditekan Tombol 1
Output :
Jika ditekan Tombol 2
Output :
Jika ditekan Tombol 3
Output :
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end
3. Tulis Karakter Dengan Look Up Table
#include <sfr51.inc>
;
org 0h
acall init_LCD
acall write_char
;
stop:
sjmp stop
;
write_char:
mov dptr,#word1
mov r3,#12
mov r1,#80h
acall write_inst
;
write1:clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
init_LCD:
mov r1,#00000001b
acall write_inst
mov r1,#00111000b
acall write_inst
mov r1,#00001100b
acall write_inst
mov r1,#00000110b
acall write_inst
ret
write_inst:
clr P1.2
mov P0,R1
setb P1.3
acall delay
clr P1.3
ret
a. Ketik syntax diatas pada program Reads51, save pada My Documents/Embedded
System/Percobaan 4/LCD3.asm, kemudian compile.
b. Bila tidak terdapat pesan kesalahan buka program Atmel ISP, dan lakukan flashing terhadap
file tersebut ke dalam μController.
c. Klik Run target pada program Atmel ISP, amati tampilan pada LCD dan catat hasil
outputnya
Output :
Kesimpulan :
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
Latihan Mandiri : Buat program LCD menggunakan lookup table saat ditekan # maka akan
tampil tulisan ’My Name Is Elkom’ Save di folder yang sama dengan nama : LatMan LCD3.asm
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………
write_data:
setb P1.2
mov P0,R1
setb P1.3
acall delay
clr p1.3
ret
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
word1: DB “Welcome Home”; Karakter yang disimpan di ROM
;
end
1 Comment »
Leave a Reply
-
Archives
- September 2008 (1)
-
Categories
-
RSS
Entries RSS
Comments RSS
mas saya mo tanya…….
knp ya LCD nya hidup tapi ga ada tampilannya padahal IC mikrokontrollernya (AT89S52)dh saya isi program?tapi ko ga ada tampilannya ke LCD?apa ya kira2 msalhnya mas?saya binggung?
mksh mas…sy tunnggu solusinya…di email saya : nepprip@yahoo.co.id