1. TUJUAN
1. Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan modul penampil LCD.
2. Mengetahui dan memahami bagaimana memprogram mikrokontroler untuk menampilkan karakter ke penampil LCD.
2. DASAR TEORI
Modul LCD M1632 seperti dalam Gambar 6.1 merupakan modul LCD dengan tampilan 16 x 2 baris dengan konsumsi daya yang rendah. Modul ini dilengkapi dengan mikrokontroler yang didisain khusus untuk mengendalikan LCD. Mikrokontroler HD44780 buatan Hitachi yang berfungsi sebagai pengendali LCD ini mempunyai:
• CGROM (Character Generator Read Only Memory),
• CGRAM (Character Generator Random Access Memory),
• DDRAM (Display Data Random Access Memory).

Gambar 6.1 Modul LCD M1632
LCD ini memiliki 16 kaki, sebagaimana ditunjukkan dalam Tabel 6.1.
Tabel 6.1 Konfigurasi Pin LCD M1632
No | Kaki | Deskripsi |
1 | Vss | 0V (GND) |
2 | Vcc | +5V |
3 | VLC | LCD Contrast Voltage |
4 | RS | Register Select; H: Data Input; L: Instruction Input |
5 | RD | H:Read; L: Write |
6 | EN | Enable Signal |
7 | D0 | Data Bus 0 |
8 | D1 | Data Bus 1 |
9 | D2 | Data Bus 2 |
10 | D3 | Data Bus 3 |
11 | D4 | Data Bus 4 |
12 | D5 | Data Bus 5 |
13 | D6 | Data Bus 6 |
14 | D7 | Data Bus 7 |
15 | V+BL | Positive Backlight Voltage |
16 | V-BL | Negative Backlight Voltage |
· DDRAM
DDRAM adalah merupakan memori tempat karakter yang ditampilkan berada. Contoh, untuk karakter ‘A’ atau 41H yang ditulis pada alamat 00, maka karakter tersebut akan tampil pada baris pertama dan kolom pertama dari LCD. Apabila karakter tersebut ditulis di alamat 40, maka karakter tersebut akan tampil pada baris kedua kolom pertama dari LCD. Posisi ini ditunjukkan dalam Gambar 6.2.

Gambar 6.2 Posisi DDRAM
· CGRAM
CGRAM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana bentuk dari karakter dapat diubah-ubah sesuai keinginan. Namun memori ini akan hilang saat power supply tidak aktif, sehingga pola karakter akan hilang.
· CGROM
CGROM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana pola tersebut sudah ditentukan secara permanen dari HD44780 sehingga pengguna tidak dapat mengubah lagi. Namun karena ROM bersifat permanen, maka pola karakter tersebut tidak akan hilang walaupun power supply tidak aktif. Pada Gambar 6.3, tampak terlihat pola-pola karakter yang tersimpan dalam lokasi-lokasi tertentu dalam CGROM. Pada saat HD44780 akan menampilkan data 41H ke DDRAM, maka HD44780 akan mengambil data di alamat 41H (0100 0001) yang ada pada CGROM yaitu pola karakter A.
Dalam Gambar 6.4 modul LCD dihubungkan ke PORTB mikrokontroler dimana kaki RS, RD, EN terhubung ke PORTB.0-PORTB.2 dan D4, D5, D6, D7 terhubung ke PORTB.4-PORTB.7.

Gambar 6.3 Pola Karakter dalam CGROM

Gambar 6.4 Rangkaian LCD
3. ALAT DAN BAHAN YANG DIGUNAKAN
1. 1 set Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
2. 1 buah catu daya DC +5V
3. 1 buah multimeter
4. 1 buah ISP Downloader AVR
5. 1 buah sistem minimum AVR
6. 1 buah LCD
7. 1 buah kabel printer USB
4. PROSEDUR
1. Rangkailah peralatan yang diperlukan seperti dalam Gambar 6.5. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper pada LCD.

Gambar 6.5 Rangkaian antarmuka mikrokontroler dengan LCD
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian LCD seperti Gambar 6.6. Kemudian simpanlah file tersebut.

Gambar 6.6 Setting LCD
- Perhatikan blok program berikut. Arti dari blok instruksi tersebut adalah setting LCD di PORTB (0x18, alamat PORTB dalam register I/O) kemudian akan menge-link ke library lcd.h yang di dalamnya terdapat instruksi-instruksi untuk akses ke LCD secara langsung.
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
- Blok berikut merupakan bagian inisialisasi LCD pada awal program.
// LCD module initialization
lcd_init(16);
- Tuliskan script berikut dalam program utama:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putchar(0x41); //menampilkan string ‘A’
}
- Tambahkan delay dalam langkah 6:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putchar(0x41); //menampilkan string ‘A’
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putchar(0x30);
delay_ms(1000);
}
- Tuliskan script berikut dalam program utama:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar"); //menampilkan string “Saya belajar”
}
- Ganti script pada langkah 8 menjadi seperti berikut:
while (1)
{
lcd_gotoxy(0,1); //menempatkan kursor di baris 1 kolom 0
lcd_putsf("Antarmuka LCD"); //menampilkan string “Antarmuka LCD”
}
- Gabungkan script pada langkah 8 dan 9 menjadi seperti berikut:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar"); //menampilkan string “Saya belajar”
lcd_gotoxy(0,1); //menempatkan kursor di baris 1 kolom 0
lcd_putsf("Antarmuka LCD"); //menampilkan string “Antarmuka LCD”
}
11. Buatlah tampilan berjalan dari kiri ke kanan.
12. Ubahlah nilai dalam lcd_init(16) menjadi lcd_init(40) dan lihat perbedaannya.
5. DATA HASIL PERCOBAAN
v Tampilan LCD
- Untuk program no.6,
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putchar(0x41); //menampilkan string ‘A’
}
pada LCD muncul:
- Karakter A pada baris 0 kolom 0
Yaitu sebagai berikut :

2. Untuk program no.7
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putchar(0x41); //menampilkan string ‘A’
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putchar(0x30);
delay_ms(1000);
}
pada LCD muncul:
- Karakter A pada baris 0 kolom 0
- Karakter 0 pada baris 1 kolom 0
Yaitu sebagai berikut:

3. Pada program no.8
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar");//menampilkan string “Saya belajar”
}
pada LCD muncul :
- Kalimat Saya belajar pada baris 0 kolom 0
Yaitu sebagai berikut :

4. Pada program no.9
while (1)
{
lcd_gotoxy(0,1); //menempatkan kursor di baris 1 kolom 0
lcd_putsf("Antarmuka LCD");//menampilkan string “Antarmuka LCD”
}
pada LCD muncul :
- Kalimat Antarmuka LCD pada baris 1 kolom 0
Yaitu sebagai berikut :

5. Pada program no.10
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar"); //menampilkan string “Saya belajar”
lcd_gotoxy(0,1); //menempatkan kursor di baris 1 kolom 0
lcd_putsf("Antarmuka LCD");//menampilkan string “Antarmuka LCD”
}
pada LCD muncul :
- Kalimat Saya belajar pada baris 0 kolom 0
- Kalimat Antarmuka LCD pada baris 1 kolom 0
Yaitu sebagai berikut:

v Program langkah no 11.
Untuk membuat tampilan berjalan dari kiri ke kanan, maka programnya adalah sebagai berikut :
lcd_init(16);
while(1)
{
// Place your code here
int a;
for(a=0;a<10;a++)
{
lcd_clear();
lcd_gotoxy(a,0);
lcd_putsf(‘Kelompok 4’);
delay_ms(1000);
}
}
{
Dengan tampilan yang muncul adalah sebagai berikut yaitu kalimat Kelompok 4 berjalan dari kiri ke kanan





v Tampilan langkah 12
Mengubah nilai dalam lcd_init(16) menjadi lcd_init(40) dan melihat perbedaannya.
Berikut ini adalah perbedaan dengan menggunakan nilai dalam lcd_init(16) menjadi lcd_init(40)
Nilai yang digunakan | Tampilan |
lcd_init(16) | Maka tampilan akan berjalan dari kiri ke kanan pada baris 0, kemudian akan melanjutkan ke baris 1. |
lcd_init(40) | Maka tampilan akan berjalan dari kiri ke kanan, tetapi hanya pada baris 0. Tidak melanjutkan ke baris 1, karena dengan menggunakan nilai lcd_init (40) berarti mampu memuat lebih banyak karakter. |
Perbedaan tampilan:
- lcd_init(16);




- lcd_init(40);



6. PEMBAHASAN
a. Pada program no. 6 pada tampilan LCD muncul:
- karakter A pada baris 0 kolom 0
Hal ini dikarenakan pada script program terdapat :
· lcd_gotoxy(0,0); yang berfungsi untuk menempatkan kursor di baris 0 kolom 0.
· Sedangkan karakter A muncul karena adanya script program sebagai berikut : lcd_putchar(0x41); yang berfungsi untuk menampilkan karakter ‘A’ yang dalam script ditulis dalam bentuk bilangan heksadesimal. Sehingga pada tampilan LCD karakter A muncul pada baris 0 kolom 0.
b. Pada program no. 7 pada tampilan LCD muncul:
- Karakter A pada baris 0 kolom 0
- Karakter 0 pada baris 1 kolom 0
Hal ini dikarenakan pada script program terdapat :
· lcd_gotoxy(0,0); yang berfungsi untuk menempatkan kursor di baris 0 kolom 0. Dan lcd_putchar(0x41); berfungsi untuk menampilkan karakter ‘A’ yang dalam script ditulis dalam bentuk bilangan heksadesimal. Oleh karena itu pada tampilan LCD karakter A muncul pada baris 0 kolom 0.
· lcd_gotoxy(0,1); berfungsi untuk menempatkan kursor di baris 1 kolom 0. Dan lcd_putchar(0x30); berfungsi untuk menampilan karakter ‘0’ yang dalam script ditulis dalam bentuk bilangan heksadesimal. Oleh karena itu pada tampilan LCD karakter 0 muncul pada baris 1 kolom 0.
· delay_ms(1000); artinya perintah untuk memberi jeda selama 1000 ms(1 detik). Sehingga ketika program dijalankan, tampilan tiap perubahan memiliki jeda selama 1 detik.
c. Pada program no. 8 pada tampilan LCD muncul :
- Kalimat Saya belajar pada baris 0 kolom 0
Hal ini dikarenakan pada script program terdapat :
· lcd_gotoxy(0,0); yang berfungsi untuk menempatkan kursor di baris 0 kolom 0
· lcd_putsf("Saya belajar"); berfungsi untuk menampilkan string “Saya belajar”. Oleh karena itu pada tampilan LCD muncul kalimat Saya belajar pada baris 0 kolom 0
d. Pada program no. 9 pada tampilan LCD muncul :
- Kalimat Antarmuka LCD pada baris 1 kolom 0
Hal ini dikarenakan pada script program terdapat :
· lcd_gotoxy(0,1); yang berfungsi untuk menempatkan kursor di baris 1 kolom 0
· lcd_putsf("Antarmuka LCD"); berfungsi untuk menampilkan string “Antarmuka LCD”. Oleh karena itu pada tampilan LCD muncul kalimat Antarmuka LCD pada baris 1 kolom 0.
e. Pada program no. 10 pada tampilan LCD muncul :
- Kalimat Saya belajar pada baris 0 kolom 0
- Kalimat Antarmuka LCD pada baris 1 kolom 0
Hal ini dikarenakan pada script program terdapat :
· lcd_gotoxy(0,0); yang berfungsi untuk menempatkan kursor di baris 0 kolom 0.
· lcd_putsf("Saya belajar"); berfungsi untuk menampilkan string “Saya belajar”
· lcd_gotoxy(0,1); berfungsi untuk menempatkan kursor di baris 1 kolom 0
· lcd_putsf("Antarmuka LCD"); berfungsi untuk menampilkan string “Antarmuka LCD”.
f. Pada program no. 11 membuat tampilan berjalan dari kiri ke kanan.
· lcd_init(16); berarti jumlah karakter yang disediakan adalah sebanyak 16 karakter.
· int a; berfungsi untuk mendeklarasikan variable a.
· for (a=0;a<10;a++) artinya inisialisasi variabel perulangan; test variabel perulangan; ubah variabel perulangan
· lcd_clear ( ); berfungsi untuk menghapus karakter dan kursor kembali ke awal (0,0)
· lcd_gotoxy (a,0); yang berfungsi untuk menempatkan kursor di baris 0 kolom a.
· lcd_putsf (‘Kelompok 4’); berfungsi untuk menampilkan string ‘Kelompok 4’.
· delay_ms (1000); artinya perintah untuk memberi jeda selama 1000 ms(1 detik). Sehingga ketika program dijalankan, tampilan tiap perubahan memiliki jeda selama 1 detik.
· Sehingga pada tampilan LCD akan muncul kalimat Kelompok 4 yang berjalan dari kiri ke kanan pada baris 0, kemudian akan melanjutkan pada baris 1. Apabila pada baris 1 tulisan telah selesai berjalan, maka selesai.
g. Pada no.12 mengubah nilai dalam lcd_init(16) menjadi lcd_init(40) dan melihat perbedaannya. Berikut ini perbedaan antara nilai dalam lcd_init(16) menjadi lcd_init(40).
Nilai yang digunakan | Tampilan |
lcd_init(16) | Maka tampilan akan berjalan dari kiri ke kanan pada baris 0, kemudian akan melanjutkan ke baris 1. |
lcd_init(40) | Maka tampilan akan berjalan dari kiri ke kanan, tetapi hanya pada baris 0. Tidak melanjutkan ke baris 1, karena dengan menggunakan nilai lcd_init (40) berarti mampu memuat lebih banyak karakter. |
7. KESIMPULAN
Ø Blok bagian inisialisasi LCD pada awal program adalah sebagai berikut :
// LCD module initialization
lcd_init(16);
Ø Tanpa inisialisasi, LCD tidak dapat mengeluarkan karakter.
Ø Dengan menggunakan nilai dalam lcd_init(16) maka tampilan akan berjalan dari kiri ke kanan pada baris 0, kemudian akan melanjutkan ke baris 1.
Ø Dengan menggunakan nilai dalam lcd_init(40) Maka tampilan akan berjalan dari kiri ke kanan, tetapi hanya pada baris 0. Tidak melanjutkan ke baris 1, karena dengan menggunakan nilai lcd_init (40) berarti mampu memuat lebih banyak karakter.
Ø Memprogram mikrokontroler untuk menampilkan karakter ke penampil LCD adalah dengan menggunakan sintaks-sintaks sebagai berikut :
- Untuk meletakkan kursor digunakan sintaks lcd_gotoxy
Misal : lcd_gotoxy(0,0); yang artinya kursor terletak pada baris 0 dan kolom 0. Angka 0 pada bagian depan menunjukkan letak kolom, sedangkan angka 0 yang dibelakang menunjukkan letak baris.
- Untuk menempatkan 1 karakter, memakai sintaks lcd_putchar, boleh menggunakan heksadesimal
Misal : lcd_putchar(0x41); artinya untuk menampilkan karakter ‘A’
- Untuk menampilkan 1 string, memakai sintaks lcd_putsf
Misal : lcd_putsf(“Antarmuka LCD”); artinya untuk menampilkan string Antarmuka LCD
- Untuk menghapus karakter dan kursor kembali ke awal (0,0), meka digunakan sintaks lcd_clear( );
DAFTAR PUSTAKA
Modul 6.2010. Antarmuka Mikrokontroler Dengan Penampil LCD (Liquid Crystal Display).Malang:Universitas Negeri Malang, Jurusan Teknik Elektro:
1 komentar:
salam Kenal dari saya ....blog nya bagus nih...
untuk code yang ini bisa gak mbak terangin kayak yang diatas masalahx masih baru mengenai mikrokontroller klo bisa alir flowchartnya juga supaya lebih dipahamin....makasih sebelumnya
code
=======
#include
#include
#include
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=7
.equ __scl_bit=6
#endasm
#include
// DS1307 Real Time Clock functions
#include
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include
#include
#define ADC_VREF_TYPE 0x00
char cek_mem=0,set_tanggal=0,mode_set_tanggal=0,pesan[20],start=0,mod=0,setting=0,key[8],lcd_buffer[20],lcd_buffer1[20],lcd_buffer2[20],jam[2],menit[2],detik[2],tanggal[2],bulan[2],tahun[2];
unsigned char jam_edit=0,tanggal_edit=0,mem,menu=0,sensor[95];
float speed;
unsigned int l,c,count,data_sen;
eeprom unsigned int tahun2=2000;
eeprom unsigned int date_mem,lux_mem[24]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
eeprom unsigned char jam1,menit1,detik1,tanggal1,bulan1,tahun1;
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
interrupt [EXT_INT1] void ext_int1_isr(void)
{
c++; if(c==1000){c=0;}
}
// Read the AD conversion result
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{count++;
if(count17000){data_sen=17000;}
sprintf(lcd_buffer,"v=%4u",c);
sprintf(lcd_buffer2,"lux= %3u",read_adc(1));
lcd_gotoxy(0,1);lcd_puts(lcd_buffer);lcd_gotoxy(10,1);lcd_puts(lcd_buffer2);delay_ms(100);
}
}
Regards
Halim
Posting Komentar