Pada percobaan ini anda akan mempelajari interface LCD (liquid crystal display ) dengan mikrokontroller. LCD merupakan komponen display yang dapat menampilkan berbagai macam karakter. Jenis LCD ada berbagai macam, dan yang paling sering digunakan adalah LCD Karakter 2 x 16. Pada percobaan iini akan menggunakan LCD karakter 2 x16, dengan interface pada PORTC, Codevision menyediakan fungsi-fungsi untuk keperluan pengelolaan LCD.
Fungsi-Fungsi LCD
Fungsi LCD terletak pada header alcd.h yang di-include-kan secara langsung pada saat membangkitkan program dengan codewizard.
#include <alcd.h>
Fungsi-fungsi untuk mengakses LCD diantaranya adalah :
a. unsigned char lcd_init(unsigned char lcd_columns)
Untuk menginisialisasi modul LCD, menghapus layar dan meletakkan posisi karakter pada baris ke-0 kolom ke-0. Jumlah kolom pada LCD harus disebutkan (misal, 16). Kursor tidak ditampakkan. Nilai yang dikembalikan adalah 1 bila modul LCD terdeteksi, dan bernilai 0 bila tidak terdapat modul LCD. Fungsi ini harus dipanggil pertama kali sebelum menggunakan fungsi yang lain.
b. void lcd_clear(void)
Menghapus layar LCD dan meletakkan posisi karakter pada baris ke-0 kolom ke-0.
c. void lcd_gotoxy(unsigned char x, unsigned char y)
Meletakkan posisi karakter pada kolom ke-x baris ke-y. Nomor baris dan kolom
dimulai dari nol.
d. void lcd_putchar(char c)
Menampilkan karakter c pada LCD.
e. void lcd_puts(char *str)
Menampilkan string yang disimpan pada SRAM pada LCD.
Prosedure percobaan:
1. Susunlah rangkaian seperti yang ada pada gambar halaman 1. Pastikan bahwa posisi jumper ENABLE LCD telah terhubung pada modul trainer. Pada gambar berikut tampak bahwa LCD karakter terhubung ke PORTC
2. Lakukan langkah-langkah wizard pada codevision, sebagaimana yang ditunjukkan pada gambar
1. Percobaan cetak karakter pada baris 1 dan baris 2
#include <mega8535.h> #include <delay.h> #include <alcd.h> // Declare your global variables here void main(void) { PORTC=0x00; DDRC=0x00; lcd_init(16); while (1) { // Place your code here { lcd_gotoxy(0,0); lcd_putsf("Selamat Datang"); lcd_gotoxy(0,1); lcd_putsf("Di Pelatihan AVR"); delay_ms(500); lcd_clear(); }; } }
2. Percobaan Cetak Karakter dan Interaksi dengan Saklar
Pada percobaan ini, akan menggunakan dua buah saklar PORTB.1 dan PORTB.2, setiap saklar tersebut akan memunculkan komentar masing-masing.
#include <mega8535.h> #include <delay.h> #include <alcd.h> // Declare your global variables here void main(void) { PORTB=0xFF; DDRB=0x00; lcd_init(16); lcd_clear(); while (1) { // Place your code here if (PINB.1==0) { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Selamat Datang"); delay_ms(250); } else if (PINB.2==0) { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Pelatihan AVR"); delay_ms(250); } else { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Tekan SW1/ SW2"); delay_ms(250); } } }
3. Percobaan simulasi setting UP/DN dan ENTER pada LCD
Pada percobaan ini interaksi karakter dilakukan dengan menggunakan beberapa saklar dan PB0 digunakan untuk setting UP, PB1 digunakan untuk setting DN, PB2 digunakan untuk tombol ENTER.
#include <mega8535.h> #include <delay.h> #include <alcd.h> #include <stdlib.h>
// Declare your global variables here unsigned char i; unsigned char temp[3]; void main(void) { PORTB=0xFF; DDRB=0x00; lcd_init(16); lcd_clear(); while (1) { while(PINB.2==1) { if (PINB.0==0) { lcd_clear(); i++; itoa(i,temp); lcd_gotoxy(0,0); lcd_puts(temp); delay_ms(500); } else if (PINB.1==0) { lcd_clear(); i--; itoa(i,temp); lcd_gotoxy(0,0); lcd_puts(temp); delay_ms(500); } } lcd_gotoxy(0,0); lcd_putsf("Selesai"); } }