Liquid Crystal Display (LCD) merupakan salah satu media tampilan yang sering dijumpai dalam kehidupan sehari-hari khususnya pada peralatan elektronika seperti telepon seluler, kalkulator, jam dan lain sebagainya. Berdasarkan tampilannya LCD dibedakan menjadi 2 macam, yaitu karakter dan grafik. Aplikasi kali ini akan memberikan sebuah contoh penggunaan Graphic LCD 128x64 yang akan menampilkan karakter dan gambar (grafik). Sebelumnya mari kita bahas atau berkenalan dulu dengan Graphic LCD 128x64 ini, kata pepatah mengatakan tak kenal maka tak sayang.. :)
Graphic LCD 128x64
Secara fisik lcd ini mempunyai dimensi yang cukup lebar dibanding dengan yang biasa kita pakai (2x16).
Seperti halnya namanya LCD ini mempunyai titik X sebanyak 128 (0-127) dan titik Y sebanyak 64 (0-63). Untuk lebih jelasnya lihat gambar berikut:
Disamping dapat menampilkan grafik LCD ini juga dapat menampilkan text seperti halnya LCD karakter. Untuk memudahkan dalam pemrograman titik Y dibagi menjadi 8 yaitu Y0-Y7, Y8-Y15 dan seterusnya yang masing-masing memiliki lebar 8. Jadi jika ingin menampilkan text LCD ini mampu menampilkan text sebanyak 8 baris dan panjangnya maksimal adalah 16 karakter, karena masing-masing karakter lebarnya adalah 8 jadi 8x16=128. Tetapi bisa saja dengan membuat font lebih besar misal font Arial Black dengan ukuran 14. Seperti pada gambar berikut:
Tampilan LCD menampilkan text setandar yaitu ukuran font 12 Arial Black.
Tampilan LCD untuk menampilkan font yang lebih besar.
Dalam software Proteus jenis LCD ini dapat kita temukan pada library Optoelectronics-Graphic LCDs, disana banyak pilihan model tetapi yang akan digunakan disini adalah yang menggunakan driver KS0108 controllers. Lebih jelasnya lihat gambar sekematik berikut:
Untuk programnya menggunakan CodeVisionAVR adalah:
#include
#include
#include
#include "graph.h"
#include "GLCD.h"
#include "font.h"
#include "string.h"
#include "stdlib.h"
#define menu PINB.1
#define up PINB.2
#define down PINB.3
#define enter PINB.4
#define LED1 PORTD.5
#define LED2 PORTD.6
#define LED3 PORTD.7
typedef unsigned char byte;
#define E_DELAY 3
#define DATAPORT PORTC
#define DATADDR DDRC
#define DATAPIN PINC
#define CS1 PORTD.0
#define CS2 PORTD.1
#define RS PORTD.2
#define RW PORTD.3
#define EN PORTD.4
void tampil(void);
void set_suhu(void);
unsigned char str0[] = "SUHU";
unsigned char str1[] = "SET-1";
unsigned char str2[] = "SET-2";
unsigned char str3[] = "SET-3";
float suhu,suhu_cel;
float suhu_set1=50, suhu_set2=90, suhu_set3=110;
unsigned char temp[];
int indeks=0;
#define ADC_VREF_TYPE 0x00
// Read the AD conversion result
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;
}
void set_suhu()
{
if (menu==0 && indeks==0)
{
delay_ms(300);
glcd_off();
indeks=1;
while (menu==1 && indeks==1)
{
delay_ms(100);
glcd_on();
glcd_clear();
glcd_puts(str1,76,0,0,1,0);
ftoa(suhu_set1,0,temp);
glcd_puts(temp,76,1,0,1,0);
//-tombol up
if (up==0)
{
delay_ms(200);
suhu_set1+=10;
if (suhu_set1>=1000)
{
suhu_set1=1000;
}
}
//-tombol down
if (down==0)
{
delay_ms(200);
suhu_set1-=10;
if (suhu_set1<=100)
{
suhu_set1=100;
}
}
//-tbl enter
if (enter==0 && indeks==1)
{
delay_ms(200);
indeks=2;
glcd_clear();
}
if (menu==0 && indeks==1)
{
delay_ms(200);
indeks=2;
glcd_clear();
}
}
}
if (menu==0 && indeks==2)
{
delay_ms(300);
indeks=3;
while (menu==1 && indeks==3)
{
delay_ms(100);
glcd_clear();
glcd_puts(str2,76,3,0,1,0);
ftoa(suhu_set2,0,temp);
glcd_puts(temp,76,4,0,1,0);
//-tombol up
if (up==0)
{
delay_ms(200);
suhu_set2+=10;
if (suhu_set2>=2000)
{
suhu_set2=1500;
}
}
//-tombol down
if (down==0)
{
delay_ms(200);
suhu_set2-=10;
if (suhu_set2<=1000)
{
suhu_set2=1000;
}
}
//-tbl enter
if (enter==0 && indeks==3)
{
delay_ms(200);
indeks=4;
glcd_clear();
}
if (menu==0 && indeks==3)
{
delay_ms(200);
indeks=4;
glcd_clear();
}
}
}
if (menu==0 && indeks==4)
{
delay_ms(300);
indeks=5;
while (menu==1 && indeks==5)
{
delay_ms(100);
glcd_clear();
glcd_puts(str3,76,6,0,1,0);
ftoa(suhu_set3,0,temp);
glcd_puts(temp,76,7,0,1,0);
//-tombol up
if (up==0)
{
delay_ms(200);
suhu_set3+=10;
if (suhu_set3>=2500)
{
suhu_set3=1500;
}
}
//-tombol down
if (down==0)
{
delay_ms(200);
suhu_set3-=10;
if (suhu_set3<=3000)
{
suhu_set3=2000;
}
}
//-tbl enter
if (enter==0 && indeks==5)
{
delay_ms(200);
indeks=0;
glcd_clear();
}
if (menu==0 && indeks==5)
{
delay_ms(200);
glcd_clear();
indeks=0;
}
}
}
}
//-tampilan GLCD
void tampil()
{
glcd_puts(str0,5,1,0,2,0);
//-kotak
rectangle(0,0,75,63,0,1);
rectangle(1,1,74,62,0,1);
//garis
h_line(2,27,72,0,1);
//set
glcd_puts(str1,79,0,0,1,0);
ftoa(suhu_set1,0,temp);
glcd_puts(temp,79,1,0,1,0);
glcd_puts(str2,79,3,0,1,0);
ftoa(suhu_set2,0,temp);
glcd_puts(temp,79,4,0,1,0);
glcd_puts(str3,79,6,0,1,0);
ftoa(suhu_set3,0,temp);
glcd_puts(temp,79,7,0,1,0);
}
void main(void)
{
#pragma used+
int i,j;
byte read_data;
byte read_arr[30];
#pragma used-
PORTB = 0xFF;
DDRB = 0x00;
DATADDR = 0xFF;
DDRD = 0xFF;
PORTD = 0xE7;
DDRC = 0x0F;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
glcd_on();
glcd_clear();
delay_ms(500);
while(1)
{
tampil();
set_suhu();
suhu = read_adc(0);
suhu_cel = (float)suhu*500/1023;
ftoa(suhu_cel,0,temp);
glcd_puts(temp,2,20,0,2,0);
if (suhu>=50)
{ LED1=0; }
if (suhu>=90)
{ LED2=0; }
if (suhu>=110)
{ LED3=0; }
}
}
20 Comments
buatnya pakai cvavr vesi apa om?
ReplyDeleteCVAVR 2.50
ReplyDeletePak minta Library
ReplyDelete#include "graph.h"
#include "GLCD.h"
#include "font.h"
Pak minta Library nya
ReplyDelete#include "graph.h"
#include "GLCD.h"
#include "font.h"
Library dapat di download di menu download mas norman, silahkan di sedot..
Deletemaaf baru sembat balas, thanks...
om, kalau mau menampilkan grafik gelombang sinus bagaimana contoh programnya??
ReplyDeleteom, kalau mau menampilkan grafik sinyal, yg aq edit dr tutorial yg om berikan yg mana ?? ini pake atmega brp ?
ReplyDeleterutin tampilnya mas, disesuaikan dengan yang di library, sepertinya ada untuk gelombang sinus di library, thks.
Deletemas ada nga yg pake atmega8535?
ReplyDeletekira2 apanya yang beda? cara pengaturan wizardnya di codevision bgaimna?
mohon arahannya mas baru belajar tahap awal
sama saja mas untuk mikro mega8553 tinggal ganti saja includenya dengan mega8535.h
Deleteterus pada file project CVAVR pada menu configure the project-c compiler-code generation-chip ganti dengan mega8535
mas mikonnya bisa pake ATMega 328 ngga?
ReplyDeleteBisa saja, ganti include dan port menyedusikan...
Deletekalo pake arduino IDE codingannya sama ngga mas?
ReplyDeleteKalau menggunakan arduino agak sedikit berbeda, yang membedakan program diantaranya compiler. Antara compiler/editor program dgn yg lain bisa berbeda.
Deletemas bisa kasikan contoh program basic bascom pake atmega8535?
ReplyDeletemohon dibatu mas :(
Kapan-kapan mas klo ada waktu, hehe....
Deleteudah setahun.. eh dua tahun lebih.. aku baru nemu ini.. contoh coding yang avr studio 4 ada ga gan?
ReplyDeleteAda program bascomnya gan.,,kalau boleh kirim iya..... manafa784@gmail.com
ReplyDeletemas kalau boleh saya minta library graphic nya mas
ReplyDeletemas mau tanya rectangle(0,0,75,63,0,1); kalau yang di dalam kurung itu bisa dijelaskan tidak? terima kasih. semoga sukses terus
ReplyDeleteSilahkan Tinggalkan Komentar Anda