Posted by : kutuSolder Selasa, 31 Desember 2013

LCD merupakan device untuk menampilkan keluaran tertentu secara grafis. Dengan LCD, alat yang kita buat dapat menjadi lebih interaktif dengan menampilkan berbagai informasi pada layar LCD. Sebuah LCD 16x2 stardard yang sering digunakan adalah produk HITACHI seri HD44780. 16x2 berarti LCD terdiri dari 16 kolom dan 2 baris. 
Sebuah LCD standard 16x2 memiliki diagram sebagai berikut:

pin LCD 16x2


VSS, merupakan pin power supply GND
VDD, adalah VCC +5V
VEE, untuk merubah brightness LCD. Tegangan supply antara +3.5-5V. Pin ini sering dihubungkan dengan potensiometer agar brightness dapat diatur sewaktu-waktu.
RS, Register Select. Diset untuk mengirimkan command (0) atau data (1).  Command  merupakan perintah tertentu yang akan dijalankan LCD, seperti menampilkan cursor, membuat cursor berkedip, membersihkan tampilan LCD. Dll.
RW, pin control untuk membaca atau menuliskan data ke LCD. 0 untuk Write dan 1 untuk Read
E, pin control untuk enable/disable LCD
D0-D7, merupakan pin data untuk mengirimkan data ke LCD.
biasanya beberapa tipe LCD terdapat dua pin lagi untuk lampu belakang yang merupakan LED.

Beberapa Daftar Command LCD

LCD dapat dihubungkan dengan hanya 4 atau 8 bit pin data. Tentu saja akan lebih efisien jika menggunakan 4 bit pin data.  Pada tutorial ini akan dicontohkan penulisan code untuk   mode 8 dan 4 bit. Terutama mode 4 bit, kita dapat menggunakan library pada CodeVision yakni lcd.h.
Mode 8 bit
Untuk dapat menampilkan data ke LCD, kita perlu mengikuti workflow berikut:

1.    Menggunakan register control untuk menuliskan perintah/data
void LCD_cmd(unsigned char cmd)
{
LCD_DATA=cmd;
ctrl =(0<<rs)|(0<<rw)|(1<<en); // RS and RW as LOW and EN as HIGH
_delay_ms(1);
ctrl =(0<<rs)|(0<<rw)|(0<<en); // RS, RW , LOW and EN as LOW
_delay_ms(100);
return;
}
2.    Melakukan inisalisasi  LCD dengan mengirim beberapa command untuk membersihkan layar, setting karakter, dll.  Lihat sample code berikut:
void init_LCD(void)
{

LCD_cmd(0x38); // inisialisasi LCD mode 8 bit
_delay_ms(1);
LCD_cmd(0x01); // membersihkanlayar
_delay_ms(1);
LCD_cmd(0x0E); // menampilkan cursor
_delay_ms(1);
LCD_cmd(0x80); //  memulai penulisan karakter pada kolom 0 dan baris 0 pada LCD
_delay_ms(1);
return;
}

3.    Setelah inisialisasi, selanjutnya set pin RW ke 0 untuk menuliskan data dan melakukan perubahan en dari 1 ke 0 untuk memasukkan data ke LCD.
void LCD_write(unsigned char data)
{
LCD_DATA=data;
ctrl = (1<<rs)|(0<<rw)|(1<<en); // RW  LOW dan RS, EN HIGH
_delay_ms(1);
ctrl = (1<<rs)|(0<<rw)|(0<<en); // EN dan RW LOW dan RS HIGH
_delay_ms(100); // delay, memberi kesempatan LCD untuk mengeksekusi perintah
return ;
}

Sample Code
Sample code berikut akan menuliskan karakter “ELINS” pada LCD. 
//  program untuk menampilkan karakter “ELINS” pada LCD 16x2 
/*
LCD   pada mode 8 bit
#include<avr/io.h>
#include<util/delay.h>

#define LCD_DATA PORTC // LCD data port
#define ctrl PORTD
#define en PB6 // enable signal
#define rw PB5 // read/write signal
#define rs PB4 // register select signal
#define F_CPU 11059200


void LCD_cmd(unsigned char cmd);
void init_LCD(void);
void LCD_write(unsigned char data);
void LCD_write_string(unsigned char data[]);

int main()
{
DDRC=0xff; //  inisialisasi port C sebagai output
DDRD=0x70; //  port D pin PD4,5,6 sebagai ouput
init_LCD(); // inisialisasi LCD
_delay_ms(50); // delay  50 ms
unsigned  char j[]="ELINS"; // array
int i;
LCD_write_string(j); menuliskan string ke LCD
return 0;
}

void init_LCD(void)
{

LCD_cmd(0x38); // inisialisasi LCD mode 8 bit
_delay_ms(1);
LCD_cmd(0x01); // membersihkanlayar
_delay_ms(1);
LCD_cmd(0x0E); // menampilkan cursor
_delay_ms(1);
LCD_cmd(0x80); //  memulai penulisan karakter pada kolom 0 dan baris 0 pada LCD
_delay_ms(1);
return;
}

void LCD_cmd(unsigned char cmd)
{
LCD_DATA=cmd;
ctrl =(0<<rs)|(0<<rw)|(1<<en); // RS and RW as LOW and EN as HIGH
_delay_ms(1);
ctrl =(0<<rs)|(0<<rw)|(0<<en); // RS, RW , LOW and EN as LOW
_delay_ms(100);
return;
}
void LCD_write(unsigned char data)
{
LCD_DATA=data;
ctrl = (1<<rs)|(0<<rw)|(1<<en); // RW  LOW dan RS, EN HIGH
_delay_ms(1);
ctrl = (1<<rs)|(0<<rw)|(0<<en); // EN dan RW LOW dan RS HIGH
_delay_ms(100); // delay, memberi kesempatan LCD untuk mengeksekusi perintah
return ;
}
void LCD_write_string(unsigned char j[]) 
// fungsi untuk mengirim beberapa karakter ke LCD
{
    int i=0;
    while(j[i]!='\0')
    {
        LCD_write(j[i]);
        i++;
        _delay_ms(10);
    }
    return;
}


Compile code diatas dengan Code Vision/Atmel Studio (Atmel AVR untuk versi sebelum v.6).
Test code tersebut pada proteus. Buat scematic seperti berikut pada ISIS proteus:


Ads not by this site

Pin 32 dan 30 dihubungkan ke VCC, karena kita menggunakan AREF sebagai referensi ADC. Untuk tahu lebih detil tentang interfacing ADC, luangkan untuk membaca post INI.

Pastikan Frekuensi krital pada X1, dan U1 sama dengan setting F_CPU pada code.  Double click pada U1, dan berikan setting seperti berikut.  Pada program file, masukkan alamat lengkap untuk code HEX hasil compile. 


Post Comment

2 Responses so far.

  1. kalo mao bikin settingan dari pull up ke lcd gimana ya gan caranya ?? mohon dibantu gan .

Selamat datang di situs Kutu Solder™. Mohon maaf atas keterbatasan yang ada di situs ini, Admin masih belajar dan terus belajar dalam dunia elektro dan blogger. Terimakasih telah berkunjung ke blog saya. Copyright ©2014 Kutu Solder™