Elektronik / Mikrodenetleyici Projeleri/

8051 ile Lcd Göstergeli Kronometre Devresi

Sponsorlu Bağlantılar

Devre Tasarımında Kullanılan Yöntemler
Devre tasarımında, ne yapılacağına karar verildikten sonra, maliyeti en düşük ve zamandan en fazla tasarruf sağlayacak yöntemler tercih etmek yada aramak gerekir. Çağımız bilim ve teknolojinin belki at başı koştuğu bir zamana ev sahipliği yapmasından dolayı bu alanda da alternatifler bolca bulunuyor.

Belki önceden olsa, devremizin çalışmasını deneme işlemleri bizim için çok zahmetli ve maliyetli olabilirdi. Fakat şimdi “Gerçek Zamanlı Olmayan” yöntemlerle bu sorun neredeyse çoğu devre tasarımında yolumuzu aydınlatıyor. Günümüzde yaygın olarak kullanılan “Devre Tasarım Programları” zahmeti ve maliyeti en aza indiriyor. Örneğin; Elektronik Workbench, MultiSim, Proteus vb. bilgisayar programları bu konuda hayatımızı kolaylaştırırken; Boardmaker, Ultiboard, Ares vb. programlarda baskı devre çizimlerinde büyük rahatlıklar sağlıyor.

Ben de proje devresini Proteus adlı simülasyon programıyla tasarladım. Bu program kişiye sanal bir laboratuar ortamı sağlıyor. Devre plaket üzerine aktarılmadan önce 8051’in çalıştırılmasına kadar denenebiliyor ve kontrol edilebiliyor.Her türlü laboratuar ortamının sağlanmasının yanı sıra, belki de en rahatlatıcı yanlarından birisi de hataların düzeltilmesi mali bir sorun teşkil etmiyor

Kronometre Açık Devre Şeması
mikrodenetleyici kontrollu kronometre devresi

Programın Yazılması Kullanılan Programlar:
8051 entegresinin programlanması adına kullanılan çok fazla derleyici program mevcut durumda. Size kalan yalnızca sizin için kullanımı en kolay ve en avantajlı olanı seçmek. 8051 programlanabilmesi için olan derleyicilerin en gelişmiş olanları şüphesiz KEIL Uvısıon2 olduğunu düşünüyorum.

Ben de en işime yarayanı ve kolay olanı tercih ederek, projenin hazırlanmasında KEIL kullandım. Sonuçları da gayet mükemmel diyebilirim. Aslında doğrudan ASSEMBLY komutlarıyla da aynı işlemler yapılabilirdi.KEIL gibi derleyicilerin programın yazımına rahatlıklar sağlamasının yanında, en büyük avantajlarının derlenmiş/makine koduna çevrilmiş programın (.HEX) genelde, bellekte, ASSEMBLY kodlarla yazılanlardan daha az yer işgal etmesi ve daha kontrollü çalışması diyebilirim.

Hazırlayan: Caner ALTAŞ Projenin Dosyaları 8051 ile Lcd Göstergeli Kronometre Devresi

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

Emeği geçen Kişilere Teşekkürler

8051 Kronometre Uygulamasının C programı

#include <89c51rd2.H>
#include
#include

#define dt   P1
#define RS   P2_7
#define RW   P2_6
#define EN   P2_5
#define b0	 P2_0
#define b1	 P0_1
#define b2   P0_2
#define b3   P0_3

int sls,sn,dk,st,x;

void say (void) interrupt 5 //Timer kesmesi//
	{
	x=1;
	TF2=0;
	TH2=0xD8;  //1 salise için gerekli bayrak değerleri D8EF-FFFF//
	TL2=0xEF;
	sls++;
	if(sls>99)
		{
		sls=0;
		sn++;
		if(sn>59)
			{
			sn=0;
			dk++;
			if(dk>59)
				{
				dk=0;
				st++;
				if (st>23) {st=0;}
				}
			}
		}
	}
void bekle (long int sure)//lcd için gereken zaman gecikmesi//
   { 
   long int i;
      for (i=1;i<=sure;i++)
	  {;}
   }
void datakomut (int komut) //lcd için komut fonksiyonu
   { 	
     RS=0;
	 RW=0;
	 EN=1;
	 dt=komut;
	 EN=0;
	 bekle(1);
	}
void dataveri (char veri[],long int hiz)//char veri yazmak için
   {
    int i=0;
	while(veri [i]!=0)
	   {
	   RS=1;
	   RW=0;
	   EN=1;
	   dt=veri[i];
	   EN=0;
	   i++;
	   bekle(hiz);
	   }
	}
void intveri ( int inte ,long int hiz)//integer veri yazmak için//
   { 
       RS=1;
	   RW=0;
	   EN=1;
	   dt=inte;
	   EN=0;
	   bekle(hiz);
	}
int kbul (int a,int b)//kalan bulmak için
{
int c;
while (a>=b)
	{
	a=a-b;
	}
	c=a;
return (c);
}
void lcd(void)//lcd başlangic ayarlari
     { 
	  int baslangic[]={12,56,6},t;
	  for (t=0;t<2;t++) datakomut(baslangic[t]);
	  }
void ekran(void)//değerler lcd ye yaziliyor
{
int a,b,d;
datakomut(2);
dataveri(" ",1);

a=kbul(st,10);//saat in küçük hanesi
d=st-a;//saatin sağ tarafini sifirladim
b=d/10;//saatin büyük hanesini buldum
intveri(b+48,1);//ascii kodu için//
intveri(a+48,1);

a=kbul(dk,10);
d=dk-a;
b=d/10;
dataveri(":",1);
intveri(b+48,1);
intveri(a+48,1);

a=kbul(sn,10);
d=sn-a;
b=d/10;
dataveri(":",1);
intveri(b+48,1);
intveri(a+48,1);


a=kbul(sls,10);
d=sls-a;
b=d/10;
dataveri(":",1);
intveri(b+48,1);
intveri(a+48,1);
}
void main (void)
{
int e,i,k;
i=0;
k=0;
e=1;
b0=1;
lcd();
datakomut(1);
T2CON = 0x80;
ET2 = 1;//timer kesmesi aktif
TR2 = 0;
EA = 1;
st=0;
dk=0;
sn=0;
sls=0;
    TH2=0xD8;
	TL2=0xEF;
	while(1)
	{
	 if(e==1)
		{
		while(x)
			{
			ekran();
			x=0; //kesmeden sonra ekranın yazılması için
			}
		}
		while(b1)// buton bire bak (reset)
		{
		st=0;
		dk=0;
		sn=0;
		sls=0;
		TR2=0;
		i=0;//en son hangi tusa basildigini anlamak için
		datakomut(192);
		dataveri("SAYAC RESETLENDI ",1);
		ekran();
		while(b1) {}
		}
		while(b3)//buton 3 e bak (basla dur)
		{
		if(i==0)
			{
			TR2=1;
			e=1;
			i=1;
        datakomut(192);//alt satırın başlangıc adresi
		dataveri("SAYMA BASLADI    ",1);
			}
		else
			{
			TR2=0;
			e=0;
			i=0;
			datakomut(192);
		    dataveri("SAYMA DURDU   ",1);
			}
		 while(b3)
			{}
		}
	while(b2)//buton 2 ye bak ekrani durdur
		{
		if(k==0)
			{
			TR2=1;
			e=0;
			k=1;
			datakomut(192);
			dataveri("EKRAN DURDU    ",1);
			}
		else
			{
			TR2=1;
			e=1;
			k=0;
			datakomut(192);
			dataveri("TEKRAR SAYIYOR     ",1);
			}
		while(b2)
			{}
		}
	}
}
  • sercan yelkenci

    valla kardesım sagol ayrıcada ellerıne saglık gercekten iyi emek etmişsin bizede senin emeğini işleyerek seni mutlu etmek düşer:):)

  • hasan çengel

    kardeş selamlar..
    sizin şemanızı kronrometre ararken tesadüfen gördüm
    bana start butonu ayrı stop butonu ayrı kronometre lazım ama piyasadakiler start ve stop butonları tek tuşla olduğu için benim işimi görmüyor bu şema daki malzemeler hazırlanıp yapılırsa devre çalışırmı yoksa yazılımmı atılması gerekir. selamlar cevap yazarsanız sevinirim

  • Emre Vardar

    buradaki 8051 mi yoksa şekilde 80c52 yazıyor. Hangisi kullanılmalı devrede?

  • ahmet aktaş

    8051 ile yapılabilirmi devre şekilde 8052 kullanılmış?