Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Selamat datang, Pengunjung. Silahkan masuk atau mendaftar. Apakah anda lupa aktivasi email?

Oktober 16, 2021, 06:55:03 PM

Masuk dengan nama pengguna, kata sandi dan lama sesi

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139668
  • Total Topik: 10408
  • Online Today: 149
  • Online Ever: 441
  • (Desember 18, 2011, 12:48:51 AM)
Pengguna Online
Users: 0
Guests: 98
Total: 98

Ikuti ForSa

ForSa on FB ForSa on Twitter

Penulis Topik: bahasa C buat LCD 2x16  (Dibaca 40257 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
bahasa C buat LCD 2x16
« pada: April 27, 2009, 01:45:38 PM »
1. ada yang punya contoh program pake bahasa C untuk LCD 2X16..
2. ic-nya pake at89c52 bisa ga?
3. ditunggu jwb dari yang bisa bantu. terima kasih

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #1 pada: Mei 09, 2009, 07:27:29 PM »
TOLONG DONG... dua minggu lagi, pengujian sistem, ada yg punya program LCD  pake bahasa C ga?? + rangkaian nya + penjelasannya....

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #2 pada: Mei 10, 2009, 08:17:46 AM »
ada sih.. bekas ngerjain tugas kuliah dulu
tapi apa ga lebih baik kalau studi dulu, baru kalo ada masalah didiskusikan masalahnya

mungkin step-step nya:
pin-pin yg diperlukan <==> rangkaian
gimana caranya komunikasi sama lcd <==> instruksi lcd
baru ke implementasi programnya

saya juga agak lupa
« Edit Terakhir: Mei 10, 2009, 08:22:16 AM oleh ksatriabajuhitam »
not all the problems could be solved by the sword, but sword holder take control of problems.
ForSa versi mobile: http://www.forumsains.com/forum?wap2

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #3 pada: Mei 12, 2009, 01:57:40 PM »
ada sih.. bekas ngerjain tugas kuliah dulu
tapi apa ga lebih baik kalau studi dulu, baru kalo ada masalah didiskusikan masalahnya

mungkin step-step nya:
pin-pin yg diperlukan <==> rangkaian
gimana caranya komunikasi sama lcd <==> instruksi lcd
baru ke implementasi programnya

saya juga agak lupa
kmaren da nyoba2 tp gagal terus + gosong,, yg terakhir nyoba lcd cm nyala tp gada tulisannya...
mungkin biar tambah PD kalo lcd ada tampilannya, tp cm ngblank doang + ada progrmnya heheh.    ??? saya pake 4 bit buat datanya,( rs, rw, e) apa hrs ke port yg beda ya? soalnya 4 bitnya sy taro di p2.3 - p2.6 AT89S51

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #4 pada: Mei 17, 2009, 07:34:24 AM »
Wah.. ternyata ada juga pertanyaannya di sini yah?

Yawdah, berarti pembahasan tentang uC dan LCD kita bahas mendalam di sini ajah ya.

Sebelumnya, saya salin dulu yang pernah saya bahas di topik yang lain



Konfigurasi pin LCD dan uC nya bisa macem-macem. Saya ambil kayak gini, sbg contoh :

  [pin LCD] <-->  [pin uC]
   1 (Gnd) <--> 11 (Gnd)
   2 (+5V) <--> 10 (Vcc)
   4 (RS) <--> 22 (PC0)
   5 (RD) <--> 23 (PC1)
   6 (EN) <--> 24 (PC2)
  11 (D4) <--> 26 (PC4)
  12 (D5) <--> 27 (PC5)
  13 (D6) <--> 28 (PC6)
  14 (D7) <--> 29 (PC7)

Kalo pake program Code Vision gampang. Coz sudah ada unit dan fungsi tersendiri yang bisa langsung dipake. Namanya lcd.h

Contoh programnya :

#include
#asm
   .equ __lcd_port=0x15
#endasm

#include


void main(void)
{
       // inisialisasi LCD
       lcd_init(16);

        // menampilkan pada baris 0 dari kolom 0
        lcd_gotoxy(0,0);   
        lcd_puts("Forum");   

        // menampilkan pada baris 1 dari kolom 0
        lcd_gotoxy(0,1);     
        lcd_puts("Sains");

       // agar nampak dan terus ditampilkan
       while(1);
}

Secara teori sih begitu. Saya lupa lagi. Soalnya jarang pake LCD, biasanya langsung dikomunikasikan ke PC.
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #5 pada: Mei 17, 2009, 10:00:11 AM »
udah mulai ngebahas detail yah...
ayo lah,

yu mulai dari rangkaiannya...

1. Rangkaian
pin-pin yang diperlukan ialah:
RS --> gunanya untuk membedakan antara data (pin high) untuk ditampilkan atau untuk instruksi/register (pin low)
RW --> gunanya untuk mode baca (pin high) atau tulis (pin low), kita akan gunakan mode tulis saja (tidak membaca balik apa yg ditampilkan LCD), jadi pin ini di-pull-up resistor aja
E --> enable, untuk memberitahu LCD bahwa data sudah siap untuk dibaca (kasih falling edge signal dgn low state selama minimal 1000 ns)
DATA --> bisa mode 4-bit atau mode 8-bit

nah, jadi maksimal kita bisa menggunakan RS+RW+E+DATA = 11 pin microcontroller, minimal menggunakan RS+E+DATA(4-bit) = 6 pin microcontroller

kita akan gunakan yang minimal saja, maklum lah biasanya untuk aplikasi diusahakan menghemat pin (buat keypad, ADC, serial link, tombol, d.l.l.)

2. Perintah Dasar
untuk lengkapnya perintah apa aja yang tersedia, bisa merujuk ke datasheet LCD nya,
kita ambil contoh LCD dengan driver HD4478U dengan display 2x16 aja yg umum

kita gunakan perintah:
a. kirim data untuk ditampilkan
b. pindahkan kursor ke kanan/kiri
c. pindahkan kursor ke posisi (x,y)

yang lainnya ada bikin blinking, bikin tulisan berjalan; kita bahas ketiga/empat perintah di atas aja, soalnya itu yang pernah saya cobain

a. kirim data untuk ditampilkan
mode = 4-bit data
untuk menulis data: set RS high, lalu kirim 4-bit high data (high nibble), beri sinyal Enable, kirim 4-bit low data (low nibble), beri sinyal Enable
untuk "keamanan", kita matikan saja semua interupsi ketika menulis data,
kalo mau sih boleh aja diaktifkan

b. pindahkan kursor ke kanan/kiri
data perintahnya 0 - 0 - 0 - 1 - 0 - S/C - R/L - X - X
S/C = 0 untuk cursor move, 1 untuk display shift; jadi kita pake 0
R/L = 0 untuk ke kiri, 1 untuk ke kanan
jadi kita gunakan perintah 0x10 untuk pindahkan kursor ke kiri dan 0x14 untuk pindahkan kursor ke kanan

c. pindahkan kursor ke posisi (x,y)
untuk pindah ke posisi bebas, tiap cell karakter LCD diberi alamat, untuk 2x16 ialah sebagai berikut
{0x00,0x01,0x02,0x3,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F},
{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F}

kirim data ini dengan RS=0 (menandakan perintah) untuk memindahkan kursor

ada satu lagi, yakni menginisialisasi LCD,
sebelum LCD siap digunakan, pelru diinisialisasi dulu
untuk contoh ini, dari datasheet bahwa harus dikirim urutan data berikut untuk menginisialisasi LCD
0x33, 0x32, 0x28, 0x0C, 0x06, 0x01
penjelsannya ada di datasheet

3. Implementasi
nah mulai deh coding nya
jadi fungsi-fungsi diperlukan ialah:

fungsi dasar:
LCD_command(command) untuk mengirim data sebagai perintah
LCD_putc(ascii) untuk mengirim 1 byte data untuk ditampilkan

fungsi untuk sinyal:
LCD_enable() memberi sinyal Enable
LCD_delay(ms) memberi delay

fungsi-fungsi turunan:
LCD_puts(lcd_string) memanggil LCD_putc berulang2 untuk menampilkan string
LCD_init() untuk menginisialisasi LCD
LCD_cur_right() memindahkan kursor ke kanan
LCD_cur_left() memindahkan kursor ke kiri
gotoxy(x, y) memindahkan kursor ke posisi x,y

wah, segitu dulu, ada yg ngajak makan :P,
nanti dilanjut di postingan selanjutnya untuk implementasi tiap fungsi nya

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #6 pada: Mei 17, 2009, 11:25:54 AM »

Kalo pake program Code Vision gampang. Coz sudah ada unit dan fungsi tersendiri yang bisa langsung dipake. Namanya lcd.h

Contoh programnya :

#include
#asm
   .equ __lcd_port=0x15
#endasm

#include


void main(void)
{
       // inisialisasi LCD
       lcd_init(16);

        // menampilkan pada baris 0 dari kolom 0
        lcd_gotoxy(0,0);   
        lcd_puts("Forum");   

        // menampilkan pada baris 1 dari kolom 0
        lcd_gotoxy(0,1);     
        lcd_puts("Sains");

       // agar nampak dan terus ditampilkan
       while(1);
}

Secara teori sih begitu. Saya lupa lagi. Soalnya jarang pake LCD, biasanya langsung dikomunikasikan ke PC.
[/quote]

mas insan, apa ini progrm uda lgsng nyala blm ya ke LCD? mksdnya uda tgl didownload ke IC,,,trimakasih

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #7 pada: Mei 17, 2009, 11:35:39 AM »
bisa dicoba. Dengan catatan, pemasangan pinnya cocok dgn keterangan sebelumnya

Konfigurasi pin LCD dan uC nya bisa macem-macem. Saya ambil kayak gini, sbg contoh :

  [pin LCD] <-->  [pin uC]
   1 (Gnd) <--> 11 (Gnd)
   2 (+5V) <--> 10 (Vcc)
   4 (RS) <--> 22 (PC0)
   5 (RD) <--> 23 (PC1)
   6 (EN) <--> 24 (PC2)
  11 (D4) <--> 26 (PC4)
  12 (D5) <--> 27 (PC5)
  13 (D6) <--> 28 (PC6)
  14 (D7) <--> 29 (PC7)

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #8 pada: Mei 17, 2009, 11:43:20 AM »
bisa dicoba. Dengan catatan, pemasangan pinnya cocok dgn keterangan sebelumnya

ok, terimaksih dgn balasan yg begitu cepat, oya sy pake AT89s51,mudah2an bisa ya,,,  ;D

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #9 pada: Mei 17, 2009, 12:04:00 PM »
bukannya CodeVision cuma untuk microcontroller jenis AVR ya,
???

ga tau kalo ada untuk keuarga MCS-51, (belum pernah pake CodeVision sih; padahal untuk personal user jadi free ya)

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #10 pada: Mei 17, 2009, 10:25:07 PM »
...
wah, segitu dulu, ada yg ngajak makan :P,
nanti dilanjut di postingan selanjutnya untuk implementasi tiap fungsi nya

lanjut dah...

setelah mendisain fungsi-fungsi yang diperlukan, maka tinggal diimplementasikan,


Kode: [Pilih]
#define LCD_DATA P2 // kita gunakan Port 2 sebagai data, sebetulnya cuma P2[0:3]
#define LCD_en P2_5 // enable LCD display
#define LCD_rs P2_4 // register select
#define LCD_DELAY 461 // bisa disesuaikan dengan frekuensi kristal yg digunakan

/* prototype fungsi dasar */
void LCD_delay(unsigned char ms);
void LCD_enable();
void LCD_command(unsigned char command);
void LCD_putc(unsigned char ascii);

/* fungsi turunan */
void LCD_puts(unsigned char *lcd_string);
void LCD_init();

/* implementasi fungsi dasar */
void LCD_delay(unsigned char ms)
{
unsigned char n;
unsigned int i;
for(n=0;n<ms;n++)
for(i=0;i<LCD_DELAY;i++);
}

void LCD_enable()
{
LCD_en = 0; // memberi sinyal falling edge
LCD_delay(1);
LCD_en = 1;
}

void LCD_command(unsigned char command)
{
LCD_rs = 0; // menandakan perintah
LCD_DATA = (LCD_DATA&0xF0)|((command>>4)&0x0F); // ambil high nibble, kirim
LCD_enable(); // beritahu driver LCD bahwa data telah siap
LCD_DATA = (LCD_DATA&0xF0)|(command&0x0F); // ambil low nibble, kirim
LCD_enable();
LCD_delay(1);
}

void LCD_putc(unsigned char ascii)
{
EA = 0; // (optional) matikan semua interrupt
LCD_rs = 1; // menandakan data untuk ditampilkan
LCD_DATA = (LCD_DATA&0xF0)|((ascii>>4)&0x0F);
LCD_enable();
LCD_DATA = (LCD_DATA&0xF0)|(ascii&0x0F);
LCD_enable();
EA = 1;
LCD_delay(1);
}

/* implementasi fungsi turunan */
void LCD_puts(unsigned char *lcd_string)
{
while(*lcd_string) /* scanning array data hingga null pointer (string habis) */
LCD_putc(*lcd_string++);
}

void LCD_init()
{
LCD_en = 1;
LCD_rs = 0;
LCD_command(0x33);
LCD_command(0x32);
LCD_command(0x28);
LCD_command(0x0C);
LCD_command(0x06);
LCD_command(0x01);
LCD_delay(256);
}



udah deh, save dengan nama antarmuka_lcd.h misalnya;
setelah punya fungsi-fungsi dasar tersebut, kita bisa bermain-main dengan instruksi LCD yang lain,
misalnya tambahkan instruksi baru berikut: (lihat data sheet untuk tabel instruksi yang tersedia)
untuk membersihkan layar --> perintah 0x01
untuk pindah ke baris-1 --> perintah 0x80
untuk pindah ke baris-2 --> perintah 0xC0
maka bisa ditambahkan deklarasi berikut:
Kode: [Pilih]
...
#define LCD_clear() LCD_command(0x01)
#define LCD_row1() LCD_command(0x80)
#define LCD_row2() LCD_command(0xC0)
...


udah deh bisa dipake...
contoh:
Kode: [Pilih]
void main()
{
LCD_init();
init_int();
init_baud();

baca_status_eeprom();

P1 = 0x00;

kembali_ke_main:
main_display(); // mode_main = mode_cari (1), mode_entry (2)

while(1)
{
LCD_clear();
// tambahin apa aja lah...
                // sesuai keperluan...
        }
}

saya pake compiler SDCC
 :kribo:


Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #11 pada: Mei 20, 2009, 05:11:41 AM »
waduh mana yg bener ne,, coba aja smuanyalah,,, sukur2 bisa, tp yg ptama ga bisa,, mudah2an yg kdua bisa,, saya punyanya microC,

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #12 pada: Mei 20, 2009, 05:29:13 AM »
oya sy pake AT89s51,mudah2an bisa ya,,,  ;D

Program yang saya lampirkan khusus untuk uC keluarga AVR dan dibuat pada Code Vision.
Seperti yang ksatriabajuhitam bilang

bukannya CodeVision cuma untuk microcontroller jenis AVR ya,
???

Kalo membuat dengan software lain, berarti memang harus membuat dulu fungsi-fungsi untuk LCDnya itu sendiri. Sebagaimana yang dijelaskan sama ksatriabajuhitam. Ok, selamat mencoba. ^_^

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #13 pada: Mei 20, 2009, 07:50:45 AM »
uda nyoba, tp ga bisa.. kalo buat nampilin huruf , gmn programnya ya mas,,, saya pake compiler mikroC..

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #14 pada: Mei 26, 2009, 05:43:52 AM »
1. ada yang punya contoh program pake bahasa C untuk LCD 2X16..
2. ic-nya pake at89c52 bisa ga?
3. ditunggu jwb dari yang bisa bantu. terima kasih
mas ksatriabajuhitam,,, LCDnya ga mau tampilin huruf kenapa ya... tolong dong, 4 hari lagi ni uji sistem...

 

Related Topics

  Subyek / Dimulai oleh Jawaban Tulisan terakhir
5 Jawaban
10741 Dilihat
Tulisan terakhir Mei 31, 2013, 06:42:01 AM
oleh buburkacang89
3 Jawaban
7835 Dilihat
Tulisan terakhir Februari 19, 2011, 02:01:55 PM
oleh herlambang
5 Jawaban
6454 Dilihat
Tulisan terakhir Desember 08, 2010, 08:39:13 AM
oleh fahmicp3
10 Jawaban
7668 Dilihat
Tulisan terakhir November 25, 2011, 09:12:45 AM
oleh chebyshev
3 Jawaban
7469 Dilihat
Tulisan terakhir Juli 17, 2010, 04:34:44 AM
oleh herlambang