Ingin menampilkan data dari mikrokontroler ke LCD ...? anda bingung caranya..? Pada postingan kali ini, saya ajak anda untuk belajar bagaimana menampilkan data dari mikrokontroler ke LCD. Untuk mikrokontroler kita menggunakan Atmega 8535 dan LCD 2x16.
Adapun keterangan kaki LCD 2x16 yaitu sebagai berikut:
Untuk hubungan ke mikrokontroler, dalam hal ini kita menggunakan mikrokontroler Atmega8535, kita bisa menggunakan semua PORT baik PORT A, PORTB, PORTC maupun PORTD. Sekarang kita akan menghubungkan LCD ini ke PORTC dari mikrokontroler, berikut ini gambar koneksi antara mikro ke LCD 2x16
Disini kita menggunakan koneksi data 4 bit antara LCD dan mikro. Setelah selesai, membuat rangkaian diatas selanjutnya code program. kita terlebih dahulu membuat file header-nya. berikut file headernya. simpan dengan nama file lcd.h
/* ================================================================
nama file = lcd.h
pembuat = Bayu Sasongko, teknik elektro 2008
deskripsi = file header LCD 4 bit
file header ini digunakan untuk menampilkan karakter
ke dalam lcd. copykan file lcd.c dan lcd.h ke dalam
folder tempat proyek anda berada. untuk konektor LCD
ke mikrokontroler ikuti aturan berikut ini:
PIN LCD PIN MIKRO
R/W (5) - Ground
VEE (3) - Vcc
RS (4) - 0
EN (6) - 1
D4 (11) - 4
D5 (12) - 5
D6 (13) - 6
D7 (14) - 7
pin R/W hubungkan saja ke ground, karena hanya menggunakan mode
write saja.
================================================================
*/
#define LCD_PORT PORTC // PORT yang digunakan untuk data
#define LCD_DDR DDRC
// bit used (low(D3-D0) or high nibble(D7-D4)
#define HIGH_NIBBLE // uncomment this if low nibble pin used
#define LCD_RS_PORT PORTC // control RS PORT pin
#define LCD_RS_DDR DDRC // control RS DDR pin
#define RS 0 // RS Pin
#define LCD_E_PORT PORTC // control E PORT pin
#define LCD_E_DDR DDRC // control E DDR pin
#define E 1 // E Pin
void lcd_init (void); // inisialisasi LCD
void goto_xy (uint8_t row,uint8_t column); // koordinat tempat karakter
void clrscr (void); // membersihkan display
Setelah itu kita juga perlu membuat file lcd.c, berikut ini codenya:
#include <avr/io.h>
#include <stdio.h>
#include "lcd.h"
// used for printf operation
static int lcd_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(lcd_putchar, NULL,
_FDEV_SETUP_WRITE);
// delay
void delay_us(uint8_t us);
void clock_e (void)
{
LCD_E_PORT |= (1<<E);
delay_us(5);
LCD_E_PORT &= ~(1<<E);
delay_us(3);
}
void write_command(uint8_t command)
{
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(command&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((command&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((command&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(command&0x0f);
clock_e();
#endif
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
}
void lcd_init (void)
{
uint8_t i;
// delay 15 ms for LCD to power up
for(i=0;i<150;i++)
delay_us(100);
// set all data and control port as output
#ifdef HIGH_NIBBLE
LCD_DDR |= 0xf0;
#else
LCD_DDR |= 0x0f;
#endif
LCD_RS_DDR |= (1<<RS);
LCD_E_DDR |= (1<<E);
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);
// 4 bit mode write squence
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|0x30;
#else
LCD_PORT = (LCD_PORT&0xf0)|0x03;
#endif
clock_e();
// 4.1 ms delay
for(i=0;i<41;i++)
delay_us(100);
clock_e();
// 100 delay
delay_us(100);
clock_e();
// 40 us delay
delay_us(40);
// 4 bit mode setting
// 4 bit 2 line 5 X 7 dot matrix
write_command(0x28);
// increment cursor after write byte
write_command(0x06);
// display on cursor off
write_command(0x0C);
clrscr ();
// set function for printf
stdout = &mystdout;
}
void goto_xy(uint8_t row,uint8_t column)
{
if (row == 1)
write_command (0x80 + column - 1);
else
write_command (0xC0 + column - 1);
}
void clrscr (void)
{
write_command(0x01);
}
static int lcd_putchar(char c, FILE *stream)
{
// set RS pin
LCD_RS_PORT |= (1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(c&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((c&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((c&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(c&0x0f);
clock_e();
#endif
// 2 ms delay
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
return 0;
}
void delay_us(uint8_t us)
{
TCNT0 = 257-us;
TCCR0 |= (1<<CS01);
loop_until_bit_is_set(TIFR,TOV0);
TIFR |= (1<<TOV0);
TCCR0 &= ~(1<<CS01);
}
atau silahkan download file lcd.h dan file lcd.c disini . kalau anda ingin merubah PORT nya misalnya mau ke PORTA ganti saja file lcd.h menjadi PORTA. Setelah file lcd.h dan lcd.c sudah jadi maka selanjutnya kita perlu me-load file tadi ke program avr studio
Selanjutnya di program utama kita perlu meng-include kan file header lcd.h kita ladi. kurang lebih begini tampilan program penampil teks ke LCD
sipp mantap
BalasHapusKalau pake bahasa assembly gmn gan,, mislanya untuk menampilkan pesan hello word ,, ,
BalasHapustolong penjelasanya gan ,, klo bisa kirim ke email saya, effand@ymail.com
klo bahasa assembly ane malah gx thu tuh...blum pernah pke assembly
BalasHapusWalau lieeeer...
BalasHapusTapi mantaaaap... Suwun
Setelah itu harus lakukan apalg agar bisa ditampilkan di LCD ny?
BalasHapusPilih Platform Programmerny apa?
Thx
sebelumnya ane ucapin mg tambah sukses ja ych bang..
BalasHapusane mw nanya ne, ane kan punya sensor ultrasonik + sistim minimumny dengan ATMega8535 + 3 buah relay DC dngan output relay berupa AC 220V (intiny cm sebagai saklar).
setelah baca2 blog abang untuk menampilkan data jarak dr sensor ultrasonik ke LCD, ane coba dan ternyata berhasil..
nah, yg mw ane tanyakan ne bang, gimana programnya untuk menghidupkan relay td secara otomatis berdasarkan data dari sensor ultrasonik?
misal, data jarak ultrasonik 1-300. bila data terbaca antara 0-100 maka relay 1 ON. data 101-200 relay 1 dan 2 ON. data 201-300 relay 1 2 dan 3 ON. diatas 300 relay 1 2 dan 3 OFF dan data 0 relay jg OFF.
maaf bang, ane cm lulusan SMA tp ane sneng dngn mikrokontroler.. minta petunjuknya bang..thnks
email ane trapzt69@yahoo.com
ma'nyos.... sukses bwt agan lah
BalasHapushaturnuhunnn pisaannn semoga ilmuu masss makinn bertammbahhh makinn sukkksess amiiinnn
BalasHapusiya mas makasih....aminn
Hapusko aneh keterangan kaki pin satu di lcd GND (-)sedangkan di gambar keterangan koneksi dengan mikro pin LCD pin satu (+) bisa di jelaskan mas? mohon pencerahannya ...sebelumnya makasih mas
BalasHapusmas kalo misalnya mau buat simulasi menggunakan AVR ATMega8 dimana ada 3 push button. jika di tekan push button 1 hidup lampu 1 dan di LCD tampil tulisan PB1. jika di tekan push button 2 hidup lampu 2 dan di LCD tampil tulisan PB2. begitu juga dengan push button 3.
BalasHapusgmn ya simulasi sama programnya??? bisa di buatin gk. kalo bisa tlg krm ke email aq: riska.simaremare@gmail.com
thx before...
nggak bisa di download mas...?
BalasHapusvoid gotoxy (0,0); . declaration syntax error mas. cara ngatasinnya bagaimana...?
BalasHapusMas ada program/sket..untuk. buat runing text dak...untuk buat d arduino..klo ada saya.minta tlng kirimkn ke email .......debyearies@gmail.com
BalasHapusGan kalau ada proyekan ane ngikut ya... :D Kunjungi saya di Jual Arduino
BalasHapus