LCD KARAKTER
TUJUAN:
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16
2. Mahasiswa dapat memahami program bahasa C untuk menampilkan data ke LCD Karakter 2 x 16
Pada tugas yang kami buat ini adalah menggunakan mikrokontroller AT 89S51, Di sini LCD di hubungkan ke mikrokontroller dengan konfigurasi port seperti yang terlihat pada gambar di bawah ini.
Gambar 1. Rangkaian interface Mikrokontroller ke LCD Karakter 2 x16
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti AT89S51. LCD yang di gunakan mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut:
Gambar 2. Modul LCD Karakter 2x16
Tabel 1.1 Pin dan Fungsi
PIN | Name | Function |
1 | VSS | Ground voltage |
2 | VCC | +5V |
3 | VEE | Contrast voltage |
4 | RS | Register Select |
5 | R/W | Read/ Write, to choose write or read mode |
6 | E | Enable |
7 | DB0 | LSB |
8 | DB1 | - |
9 | DB2 | - |
10 | DB3 | - |
11 | DB4 | - |
12 | DB5 | - |
13 | DB6 | - |
14 | DB7 | MSB |
15 | BPL | Back Plane Light |
16 | GND | Ground voltage |
Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda 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 sebagi sebua perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data yang dikirim adalah data text yang akan ditampilkan pada display LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD maka RS harus diset logika high “1”.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka program akan melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user ). Pada kasus bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,
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 | F | 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
N: Pengaktivan baris
N=0, 1 baris
N=1, 2 baris
F: Penentuan ukuran font karakter
F=0, 5x7
F=1, 5x8
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 |
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 |
GESER KANAN KURSOR ATAU 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 | 1 | S/C | R/L | X | X |
Catatan : x = Dont 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 |
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.
Pada peta memori tersebut, daerah yang berwarna biru ( 00 s/d 0F dan 40 s/d 4F ) adalah display yang tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris. Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar. Demikianlah karakter pertama di sudut kiri atas adalah menempati alamah 00h. Posisi karakter berikutnya adalah alamat 01h dan seterusnya.
Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan pada peta memori adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah perintah ke LCD untuk mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi Set Posisi Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita berharap untuk menempatkan kursor.Sebagai contoh, kita ingin menampilkan kata ”World” pada baris ke dua pada posisi kolom ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari baris ke dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata ”World” pada LCD, kita harus mengirim instruksi set posisi kursor, dan perintah untuk instruksi ini adalah 80h ditambah dengan alamat 80h+4Ah =0Cah. Sehingga dengan mengirim perintah Cah ke LCD, akan menempatkan kursor pada baris kedua dan kolom ke 11 dari DDRAM.
Set Alamat Memori DDRAM
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 1 | A | A | A | A | A | A | A |
Catatan:
A : Alamat RAM yang akan dipilih
Sehingga alamat RAM LCD adalah 000 0000 S/D 111 1111 b atau 00 s/d 7Fh
INISIALISASI
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan inisialisasi dan mengkonfigurasikannya. Hal ini dijalankan dengan mengirimkan sejumlah instruksi ke LCD. Antara lain: pengaturan lebar data interface 8 bit atau 4 bit data bus.
Setelah proses interface antara mikrokontroller dengan LCD selsesai, selanjutnya mulai membuat program, sebelum itu kita tentukan dulu program seperti apa yang ingin kita buat, misalnya dalam program yang kami buat, akan menampilkan tulisan geser kiri pada LCD, untuk instruksi pada pin LCD sudah di jelaskan di atas. Dalam program ini menggunakan bahasa pemrograman C, untuk menulis program dan mengkompile program menjadi file Hexa (.Hex) digunakan software MIDE. Sebetulnya dapat juga menggunakan software yang lainnya, seperti SDCC. Untuk mendownloadkan program .Hex ke IC menggunakan SPI-flash programmer 3.7.
L isting Program :
#include
void tunda1ms();
void tulis_inst();
void tulis_data();
void inisialisasi();
void tunda(int n);
void kirim_baris_1();
void kirim_baris_2();
void main()
{
while(1)
{
inisialisasi;
tunda(1000);
A=0x01;// bersihkan layar
tulis_inst();
tunda(500);
A=0x80;// baris 1
tulis_inst();
tunda(500);
kirim_baris_1();
A=0xC0;// pindah baris 2
tunda(500);
tulis_inst();
kirim_baris_2();
}
}
void kirim_baris_1()
{
int j=0;
char *teks={"I GEDE MADE SURYA ->0612211"};
while(teks[j]!=0)
{
A=teks[j];
tulis_data();
tunda(500);
j++;
}
}
void kirim_baris_2()
{
int j=0;
char *teks={"WIBI WICAKSONO I ->0612208"};
while(teks[j]!=0)
{
A=teks[j];
tulis_data();
tunda(500);
j++;
}
}
void tunda1ms()
{
int i;
for(i=0;i<100;i++);
}
void tunda(int n)
{
int i;
for (i=0; i
tunda1ms();
}
void tulis_inst()
{
P2_6=0;//rs
P2_7=1;//enable
P0=A;
P2_7=0;
P2_7=1;
tunda(500);
}
void tulis_data()
{
P2_6=1;//rs
P2_7=1;//enable
P0=A;
P2_7=0;
P2_7=1;
tunda(500);
}
void inisialisasi()
{
A=0x3F;// data 8 bit
tulis_inst();
A=0x0C;// display hidup, kursor mati, dan kedip mati
tulis_inst();
A=0x07;// display geser kiri
tulis_inst();
A=0x01;// bersihkan layar
tulis_inst();
}
Komentar
Posting Komentar