LCD atau Liquid Crystal Display merupakan salah satu perangkat yang digunakan untuk menampilkan huruf, angka atau gambar yang dapat mempermudah pekerjaan. LCD merupakan bagian penting dari suatu sistem elektronika. Melalui LCD, programmer dapat melakukan debugging dengan lebih mudah, yaitu dengan menampilkan nilai-nilai variabel yang diukur. Melalui LCD pula, pengguna dapat melihat output dari sistem. Pada suatu sistem pengukur suhu misalnya, LCD digunakan untuk menampilkan suhu terukur, sehingga pengguna dapat merespon tentang apa yang sebaiknya dilakukan berdasarkan data dari suhu tersebut.
Salah satu LCD yang sering digunakan ditunjukkan oleh gambar 1. Secara umum, dasar-dasar LCD dapat dibaca pada halaman ini.
Gambar 1 LCD 16x2 |
Pada library LCD Arduino, terdapat 21 fungsi atau method yang dapat diakses dari luar, di mana fungsi-fungsi tersebut dapat diakses dengan terlebih dahulu membuat sebuah obyek LCD. Di pembahasan ini akan kami coba jelaskan mengenai penggunaan library LCD pada contoh “Hello World”. Jika kita buka contoh koding “Hello World” yang disediakan di library, sebuah obyek LCD dibuat dengan cara sebagai berikut:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Jika dilihat pada LiquidCrystal.cpp, dapat diketahui bahwa terdapat 4 konstruktor dari LCD, di mana pada contoh “Hello World”, konstruktor yang digunakan adalah sebagai berikut:
LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
{
init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
}
Parameter pertama adalah uint8_t rs, di mana nilai dari rs ini nantinya akan menjadi pin yang terhubung dengan pin RS dari LCD. Parameter ke dua adalah uint8_t enable, di mana nilai dari enable ini nantinya akan menjadi pin yang terhubung dengan pin EN dari LCD. Demikian pula dengan parameter-parameter selanjutnya, akan menjadi pin yang terhubung dengan LCD.
Di dalam konstruktor LCD yang digunakan tersebut, hanya terdapat satu fungsi yang dipanggil, yaitu fungsi init.
void LiquidCrystal::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) { _rs_pin = rs; _rw_pin = rw; _enable_pin = enable; _data_pins[0] = d0; _data_pins[1] = d1; _data_pins[2] = d2; _data_pins[3] = d3; _data_pins[4] = d4; _data_pins[5] = d5; _data_pins[6] = d6; _data_pins[7] = d7; if (fourbitmode) _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; else _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; begin(16, 1); }
Dari fungsi tersebut,
dapat dilihat bahwa parameter fourbitmode diberi nilai 1 (lihat konstruktor
LCD, parameter pertama pada init adalah 1), sehingga nantinya data yang
digunakan untuk menampilkan karakter menggunakan 4 bit atau 4 kaki LCD. Nilai-nilai
parameter yang dimasukkan nantinya digunakan untuk mengatur pin output dari Arduino.
Pada fungsi init ini juga terdapat inisialisasi _displayfunction, yang pada
contoh “Hello World”, diisi dengan LCD_4BITMODE, di mana nilai dari
LCD_4BITMODE adalah 0x00 , LCD_1LINE adalah 0x00, dan LCD_5x8DOTS adalah 0x00. Oleh
karena itu, nilai dari _displayfunction adalah 0x00. Nilai ini nantinya
digunakan untuk inisialisasi LCD.
Pada bagian akhir dari
method init ini, terdapat fungsi begin(16,1) di mana fungsinya adalah untuk
menginisialisasi bahwa LCD yang digunakan memiliki 16 kolom dan 1 baris. Namun,
jika dilihat dari contoh “Hello World” scope setup(), fungsi begin tersebut
kembali dipanggil dengan parameter yang berbeda, yaitu begin(16,2) yang berarti
fungsi begin sebelumnya ditimpa oleh begin yang menunjukkan LCD yang digunakan
memiliki 16 kolom dan 2 baris.
Method / fungsi
selanjutnya yang dipanggil adalah print. Jika dilihat pada file
LiquidCrystal.cpp, ternyata fungsi tersebut tidak ada. Akan tetapi, jika
dilihat pada bagian definisi kelas LCD, ternyata kelas LCD adalah turunan dari
kelas Print, di mana, pada kelas Print, fungsi print berisi fungsi write,
sehingga dengan memanggil fungsi print, akan sama dengan memanggil fungsi write
pada kelas LCD. Pada LiquidCrystal.cpp, fungsi write memanggil fungsi send.
Pada fungsi send, pin
rs diberi nilai HIGH terlebih dahulu (karena pada pemanggilan send, parameter
ke dua adalah HIGH). Hal ini diperlukan agar LCD berada pada mode write pada
saat diberi pulsa nantinya. Apabila rs diberi nilai LOW, maka LCD berada pada
mode read pada saat diberi pulsa nantinya.
Pada pengaturan yang
sudah dilakukan, mode yang digunakan adalah mode 4 bit, sehingga kaki yang
digunakan untuk data pada LCD hanyalah 4 saja, akan tetapi, untuk memunculkan
sebuah karakter diperlukan 8 bit data. Jika pada mode 8 bit, ke 8 bit data
tersebut langsung dimasukkan pada kaki-kaki data, akan tetapi pada mode 4 bit,
data karakter yang berjumlah 8 bit dikirimkan 2 kali, 4 bit MSB baru 4 bit LSB.
Hal ini secara program dilakukan dengan menggeser data ke kanan (shift right)
sebanyak 4 kali baru masuk ke write4bits dan dilanjutkan dengan nilai 4 bit
selanjutnya.
void LiquidCrystal::write4bits(uint8_t value) { for (int i = 0; i < 4; i++) { digitalWrite(_data_pins[i], (value >> i) & 0x01); } pulseEnable(); }
Fungsi / method write4bits berfungsi untuk memberikan 1 atau 0 pada pin-pin Arduino yang terhubung dengan data LCD. Setelah pin sudah memiliki logika yang sesuai, dibangkitkanlah pulsa dengan fungsi pulseEnable(). Fungsi pulsa ini berfungsi untuk membuat LCD menampilkan karakter yang diperoleh dari pin data.
Library LCD Arduiono dapat diunduh di sini.
CMIIW
Comments
Post a Comment