Anda di halaman 1dari 17

PERAGA LCD

A. Umum
LCD atau Liquid Crystal Display adalah merupakan wadah untuk menampilkan sesuatu bentuk
dari tulisan yang dapat berupa huruf, angka, dan tanda baca yang merupakan satu modul. Tampilan
dapat berupa 2 baris 16 kolom (2x16) atau berupa 4 baris 20 kolom (4x20) seperti ditunjukkan pada
gambar 1.

(a) 2x16 (b) 4x20


Gambar 1. Peraga LCD

Gambar2. Karakter A pada Dot Matrik

B. Modul LCD HD44780


Salah satu modul LCD adalah Chip HD44780 berbasis karakter yang dihasilkan perusahaan
Hitachi dengan spesifikasi berikut ini:
1. Pembangkit karakter ROM terdiri 192 karakter dalam format 5 x 7.
2. Pembangkit karakter RAM dapat mencapai delapan model karakter.
3. Memiliki tampilan 80 byte RAM.
4. Memiliki kemampuan transfer data 4 bit atau 8 bit.
5. Sudah terdapat Osilator.
6. Terdapat rangkaian reset daya.
7. Memiliki beberapa instruksi meliputi: Membersihkan layar LCD, Kembali ke posisi semula,
Penampilan kontrol on/off, Cursor on/off/berkelip dan Pergantian penampilan.

1
D7
COM 16 LCD
D0
CONTROL
E
LSI
R/W
SEG 160
RS SEG 40
Vee HD 44780
SEGMENT
Vcc 4 DRIVER X 4
Vss

Gambar 3. Diagram Blok LCD

Blok diagram hubungan driver dan LCD dapat dilihat pada Gambar 3 dan urutan-urutan pin,
simbol dan kegunaannya masing-masing ditunjukkan pada tabel 1.

Tabel 1. Urutan pin konektor, simbol dan kegunaannya.


No Nama Fungsi
1 Vss GND
2 Vcc +5V
3 Vee LCD Contrast
4 RS 1 = Input data, 0 = Input Instruksi
5 R/-W 1= Read, 0 = Write
6 E Enable
7 D0 Data 0
8 D1 Data 1
9 D2 Data 2
10 D3 Data 3
11 D4 Data 4
12 D5 Data 5
13 D6 Data 6
14 D7 Data 7
15 VBL+ 4 - 4.2 volt
16 VBL- GND

HD44870 mempunyai dua register 8-bit yaitu Register Instruksi (IR) dan Register
Data (DR). Register IR berfungsi untuk menyimpan kode perintah seperti Clear Display,
Geser Cursor dan menyimpan alamat informasi untuk Display Data RAM (DDRAM) dan
karakter generator (CGRAM). Register IR dapat ditulisi mikroprosesor tetapi tidak dapat
dibaca. Register Data (DR) berfungsi menyimpan sementara data yang dituliskan ke
DDRAM atau CGRAM dan juga menyimpan sementara data yang dibaca dari DDRAM atau
CGRAM. Data dari mikroprosesor yang dituliskan ke DR dengan operasi internal secara
otomatis dituliskan ke DDRAM atau CGRAM. Register DR juga digunakan untuk

2
menyimpan data yang dibaca dari DDRAM dan CGRAM. Saat alamat dituliskan pada
register IR dengan operasi internal, data dari DDRAM atau CGRAM dibaca ke register DR.
Pentransferan data ke mikroprosesor selesai setelah mikroprosesor membaca DR. Setelah
mikroprosesor membaca DR, data di dalam DDRAM dan CGRAM pada alamat berikutnya
dikirim ke DR untuk pembacaan mikroprosesor berikutnya. Pemilihan register DR dan IR
dilakukan melalui sinyal pemilih register (RS) seperti ditunjukkan pada tabel 2.

Addres Counter (AC) berfungsi untuk menandai alamat DDRAM atau CGRAM. Saat
suatu instruksi dituliskan pada IR, informasi alamat dikirimkan dari IR ke AC. Pemilihan
DDRAM atau CGRAM juga ditentukan oleh instruksi. Setelah penulisan atau pembacaan
data tampilan ke DDRAM atau CGRAM, AC secara otomatis bertambah satu. Isi AC
dikeluarkan pada DB0-DB6 saat RS=0 dan R/W=1 seperti ditunjukkan pada tabel pemilihan
register.

Tabel 2. Pemilihan Register

RS R/W Enabel Operasi

0 0 1, 1 0 Penulisan IR secara internal

1 0 1, 1 0 DR ditulisi dengan operasi internal


(DR ke DDRAM atau DR ke CGRAM)
0 1 1 Pembacaan Busy Flag yang mengindikasikan
operasi internal dan membaca CGRAM dan
DDRAM
1 1 1 DR dibaca dgn operasi internal (DDRAM atau
CGRAM ke DR)

Display Data RAM (DDRAM), berfungsi untuk menyimpan data yang direpresentasikan
dengan kode karakter 8-bit. DDRAM mempunyai kapasitas 80 x 8-bit atau 80 karakter.
Hubungan antara alamat DDRAM dengan posisi pada LCD dengan 4x20 karakter
ditunjukkan pada gambar 4.
20 KARAKTER

Line 1 $80 $81 $82 $92 $93

Line 2 $C0 $C1 $C2 $D2 $D3

Line 3 $94 $95 $96 $A6 $A7

Line 4 $D4 $D5 $D6 $E6 $E7

Gambar 4. Susunan peta memori pada LCD

3
Sesuai dengan kode instruksi, untuk menset alamat DDRAM bit b7 harus logika 1.
ROM Generator Karakter (CGROM) menghasilkan pola dot 5x7 atau 5x10 dari kode
karakter 8-bit. CGROM mempunyai 192 pola dot karakter 5x7 dan 192 pola karakter 5x10.
RAM generator karakter (CGRAM) adalah RAM yang digunakan pemakai untuk
menghasilkan pola-pola karakter secara software. Dengan pola 5x7 dot delapan pola
karakter yang dibentuk sendiri dapat disimpan, dan dengan ukuran 5x10 dot, 4 pola
karakter yang dibentuk sendiri dapat disimpan. Instruksi HD44780 ditunjukkan pada tabel 3.
Sebelum menampilkan karakter pada LCD, maka harus mengikuti prosedur sebagai berikut:
-Inisialisasi, -Pemesanan tempat,-Penulisan data
Tabel 3. Instruksi Set HD44780
INSTRUCTION RS R/W D7 D6 D5 D4 D3 D2 D1 D0
Clear Display 0 0 0 0 0 0 0 0 0 1
Return Home 0 0 0 0 0 0 0 0 1 *
Entry Mode Set 0 0 0 0 0 0 0 1 I/D S
Display ON/OFF 0 0 0 0 0 0 1 D C B
Cursor and Display Shift 0 0 0 0 0 1 S/C R/L * *
Function Set 0 0 0 0 1 DL N F * *
Set CG RAM address 0 0 0 1 A A A A A A
Set DD RAM 0 0 1 A A A A A A A
Read busy Flag and Address 0 1 BF A A A A A A A
Write data to CG or DD RAM 1 0 D D D D D D D D
Read data Form CG or DD RAM 1 1 D D D D D D D D
Keterangan:
I/D 0= Decrement Cursor Position 1=Increment Cursor Position
S 0= No Display shift 1=Display shift
D 0= Display off 1= Display on
C 0= Cursor off 1= Cursor on
B 0= Cursor blink off 1= Cursor blink on
S/C 0=Move cursor 1= Shift display
R/L 0= Shift left 1= Shift Right
DL 0= 4-bit interface 1= 8-bit interface
N 0= 1/8 or 1/11 duty (1 line) 1= 1/16 Duty (2lines)
F 0= 5x7 dots 1= 5 x 10 dots
BF 0= Can accept instruction 1= Internal operation in progress

Inisialisasi terdiri dari


 Display Clear
0 0 0 0 0 0 0 0 0 1
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0

4
Instruksi ini akan menghapus semua display dan mengembalikan kursor ke posisi awal
(alamat 0)
 Cursor Home
0 0 0 0 0 0 0 0 1 X
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini mengembalikan kursor ke posisi awal (alamat 0)

 Entry Mode Set


0 0 0 0 0 0 0 1 I/D S
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0

Instruksi ini mengatur arah pergerakan kursor dan apakah display akan digeser.
 Jika I/D = 1 alamat akan dinaikkan dan kursor bergerak ke kanan dan jika I/D = 0
alamat akan diturunkan dan kursor bergerak ke kiri
 Jika S = 1, semua display akan digeser, tetapi posisi kursor tidak berubah,
 Jika S = 1 dan I/D = 1 , display akan digeser ke kiri dan jika S = 1 dan I/D = 0 display
akan digeser ke kanan.
 Jika S = 0 , display tidak akan digeser.

 Display ON/OFF Control


0 0 0 0 0 0 1 D C B
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
D = 1, display akan ditampilkan D = 0, display tidak ditampilkan
C = 1, kursor akan ditampilkan C = 0 , kursor tidak ditampilkan
B = 1, karakter tempat posisi kursor berkedip
B = 0, karakter tempat posisi kursor tidak berkedip

 Cursor/Display Shift
0 0 0 0 0 1 S/C R/L * *
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0
Instruksi ini akan menggerakkan kursor dan menggeser display tanpa mengubah RAM.

S/C R/L Operasi


0 0 Posisi kursor digeser ke kiri
0 1 Posisi kursor digeser ke kanan
1 0 Seluruh display digeser ke kiri dengan kursornya
1 1 Seluruh display digeser ke kanan dengan
kursornya

 Function Set
0 0 0 0 1 DL 1 * * *
RS R/-W D7 D6 D5 D4 D3 D2 D1 D0

DL = 1, panjang data diatur 8 bit DL= 0, panjang data 4 bit (D7 – D4)

5
INTERFACE KE LCD

Buatlah program menampilkan: “POLMED” Kemudian “MENGUJI


LCD” dan kode ASCII dari nilai hexa switch Port P1.

;01 =Clear Display ;02 =Return


;04 =Crusor bergerak ke kiri ;06=Crusor bergerak ke kanan
;05=Display bergeser ke kanan ;07=Display bergeser ke kiri
;08=Display off,crusor off ;A=Display off, crusor ON
;C=Display ON, crusor OF ;E=Display ON, crusor blinking
;F=Display ON, crusor blinking ;10H= Crusor bergeser ke kiri
;14H=Crusor bergeser ke kanan ;80H=Crusor dimulai pd baris 1 kolom 1
;C0H=Crusor dimulai pd baris 2 ;38H= LCD 2 baris matrix 5x7
RS EQU P3.5
RW EQU P3.4
EN EQU P3.3
BUSY EQU P0.7
BUFFER EQU 40H
BUFFER1 EQU 50H

ORG 00
START: MOV R7,#1FH ; Memberi waktu pada LCD untuk stanby

6
TUNDA: CALL DELAY
DJNZ R7,TUNDA
MOV A,#38H ;2 baris dan 5x7, 8bit
ACALL CMND
MOV A,#0CH ;LCD ON
ACALL CMND
MOV A,#01 ;Clear LCD
ACALL CMND
MOV A,#06 ;Increment Crusor
ACALL CMND
MOV A,#085H ;Crusor pd baris 1 kolom 5
ACALL CMND
MOV A,#"P" ; Tampilan P
ACALL DISP
MOV A,#"O" ; Tampilan O
ACALL DISP
MOV A,#"L" ; Tampilan L
ACALL DISP
MOV A,#"M" ; Tampilan M
ACALL DISP
MOV A,#"E" ; Tampilan E
ACALL DISP
MOV A,#"D" ; Tampilan D
ACALL DISP
MOV R7,#0FFH
TUNG: CALL DELAY
DJNZ R7,TUNG
MOV A,#01 ;Clear LCD
ACALL CMND
MOV A,#080H ;Crusor pd baris 1 posisi 1
ACALL CMND
MOV DPTR,#TAMPILAN
MOV R1,#00
LJT: MOV A,R1
MOVC A,@A+DPTR
CJNE A,#13,TRS
SJMP TRS2
TRS: CALL DISP
INC R1
CALL DELAY
SJMP LJT
TRS2: MOV A,#0C8H
CALL CMND
MOV A,P1
CALL DISP
SJMP TRS2

CMND: MOV P0,A


CLR RS ;Clear RS
CLR RW ;Clear RW

7
SETB EN ;Set E EN=1
CLR EN ;Clear E EN=0
CALL DELAY ;Memberi waktu pada LCD menuliskan perintah
RET

DISP: MOV P0,A


SETB RS ;Set RS
CLR RW ;Clear RW
SETB EN ;Set E
CLR EN ;Clear E
CALL DELAY
CALL CEK
RET

CEK: CLR RS ;rs=0; Baca register sibuk


SETB RW ;RW=1
SETB EN ;Set E
CLR EN ;Clear E
JB BUSY,$ ;Tunggu hingga tidak sibuk
RET

DELAY: MOV R3,#0FH


GO1: MOV R2,#0FFH
GO: DJNZ R2,GO
DJNZ R3,GO1
RET

TAMPILAN: DB " MENGUJI LCD ",13;


END

TUGAS:

1. Buatlah program Counter 8-bit BCD pada LCD dimana tampilan pada Baris 2 Kolom 15.

2. Perbaiki Buatlah program sehingga tampilan counter adalah hitungan banyak penekanan
Tombol seperti pada gambar:

8
INTERFACE DENGAN KEY PAD

Mula-mula Program menampilkan “Menguji LCD” dan selanjutnya men-scan Key-Pad


Dan hasil Scan diubah ke ASCII (ditambah 30H) dan ditampilkan ke LCD.

;01 =Clear Display ;02 =Return


;04 =Crusor bergerak ke kiri ;06=Crusor bergerak ke kanan
;05=Display bergeser ke kanan ;07=Display bergeser ke kiri
;08=Display off,crusor off ;A=Display off, crusor ON
;C=Display ON, crusor OF ;E=Display ON, crusor blinking
;F=Display ON, crusor blinking ;10H= Crusor bergeser ke kiri
;14H=Crusor bergeser ke kanan ;80H=Crusor dimulai pd baris 1
;C0H=Crusor dimulai pd baris 2 ;38H= LCD 2 baris matrix 5x7
RS EQU P2.0
RW EQU P2.1
EN EQU P2.2
BUSY EQU P0.7
DATAKEY EQU 51H
BUFFER EQU 40H
BUFFER1 EQU 50H
ORG 00
START: MOV R7,#01H
TUNDA: CALL DELAY
DJNZ R7,TUNDA
MOV A,#38H ;2 baris dan 5x7, 8bit
ACALL CMND
9
MOV A,#0CH ; LCD ON
ACALL CMND
MOV A,#01 ;Clear LCD
ACALL CMND
MOV A,#06 ;Increment Crusor
ACALL CMND
MOV A,#080H ;Crusor pd baris 1 posisi 1
ACALL CMND
MOV DPTR,#TAMPILAN
MOV R1,#00
LJT: MOV A,R1
MOVC A,@A+DPTR
CJNE A,#13,TRS
SJMP TRS2
TRS: ACALL DISP
INC R1
ACALL DELAY
SJMP LJT
TRS2: MOV A,#0C8H
ACALL CMND
ACALL SCAN ;Periksa Tombol
MOV A,DATAKEY ;Ambil nilai tombol
ADD A,#30H ;Ubah ke kode ASCII
ACALL DISP ;Tampilkan ke LCD
SJMP TRS2

CMND: MOV P0,A


CLR RS ;Clear RS
CLR RW ;Clear RW
SETB EN ;Set E
CLR EN ;Clear E
ACALL DELAY
RET

DISP: MOV P0,A


SETB RS ;Set RS
CLR RW ;Clear RW
SETB EN ;Set E
CLR EN ;Clear E
ACALL DELAY
ACALL CEK
RET

CEK: CLR RS ;rs=0; Baca register sibuk


SETB RW ;RW=1
SETB EN ;Set E
CLR EN ;Clear E
JB BUSY,$ ;Tunggu hingga tidak sibuk
RET

10
SCAN:
CEKKOLOM1:
MOV P3,#11111011B
TUNG2: CALL DELAY
MOV A,P3
CJNE A,#11111011B, KOLOM1
SJMP CEKKOLOM2
KOLOM1: CJNE A,#11110011B, CEKR2C1
MOV DATAKEY,#1
RET
CEKR2C1: CJNE A,#11101011B,CEKR3C1
MOV DATAKEY,#4
RET
CEKR3C1: CJNE A,#11011011B,CEKR4C1
MOV DATAKEY,#7
RET
CEKR4C1: CJNE A,#10111011B,NOTC1
MOV DATAKEY,#10
NOTC1: SJMP EXITSCAN

CEKKOLOM2:
MOV P3,#11111101B
CALL DELAY
MOV A,P3
CJNE A,#11111101B, KOLOM2
SJMP CEKKOLOM3

KOLOM2: CJNE A,#11110101B, CEKR2C2


MOV DATAKEY,#2
RET
CEKR2C2: CJNE A,#11101101B,CEKR3C2
MOV DATAKEY,#5
RET
CEKR3C2: CJNE A,#11011101B,CEKR4C2
MOV DATAKEY,#8
RET
CEKR4C2: CJNE A,#10111101B,NOTC2
MOV DATAKEY,#0
RET
NOTC2: SJMP EXITSCAN
CEKKOLOM3:
MOV P3,#11111110B
CALL DELAY
MOV A,P3
CJNE A,#11111110B, KOLOM3
SJMP EXITSCAN

KOLOM3:
CJNE A,#11110110B, CEKR2C3

11
MOV DATAKEY,#3
RET
CEKR2C3: CJNE A,#11101110B,CEKR3C3
MOV DATAKEY,#6
RET
CEKR3C3: CJNE A,#11011110B,CEKR4C3
MOV DATAKEY,#9
RET
CEKR4C3: CJNE A,#10111110B,NOTC3
MOV DATAKEY,#11
RET
NOTC3: SJMP EXITSCAN
EXITSCAN: RET

DELAY: MOV R3,#050H


GO1: MOV R2,#0FFH
GO: DJNZ R2,GO
DJNZ R3,GO1
RET

TAMPILAN: DB " MENGUJI LCD ",13;


END

12
TUGAS:
- Tambahkan alaram pada port P1.0
- Buat Program untuk mengendalikan nyala alaram , dimana jika kode yang diberikan dari
keypad adalah dua angka terakhir dari NIM anda alaram bunyi 2 detik padam 1 detik
terus menerus hingga anda menekan angka 1.

Program LiquidCrystal.h

#ifndef LiquidCrystal_h
#define LiquidCrystal_h
#include <inttypes.h>
#include "Print.h"
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04

13
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80
// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00
// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00
// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00
// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00
class LiquidCrystal : public Print {
public:
LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
void clear();
void home();
void noDisplay();
void display();
void noBlink();

14
void blink();
void noCursor();
void cursor();
void scrollDisplayLeft();
void scrollDisplayRight();
void leftToRight();
void rightToLeft();
void autoscroll();
void noAutoscroll();
void setRowOffsets(int row1, int row2, int row3, int row4);
void createChar(uint8_t, uint8_t[]);
void setCursor(uint8_t, uint8_t);
virtual size_t write(uint8_t);
void command(uint8_t);
using Print::write;
private:
void send(uint8_t, uint8_t);
void write4bits(uint8_t);
void write8bits(uint8_t);
void pulseEnable();
uint8_t _rs_pin; // LOW: command. HIGH: character.
uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
uint8_t _enable_pin; // activated by a HIGH pulse.
uint8_t _data_pins[8];
uint8_t _displayfunction;
uint8_t _displaycontrol;
uint8_t _displaymode;
uint8_t _initialized;
uint8_t _numlines;
uint8_t _row_offsets[4];
};
#endif

Pemograman LCD dengan ESP32

15
LCD Pin –>ESP32 Pins

 PIN01-VSS -> GND


 PIN02-VDD -> 5V
 PIN03 V0-> 10K Pot (Middle pin)
 PIN04 RS-> GPIO19
 PIN05 RW-> GND
 PIN06 E -> GPIO23
 PIN07 D0-> NOT USED
 PIN08 D1-> NOT USED
 PIN09 D2-> NOT USED
 PIN10 D3-> NOT USED
 PIN11 D4-> GPIO18
 PIN12 D5-> GPIO17
 PIN13 D6-> GPIO16
 PIN14 D7-> GPIO15
 PIN15 A-> 5V
 PIN16 K-> GND

16
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(19, 23, 18, 17, 16, 15);

void setup() {
// set coloum dan baris LCD
lcd.begin(16, 2);
// Cetak pesan pada LCD.
lcd.print("circuitschools.");
}
void loop() {
// set cursor ke column 0, baris 1
// (catatan: baris 1 adalah baris ke dua, jika hitungan dimulai dengan 0):
lcd.setCursor(0, 1);
// cetak angka dari detik setelah reset:
lcd.print(millis() / 1000);
}

Setelah program di Uploading maka LCD akan menampilkan seperti gambar berikut.

17

Anda mungkin juga menyukai