Skip to main content

Arduino: Memahami Library LCD

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