Elektronik / Mikrodenetleyici Projeleri/

AT89C51RD2 GLCD Grafik LCD ile Animasyon

Sponsorlu Bağlantılar

Hazırlayan: Avni ÇiFTÇiLER
Animasyon: Devreye gerilim uygulandığı anda ekrana ilk Türkiye haritası gelmektedir. Daha sonra Türk Bayrağı ve bir sonraki adımda ise Mustafa Kemal Atatürk’ün resmi gelmektedir. Resimler geldikten sonra dünya dönmeye başlayacaktır.

Devrede kullanılan Elemanlar
1 Adet KS0107 chip’li Grafik Lcd
1 Adet AT89C51RD2 (PLCC Kılıf)
1 Adet 12 Mhz Kristal
2 Adet 22pF Kondansatör
1 Adet 10uF/25v Kondansatör
1 Adet 8.2K Direnç

Devre Şeması

Devrenin çalışması: Grafik lcd’lerin en önemli özelliği nokta tabanlı olarak çalışmasıdır. Yani metin lcd’lerde olduğu gibi hem yazı yazdırılabilir hem de şekil çizdirilebiliriz. Devrede P2 portu data çıkışı olarak ayarlanmıştır.P1_0 grafik lcd’nin CS1 ucuna, P1_1 portu ise grafik lcd’nin CS2 ucuna bağlanmıştır. Grafik Lcd yapı olarak sağ ve sol olmak üzere 2 kısma ayrılmıştır.

CS1=0,CS2=1 durumunda GLCD’nin sol kısmı, tam tersi durumda ise sağ tarafı aktif olmaktadır. Bu kısımların her biri 64 sütun ve 8 sayfadan oluşmaktadır. GLCD’ye ilgili DI, R/W,E uçları uygulanarak glcd’ye data gönderimi hazır hale getirilmelidir. Devrede Atmel serisinden AT89c51RD2 mikrokontrolcüsü kullanılmıştır. 64K program hafızasına sahiptir. P2 potundan glcd’ye gönderilen veriler, P1 portundaki kontol bitleri ile glcd’ye veri yazdılmaktadır. Devrenin c kaynak kodu aşağıdaki gibidir. C kaynak kodu yazılırken Tablo.h ve Glcd.h dosyaları mutlaka programa eklenmelidir.

Glcd.h dosyası ile glcd’nin çalışması için önemlidir.Glcd’nin pinleri tanımlanıp lcd’yi açma, kapama ayarları girilmiştir. Tablo.h dosyasında ise 128×64 ebatındaki *.bmp uzantılı resimler GLCDtools programında hex’e çevrilip buraya yerleştirilmiştir.

Animasyon Projesinin Kaynak kod, pcb, similasyon dosyaları AT89C51RD2 GLCD Grafik LCD ile Animasyon

Dosya indirme LINK listesi (TXT formatında) link-1359.zip şifre-pass: 320volt.com

/**************************************************************************/
/* Uygulama Adı : Grafik LCD Animasyon	 			      				  */
/* Dosya Adı	: Grafik_LCD					      					  */
/* Tarih	    : 03-04-2007					                          */
/* Hedef İşlemci: AT89c51rd2						      					  */
/* Avni Çiftçiler Elektronik-3 040303015					                   		      						  */
/* Grafik Lcd'de önce Tablo.h dosyasındaki harfler yazmakta ve daha sonra           */
/*resim fonksiyonları tek tek cagirilmakta.			     														  */
/**************************************************************************/
#include   // islemci baslik dosyasi
#include 	   // C dili baslik dosyasi
#include "Tablo.h"     // Resimlerimizin  bulundugu dosya
#include  "G_LCD.h"    // Grafik LCD baslik dosyasi

/*  Türkiye haritasını ekrana basan fonksiyon */
/* resimlerin tanımlandığı Tablo.h dosyasından sirasiyla 8 bitlik degerler göstergeye gonderilir. Her resim basımından sonra resim gelen tablo degerlerinin '~' islemi ile terslenmesi sonucu ters renkte basılır. */
Turkiye(){
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (15000);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableTurkiye[j++]);

}
}
Gecikme (15000);
}
}
/*Bayragimizi ekrana basan fonksiyon*/
Bayrak(){
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (15000);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableBayrak[j++]);

}
}
Gecikme (15000);
}
}
//Ulu önder Atatürk'ün resmini ekrana basan fonksiyon
Ataturk(){
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (15000);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableAtaturk[j++]);

}
}
Gecikme (15000);
}
}
//Dünya resimlerini basan fonksiyonlar
DispDUNYA1()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA1[j++]);

}
}
Gecikme (500);
}
}

DispDUNYA2()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA2[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA3()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA3[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA4()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA4[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA5()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA5[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA6()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA6[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA7()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA7[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA8()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA8[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA9()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA9[j++]);

}
}
Gecikme (500);
}
}
DispDUNYA10()
{
int x,y,i,j;
for(i=0;	i<2;	i++)
{
j=0;
Gecikme (500);
for(y=0;	y<8;	y++)		// 8 sayfa içerisindeki döngü
{
for(x=0; x<=127; x++)		// sütunlar arasında döngü
{
if(i==0)
GLCD_int_8Bit (x, y, TableDUNYA10[j++]);

}
}
Gecikme (500);
}
}

main()
{
int  x=0,y=0,Data_X=0,i=0,j=0;
bit  renk=0;

char	TEXT0[]="*********************";

char	karakter[]=" ";

while(1)
{
GLCD_Ekran(0); //dolgu var
x=0;
y=0;

sprintf(TEXT0,"#####################");
GLCD_Harf(1,0, TEXT0, 100,  1);
sprintf(TEXT0, "       AVNI          ");
GLCD_Harf(1,1, TEXT0, 100,  1);
sprintf(TEXT0, "     CIFTCILER       ");
GLCD_Harf(1,2, TEXT0, 100,  1);
sprintf(TEXT0, " KOCAELI UNIVERSITESI");
GLCD_Harf(1,3, TEXT0, 100,  1);
sprintf(TEXT0, "    TEKNIK EGITIM    ");
GLCD_Harf(1,4, TEXT0, 100,  1);
sprintf(TEXT0, "      FAKULTESI      ");
GLCD_Harf(1,5, TEXT0, 100,  1);
sprintf(TEXT0, "     ELEKTRONIK-3    ");
GLCD_Harf(1,6, TEXT0, 100,  1);
sprintf(TEXT0, "      040303015      ");
GLCD_Harf(1,7, TEXT0, 100,  1);

Gecikme(10000);
Turkiye();
Bayrak();
Ataturk();
DispDUNYA1();
DispDUNYA2();
DispDUNYA3();
DispDUNYA4();
DispDUNYA5();
DispDUNYA6();
DispDUNYA7();
DispDUNYA8();
DispDUNYA9();
DispDUNYA10();

}
}

  • NURİ

    Hocam eline sağlık proton basic İle aynı şeyler yapılamazmı?
    oluyorsa örnek varmı?

  • Emrah

    burada yazılı olan kodları hangi programla asm veya hex kodlarına çevirebiliyoruz acaba. teşekkürler.

  • admin

    proje dosyalarnda keil klasöründe hex kodu var

  • Emrah

    Benim asıl amacım, bunu p16F877 için tekrar yazmak istiyorum. c ile yazıp bir türlü çeviremedim asm’ye.

  • Özen Özkaya

    abi bu bitmap converter olayını bi yapamadım bendeki demo heralde =( bi yardımcı olur musun???

  • admin

    burada grafik lcd ve program kullanımı hakkında bir makale var faydası olacaktır M.Alper USLU çok güzel anlatmış

  • cemil

    bitmap konverter programının demo versiyonu tam sürüm lazım bir şey yapılamazmı acaba
    yada başka program önerseniz

  • sezgın

    Program içinde yazılmış olan bayragımız kelımesının bayrak degılde bayragımız oldugu için programı yazan arkadasa mınnettarım

  • ahmet

    arkadas ellerine sağlık şu toblo.h dosyası olayını anlamadım acıklarmısın
    o dosyayı kendinmizmi yazıyoruz yoksa bıtmap cevırıcı ıle ılgılı dosyamı yardımcı olursan cok sevınırım…

  • Haluk

    benim merak ettiğim – vout a bağlı olan pot’un diğer ucu şaseye değil de 5v’a Bağlanması gerekmiyormu ?

  • aydın

    acaba bu kodun proton da yazılışı nasıl olur?