Sie sind auf Seite 1von 15

Praktek 6

Display Data Pada LCD

Tujuan:
 Mahasiswa mengerti cara membuat program C pada mikrokontroller AVR untuk
melakukan pemrograman pada modul LCD

Peralatan yang digunakan:


 modul AVR
 Modul LCD

Deskripsi/ Dasar Teori:

Gambar 1. LCD character (tampak visual)

Gambar 2. Wiring Diagram LCD Karakter 20x2

Tabel.1. Pin Out LCD character

Pins Description
1 Ground
2 Vcc
3 Contrast Voltage
4 "R/S" _Instruction/Register Select
5 "R/W" _Read/Write LCD Registers
6 "E" Clock
7 - 14 Data I/O Pins (D0..D7)
Pins Description
15 Anoda (+) backlight
16 Katoda (-) backlight

Gambar 3. Rangkaian pengatur kontras tampilan LCD

Gambar 4. Setting LCD di Code Vision

Tabel.2. Daftar Instruksi LCD Character

R/S R/W D7 D6 D5 D4 D3 D2 D1 D0 Instruction/Description


4 5 14 13 12 11 10 9 8 7 Pins
0 0 0 0 0 0 0 0 0 1 Clear Display
0 0 0 0 0 0 0 0 1 * Return Cursor and LCD to Home Position
0 0 0 0 0 0 0 1 ID S Set Cursor Move Direction
0 0 0 0 0 0 1 D C B Enable Display/Cursor
0 0 0 0 0 1 SC RL * * Move Cursor/Shift Display
0 0 0 0 1 DL N F * * Set Interface Length
0 0 0 1 A A A A A A Move Cursor into CGRAM
0 0 1 A A A A A A A Move Cursor to Display
0 1 BF * * * * * * * Poll the "Busy Flag"
Write a Character to the Display at the Current
1 0 D D D D D D D D
Cursor Position
Read the Character on the Display at the Current
1 1 D D D D D D D D
Cursor Position

The bit descriptions for the different commands are:

"*" - Not Used/Ignored. This bit can be either "1" or "0"

Set Cursor Move Direction:


ID - Increment the Cursor After Each Byte Written to Display if Set
S - Shift Display when Byte Written to Display

Enable Display/Cursor
D - Turn Display On(1)/Off(0)
C - Turn Cursor On(1)/Off(0)
B - Cursor Blink On(1)/Off(0)

Move Cursor/Shift Display


SC - Display Shift On(1)/Off(0)
RL - Direction of Shift Right(1)/Left(0)

Set Interface Length


DL - Set Data Interface Length 8(1)/4(0)
N - Number of Display Lines 1(0)/2(1)
F - Character Font 5x10(1)/5x7(0)

Poll the "Busy Flag"


BF - This bit is set while the LCD is processing

Move Cursor to CGRAM/Display


A - Address

Read/Write ASCII to the Display


D - Data

Proses inisialisasi pemrograman LCD dalam mode 4 four bit:


1. Wait more than 15 msecs after power is applied.
2. Write 0x03 to LCD and wait 5 msecs for the instruction to complete
3. Write 0x03 to LCD and wait 160 usecs for instruction to complete
4. Write 0x03 AGAIN to LCD and wait 160 usecs (or poll the Busy Flag)
5. Set the Operating Characteristics of the LCD
o Write 0x02 to the LCD to Enable Four Bit Mode

All following instruction/Data Writes require two nibble writes.

o Write "Set Interface Length"


o Write 0x01/0x00 to turn off the Display
o Write 0x00/0x01 to Clear the Display
o Write "Set Cursor Move Direction" Setting Cursor Behaviour Bits
o Write "Enable Display/Cursor" & enable Display and Optional Cursor
Gambar 5. Daftar Kode Karakter yang bisa ditampilkan di LCD karakter

Fungsi-fungsi yang sudah disediakan dalam pustaka (library) file LCD.H:

 _lcd_ready()  memeriksa kesiapan LCD untuk melakukan perintah selanjutnya


(memeriksa status busy flag)
 _lcd_write_data(unsigned char data)  beri perintah ke LCD
 lcd_write_byte(unsigned char addr, unsigned char data)  write a byte to the LCD
character generator or display RAM
 unsigned char lcd_read_byte(unsigned char addr)  read a byte from the LCD
character generator or display RAM
 lcd_gotoxy(unsigned char x, unsigned char y)  set the LCD display position
x=0..39 y=0..3
 lcd_clear()  clear the LCD
 lcd_putchar(char c)  write the string str located in SRAM to the LCD
 lcd_puts(char *str)  write the string str located in SRAM to the LCD
 lcd_putsf(char flash *str)  write the string str located in FLASH to the LCD
 unsigned char lcd_init(unsigned char lcd_columns)  initialize the LCD controller

PERCOBAAN 1
#include <mega128.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;
lcd_init(20); // Inisialisasi LCD
lcd_putchar('s'); // Tampilkan karakter s di baris 0 kolom 0
lcd_gotoxy(5,0); // Ke kolom 5 baris 0
lcd_putchar('t'); // Tampilkan karakter t di kolom 5 baris 0
lcd_gotoxy(3,1); // Ke kolom 3 baris 1
lcd_putchar('t'); // Tampilkan karakter t di kolom 3 baris 1
while(1)
{
};
}

Hasilnya:

PERCOBAAN 2
#include <mega128.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20); // Inisialisasi LCD


lcd_putchar('s'); // Tampilkan karakter s di baris 0 kolom 0
lcd_putchar(0x30); // Ditulis datanya (lihat tabel)
lcd_putchar(' '); // spasi
lcd_putchar(0xC0); // Ditulis datanya (lihat tabel)
lcd_putchar(65); // Ditulis datanya (lihat tabel)
while(1)
{
};
}

Hasilnya :

PERCOBAAN 3
#include <mega128.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20); // Inisialisasi LCD


lcd_putsf("ELEKTRO INDUSTRI"); // Tampilkan karakter 1 kalimat
lcd_gotoxy(0,1) ; // Mulai kolom 0 baris 1
lcd_putsf("PENS"); // Tampilkan karakter 1 kalimat

while(1)
{
};
}

Hasilnya :

PERCOBAAN 4
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20); // Inisialisasi LCD


lcd_putsf("hallo");
delay_ms(1000);
lcd_clear();
lcd_putsf("apa kabar..");

while(1)
{
};
}

Hasilnya :

PERCOBAAN 5
Animasi garis yang berputar.
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20); // Inisialisasi LCD


lcd_putsf ("Loading.. ");

while (1)
{
lcd_gotoxy(10,0);
lcd_putchar('-');
delay_ms(100);

lcd_gotoxy(10,0);
lcd_putchar('|');
delay_ms(100);

lcd_gotoxy(10,0);
lcd_putchar('/');
delay_ms(100);
};
}

Hasilnya :

PERCOBAAN 6
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
int a;
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20); // Inisialisasi LCD

while (1)
{
lcd_putsf ("Loading.. ");
lcd_gotoxy(0,1);
for (a=1;a<=20;a++)
{
lcd_putchar(0xff);
delay_ms(300);
}

lcd_gotoxy(0,0);
lcd_putsf ("Process Complete. ");
delay_ms(2000);
lcd_clear();
};
}

Hasilnya :

PERCOBAAN 7
Menampilkan angka desimal dari 0 sampai 999 dan berulang. ( ratusan / 3 digit )
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

///////////////////////////////
void H2BCD(int bilangan)
{
int ratusan,puluhan,satuan;

ratusan= bilangan/100; // misal bilangan=231


// 231/100= 2
puluhan = (bilangan - (ratusan*100))/10; // (231-(2*100))/10
// (231-200)/10 = 31/10 = 3
satuan = bilangan - (puluhan*10) - (ratusan*100);

lcd_putchar(ratusan+0x30);
lcd_putchar(puluhan+0x30);
lcd_putchar(satuan+0x30);
}

void main(void)
{
int a;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;

lcd_init(20);

while (1)
{
for(a=0;a<=999;a++)
{ lcd_gotoxy(0,0);
H2BCD(a);
delay_ms(100);
}
}
}

Hasilnya :

PERCOBAAN 8
Menampilkan angka desimal dari 0 sampai 2999 dan berulang. ( ribuan / 4 digit )
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

///////////////////////////////
void H2BCD(int bilangan)
{
int ratusan,puluhan,satuan,ribuan;

ribuan=bilangan/1000;
ratusan= (bilangan - (ribuan*1000))/100; // misal bilangan=231
// 231/100= 2
puluhan=(bilangan-(ribuan*1000)-(ratusan*100))/10; // (231-(2*100))/10
// (231-200)/10 = 31/10 = 3
satuan = bilangan - (puluhan*10) - (ratusan*100)- (ribuan*1000);

lcd_putchar(ribuan+0x30);
lcd_putchar(ratusan+0x30);
lcd_putchar(puluhan+0x30);
lcd_putchar(satuan+0x30);
}
void main(void)
{
int a;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;

lcd_init(20);

while (1)
{
for(a=0;a<=2999;a++)
{ lcd_gotoxy(0,0);
H2BCD(a);
delay_ms(50);
}
}

Hasilnya :

PERCOBAAN 9
Menampilkan tulisan “COBA LCD” scroll dari kanan ke kiri.
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

/////////////////////////
void main(void)
{
int a,i;
flash unsigned char *pesan;
PORTA=0x00; // semua bit jadi output
DDRA=0xFF;

lcd_init(20);

// 48= 20+ jmlh karakter ( = 8 ) + 20 (20 jmlh barisnya LCD)


// 123456789012345678901234567890123456789012345678
pesan=" COBA LCD ";

while (1)
{
for(a=0;a<20+8;a++) // 20 + Jmlh karakter
{
for(i=0;i<=19;i++)
{
lcd_putchar(pesan[a+i]);
}
delay_ms(100);
lcd_clear();
}
}
}

Hasilnya :

PERCOBAAN 10
Menampilkan tulisan “COBA LCD” scroll dari kanan ke kiri.
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

/////////////////////////
void main(void)
{
int a,i;
flash unsigned char *pesan;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;
lcd_init(20);
// 48= 20+ jmlh karakter ( = 8 ) + 20 (20 jmlh barisnya LCD)
// 123456789012345678901234567890123456789012345678
pesan=" COBA LCD ";
lcd_gotoxy(0,1);
// 12345678901234567890
lcd_putsf("********************");
while (1)
{
for(a=0;a<=20+8;a++)
{
lcd_gotoxy(0,0);
for(i=0;i<=19;i++)
{
lcd_putchar(pesan[a+i]);
}
delay_ms(100);
}
}
}

Hasilnya :

PERCOBAAN 11
Program untuk menampilkan tulisan
“TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA”
scroll dari kiri ke kanan.
Program :
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
int a,i;
flash unsigned char *pesan;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;
lcd_init(105)
// 102 = 20 + jmlh karakter (62) + 20 (20 jmlh barisnya LCD)
pesan=" TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA NEGERI
SURABAYA ";
while (1)
{
for(a=102;a>=20;a--) // 40 + Jmlh karakter (62)
{
for(i=19;i>=0;i--)
{
lcd_putchar(pesan[a-i]);
}
delay_ms(10);
lcd_clear();
}
}
}
Hasilnya :

PERCOBAAN 12
Program untuk menampilkan tulisan
“TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA”
scroll dari kanan ke kiri.

Program :
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
void main(void)
{
int a,i;
flash unsigned char *pesan;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;
lcd_init(105);

// 102 = 20 + jmlh karakter (62) + 20 (20 jmlh barisnya LCD)


pesan=" TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA NEGERI
SURABAYA ";

while (1)
{
for(a=0;a<=82;a++) // 40 + Jmlh karakter (62)
{
for(i=0;i<=19;i++)
{
lcd_putchar(pesan[a+i]);
}
delay_ms(10);
lcd_clear();
}
}
}
Hasilnya :
PERCOBAAN 13
Program untuk menampilkan tulisan
“TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA NEGERI SURABAYA”
scroll dari kiri ke kanan., dan setelah sampai ujung kanan kembali ke kiri.
Program :
#include <mega128.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

/////////////////////////
void main(void)
{
int a,i;
flash unsigned char *pesan;

PORTA=0x00; // semua bit jadi output


DDRA=0xFF;

lcd_init(80);

// 102 = 20 + jmlh karakter (62) + 20 (20 jmlh barisnya LCD)


pesan=" TEKNIK ELEKTRO INDUSTRI POLITEKNIK ELEKTRONIKA
NEGERI SURABAYA ";

while (1)
{ //kiri ke kanan
for(a=100;a>=21;a--)
{
for(i=19;i>=0;i--)
{
lcd_putchar(pesan[a-i]);
}
delay_ms(7);
lcd_clear();
}
//kanan ke kiri
for(a=1;a<=81;a++)
{
for(i=0;i<=19;i++)
{
lcd_putchar(pesan[a+i]);
}
delay_ms(7);
lcd_clear();
}
}
}
Hasilnya :

Das könnte Ihnen auch gefallen