Elektronik / Mikrodenetleyici Projeleri/

AT89C51 ile Lcd Göstergeli Şifreli Kapı Kilidi

Sponsorlu Bağlantılar

L293D denetim kartlarının yüksek voltaj ve akım gereksinimi olan elemanları (motor, röle)kontrol etmesi için kullanılır. Motorun ihtiyaç duydu_u akım, denetim kartının verebileceğinden fazla olduğundan, voltajı ve akımı artırmak için sürücü devreleri kullanılmalıdır, aksi takdirde denetim kartının yanmasına sebep olunabilir.

Şifreli Kapı Kilidi Devre Şeması
at89c51-sifreli-kapi-kilidi

L293D Özellikler

  • Sağ_ve sol tarafının bağımsız çalışması
  • 1 adet L293D iki motoru çift yönlü kontrol edebilir

Devrenin kurulması

  • İlk olarak 4-5-12-13 nolu bacaklar entegrenin tam ortasındakiler birleştirilip, toprak olarak kullanılmalıdır.
  • Motorlar, 3-6 ve 11-14 nolu bacaklara bağlanır.
  • 1-16-9 nolu bacaklara 5 Volt verilir (BASIC Stamp’den sağlanabilir).
  • 2 ve 7 nolu bacaklar 1. motoru, 10 ve 15 nolu bacaklar 2. motoru çalıştırır.
  • 8 nolu bacaktan, motora uygulanacak voltaj verilir (36 V’dan fazla olmamalıdır)

C Program Kodları

/************************************************************************/
/* Uygulama Adi : Sifreli Kapi Kilidi	 		                        */
/* Dosya Adi	: sif_kapikilidi				                            */
/* Tarih	    : Mayis 2006					      				    */
/* Hedef Islemci: MCS-51						      					*/
/************************************************************************/
#include <89c51rd2.H>
#include <stdio.H>

/* Türkçe Karakterlerin Kod Karşılıkları */
/*code ile tablo kod bellek içerisinde tanımlanıyor */
const char code TurkceKar[8][8] = {
                          {143,144,144,142,129,129,158,132}, // Ş
                          {128,128,142,144,144,145,142,132}, // ç
                          {128,128,143,144,142,129,158,132}, // ş
                          {128,128,140,132,132,132,142,128}, // ı
                          {138,128,145,145,145,145,145,142}, // Ü
                          {138,132,143,145,145,143,129,142}, // ğ
                          {138,142,145,145,145,145,142,128}, // Ö
                          {132,142,132,132,132,132,142,128}  // İ
 					      };

#define KLAV    P2      // Tus Takimi

code long int sifre=2402;   // sifrenin kod bellege atilmasi

bit say;
int g=20;
int k=10000;
/***********************************************************************************************************
************************************************************************************************************
                             KEYPAD'DEN OKUMA YAPILMASI
************************************************************************************************************
***********************************************************************************************************/

unsigned char klavyeOku(void)
{   // Keypad'ten girilen sayının tespiti
  unsigned char i = 0;
  unsigned char x = 0;
 /*Sırasıyla Birinci,ikinci ve üçüncü sütuna sıfır göndermek için
    gerekli tablo */
  unsigned tablo[] = {0x7f,0xbf,0xdf};
  KLAV = 0x0F;                   // Satırların hepsi 1  
  while((KLAV & 0x0F) == 0x0F);   // Bir tuşa basılana kadar dön

  for(i=0; i < 3;i++)
  {
    KLAV = tablo[i];     // Sütunlara sırasıyla sıfır gönder
    x = KLAV & 0x0F;     // Satırların tespiti için son dört 
                         // bitin elde edilmesi
    switch(x)
    {
      case 7:   // D satırı aktif (*, 0 veya # tuşlarından biri) 
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        if (i!=1) // Basılan Tuş 0 değilse(# veya * basıldı ise)        
        say=1; // Sayma işleminin yetkilendirilmesi	
        return 0;	//Sıfır değerini gönder
      }	
      break;

      case 11:  // C satırı aktif (7, 8 veya 9 tuşlarından biri) 
      {
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        return 7+i;	 // (i'ye göre 7,8 veya 9 değerini gönder)
      }	
      break;

      case 13: // B satırı aktif (4, 5 veya 6 tuşlarından biri)
      {	
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
	 return 4+i;	 // (i'ye göre 4,5 veya 6 değerini gönder)
      }	
      break;

      case 14:  // A satırı aktif (1, 2 veya 3 tuşlarından biri) 
      {	
        while((KLAV & 0x0F) != 0x0F);//Buton bırakılana kadar dön
        return 1+i;	 // (i'ye göre 1,2 veya 3 değerini gönder)
      }	
      break;
    }	
  }
}

/**********************************************************************************************************
***********************************************************************************************************
                                     KEYPAD'DEN OKUMA BiTTi
***********************************************************************************************************
**********************************************************************************************************/

/**********************************************************************************************************
***********************************************************************************************************
                              LCD'DE KULLANILAN KOMUTLARIN TANITILMASI
***********************************************************************************************************
**********************************************************************************************************/

#define Sil 		 1	// Ekrani temizler
#define BasaDon 	 2	// imleci sol üst köseye getirir
#define SolaYaz 	 4  // imlecin belirttigi adres azalarak gider
#define SagaYaz 	 6   // imlecin belirttiği adres artarak gider
#define ImlecGizle	 12	// Göstergeyi aç, kursör görünmesin
#define ImlecYanSon	 15	// Yanip sönen blok kursör
#define ImlecGeri	 16	// Kursörü bir karakter geri kaydir
#define KaydirSaga	 24	// Göstergeyi bir karakter saga kaydir                   
#define KaydirSola   28	// Göstergeyi bir karakter sola kaydir   
#define EkraniKapat	 8	// Göstergeyi kapat (veriler silinmez)
#define BirinciSatir 128	// LCD'nin ilk satir başlangiç adresi       
                          // (DDRAM adres)
#define IkinciSatir  192	// İkinci satirin başlangiç adresi
#define KarakUretAdres 64	// Karakter üreteci adresini belirle  
                          // (CGRAM adres)

/* LCD'de Kullanılan Fonksiyon Seçimi */
#define CiftSatir8Bit  56	 // 8 bit ara birim, 2 satır, 5*7 piksel
#define CiftSatir4Bit  48	 // 8 bit ara birim, 1 satır, 5*7 piksel
#define TekSatir8Bit   40	 // 4 bit ara birim, 2 satır, 5*7 piksel
#define TekSatir4Bit   32	 // 4 bit ara birim, 1 satır, 5*7 piksel

/* LCD Girişlerinin Tanımlanması */
#define Data  P1	  // LCD Data girişleri için port ata
#define RS	 P0_0     // Saklayıcı seçme girişi RS=0 komut, RS=1 veri
#define RW	P0_1     // Oku/Yaz girişi RW=0 yaz, RW=1 oku
#define EN	P0_2      // Yetki girişi 

/* LCD Gecikme Fonksiyonu */
void Gecikme (long int sure)
{
  long int i;
  for (i=1;i<=sure;i++)
    {;}
}

/* LCD Hazır Olana Kadar Bekle Fonksiyonu */
void LcdHazir ()
{
   Data=0xFF;	      // LCD den veri almaya hazirlan 	  	
   RS = 0;	      // komut modu
   RW = 1;	      // LCDden okuma
   EN = 1;         // yetki için düşen kenar ayarı
   Gecikme(200);   // kısa bir bekleme süresi
   while(Data & 0x7F == 0x80); // mesgul bitini kontrol et.
}

/* LCD'ye Komut Yazdırma Fonksiyonu */
void Komut (int komut) 
{
  LcdHazir();      // LCD hazir olana kadar bekle
  RS=0;	      // RS komut modunda
  RW=0;	      // RW yaz modunda
  EN=1;	// işlemin yetkilendirilmesi için düşen kenar ayarı           
  Data=komut;	      // LCD data girişlerine komut bilgisini aktar
  EN=0;	      // yetki için düşen kenar sağlandı
  Gecikme(1000);   // gecikme
}	
/* LCD'ye Tek Bir Karakter Yazdirma Fonksiyonu */
void Veri (char veri, long int hiz)	
{
  LcdHazir();      // LCD hazir olana kadar bekle
  RS=1;	      // RS komut modunda
  RW=0;	      // RW yaz modunda
  EN=1;	      // yetki için düsen kenar ayar işlemi
  Data=veri;       // LCD data girişlerine veri bilgisini aktar
  EN=0;            // yetki için düşen kenar sağlandı
  Gecikme(hiz); // Ekranda karakterlerin görünmesi arasındaki süre
}

/* LCD'ye Karakter Dizisi (String) Yazdırma Fonksiyonu */
void VeriDizi (char veri[], long int hiz)	
{
  int i=0;
  while(veri[i]!=0)
  {
    LcdHazir();     // LCD hazir olana kadar bekle
    RS=1;	       // RS komut modunda
    RW=0;	       // RW yaz modunda
    EN=1;	       // yetki için düsen kenar ayar işlemi
    Data=veri[i];   // LCD data girişlerine veri bilgisini aktar
    EN=0;           // yetki için düşen kenar sağlandı
    i++;   // bir sonraki veri bitini almak için dizi'yi 1 arttır 
    Gecikme(hiz);   // karakterlerin görünmesi arasındaki süre
  }
}
/* LCD Başlangıç Ayarlarını Yapan Fonksiyon */
void LcdAc(void)            
{ 	
  Komut(ImlecGizle);
  Komut(CiftSatir8Bit);
  Komut(SagaYaz);
}

/*********************************************************************************************************
**********************************************************************************************************
                           LCD'DE KULLANILAN KOMUTLARIN TANITILMASi BiTTi
**********************************************************************************************************
*********************************************************************************************************/

/**********************************************************************************************************
***********************************************************************************************************
                                     METiN LCD UYGULAMALARI
***********************************************************************************************************
**********************************************************************************************************/

/* Sadece Üst Satırı Sağa Kaydıran Fonksiyon */
void UstSatirSagaKay(char kayan_yazi[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(BirinciSatir+16);
  VeriDizi(kayan_yazi, 100);	// Kaydırılacak metni gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSaga);		// Ekranı 1 karakter sağa kaydır
    Gecikme(kayma_hizi);
  }
}

/* Sadece Üst Satırı Sola Kaydıran Fonksiyon */
void UstSatirSolaKay(char kayan_yazi[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(BirinciSatir+16);
  VeriDizi(kayan_yazi, 100);	// Kaydırılacak metni gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSola);		// Ekranı 1 karakter sola kaydır
    Gecikme(kayma_hizi);
  }
}
/* Sadece Alt Satırı Sağa Kaydıran Fonksiyon */
void AltSatirSagaKay(char kayan_yazi[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(IkinciSatir+16);
  VeriDizi(kayan_yazi, 100);	// Kaydırılacak metni gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSaga);		// Ekranı 1 karakter sağa kaydır
    Gecikme(kayma_hizi);
  }
}
/* Sadece Alt Satırı Sola Kaydıran Fonksiyon */
void AltSatirSolaKay(char kayan_yazi[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(IkinciSatir+16);
  VeriDizi(kayan_yazi, 100);	// Kaydırılacak metni gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSola);	      // Ekranı 1 karakter sola kaydır
    Gecikme(kayma_hizi);
  }
}
/* Her İki Satırı Aynı Anda Sağa Kaydıran Fonksiyon */
void TumSatirlarSagaKay (char ust_satir[],char alt_satir[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(BirinciSatir+16);
  VeriDizi(ust_satir, 100); // Kaydırılacak üst satır metnini gir
  Komut(IkinciSatir+16);
  VeriDizi(alt_satir,100);	// Kaydırılacak alt satır metnini gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSaga);
    Gecikme(kayma_hizi);
  }
}
/* Her İki Satırı Aynı Anda Sola Kaydıran Fonksiyon */
void TumSatirlarSolaKay (char ust_satir[],char alt_satir[],long int kayma_hizi)
{
  int i;
  Komut(Sil);
  Komut(BirinciSatir+16);
  VeriDizi(ust_satir, 100); // Kaydırılacak üst satir metnini gir
  Komut(IkinciSatir+16);
  VeriDizi(alt_satir,100); // Kaydırılacak alt satir metnini gir
  for (i=0;i<40;i++)
  {
    Komut(KaydirSola);
    Gecikme(kayma_hizi);
  }
}
/* Özel Karakterleri LCD'ye Tanıtan Fonksiyon */ 
void ozelKarTanit(void) 
{
  int x,y;
  Komut(KarakUretAdres);	// CGRAM adresi 
  Komut(KarakUretAdres);	// CGRAM adresi 
  Komut(KarakUretAdres);	// CGRAM adresi  = 0= 0= 0= 0
  for(x = 0; x < 8; x++) 
  {
    for(y = 0; y < 8 ; y++) 
    {
      Veri(TurkceKar[x][y],10);
    }
  }
   Komut(BirinciSatir); // DDRAM adresi = 0	

}

void sifreli() interrupt 0
{

/************************************************************************************************************
*************************************************************************************************************
                               KAPININ AÇILMASI
*************************************************************************************************************
************************************************************************************************************/

int m=0;
int f=0;
int binler,yuzler,onlar,birler;
long int girilen_sayi;
int basla;
int sayac;

	Komut(Sil); 
    VeriDizi("   HOSGELDiNiZ   ",g); // LCD ye yazi yazilmasi
	Gecikme(k);
	Komut(Sil);
	VeriDizi(" LUTFEN KAPIYI ",g);//LCDye yazi yazdirilmasi
	Komut(IkinciSatir);   //LCDnin ikinci satirina geçilmesi
	VeriDizi("  ACMAK iCiN ",g); 
	Gecikme(k);
	Komut(Sil);
	VeriDizi("  GEREKLi OLAN   ",g);  
	Komut(IkinciSatir);
	VeriDizi("    4 HANELi   ",g);   
	Gecikme(k);
	Komut(Sil);	
	VeriDizi("SiFREYi GiRiNiZ  ",g);
	Gecikme(k);
	Komut(Sil);

    sayac=0;basla=1; // belli sayida giris için gerekli sayaca sifir atanmasi ve 
                            // sifrenin girilmesi için baslanin bir yapilmasi

	while (basla)
	{   

	    // keypadden sifrenin girilmesi
		binler=klavyeOku();  //keypadden binler basamaginin okunmasi
		VeriDizi("     *",g);
		yuzler=klavyeOku();  //keypadden yüzler basamaginin okunmasi
		VeriDizi("*",g);
		onlar=klavyeOku();   //keypadden onlar basamaginin okunmasi
		VeriDizi("*",g);
		birler=klavyeOku();  //keypadden basamaginin okunmasi
		VeriDizi("*",g);
		Komut(Sil);
		girilen_sayi=(1000*binler)+(100*yuzler)+(10*onlar)+birler;  //sayinin elde edilmesi
        //Sifre girildi

		VeriDizi("    LUTFEN   ",g);   //LCDye yazi yazdirilmasi
		Komut(IkinciSatir);
		VeriDizi("   BEKLEYiNiZ ",g);   
		Gecikme(k);
		Komut(Sil);  
    	VeriDizi("SiFRENiZ KONTROL",g);   
	    Komut(IkinciSatir);
   	    VeriDizi ("    EDiLiYOR     ",g);   
		Gecikme(k);
		Gecikme(5000);  //gecikme saglanmasi 
   	    Komut(Sil);	
		sayac++;

		if (sifre==girilen_sayi)    //girilen sayinin kontrol edilmesi
			{
			basla=0;   //sifre dogruysa kapi açma döngüsünden çikmasi için başla sifirlaniyo 
			f=1;       //Dogru sifre girilmeden kapi kapamaya girilmemesini sagliyo
			m=1;       //kapi açildiktan sonra ilgili bölüme girilmesi için l 1'leniyo    
			VeriDizi("  DOGRU SiFRE  ",g);
			Komut(IkinciSatir);
			VeriDizi(" KAPI ACILIYOR ",g);
			Gecikme(k);
			P3_0=!P3_0;   //Motorun bir bacagi 1 yapılarak kapi açiliyo
			Gecikme(10000);
			P3_0=!P3_0;   //motor durduruluyo
			Gecikme(100000);
			Komut(Sil);
			}
	        else
 		        if (sayac<=3)  // Belli sayida dogru sifre girilmesi denemesi yapilmasini saglar 					{ 					VeriDizi("  YANLIS SiFRE ",g); 					Komut(IkinciSatir); 					VeriDizi("TEKRAR DENEYiNiZ",g); 					Gecikme(k); 					Komut(Sil); 					} 		if (sayac>=4) // Belli sayida dogru sifre girilmesi denemesi yapilmasini saglar 
			{
			basla=0;  //dört kereden fazla sifre girilmesini engelliyo
			Komut(Sil);
    		VeriDizi("    SiFREYi ",g);
			Komut(IkinciSatir);
   		    VeriDizi (" BiLMiYORSUNUZ ",g);
			Gecikme(k);
		    Komut(Sil);
    		VeriDizi("     iCERi  ",g);
		    Komut(IkinciSatir);
    		VeriDizi ("  GiREMEZSiNiZ ",g);
			Gecikme(k);
    		Komut(Sil);
			}
	}
/*********************************************************************************************************
**********************************************************************************************************
                                        KAPININ KAPANMASI
**********************************************************************************************************
*********************************************************************************************************/

    if ( m==1 )   //kapi açilmamissa yazilarin görülmemesini sagliyo
	    {
    	girilen_sayi=0;  // kapi açilirken dogru girilen sayinin sifirlanmasi
		VeriDizi(" LUTFEN KAPIYI ",g);  //LCDye yazi yazdirilmasi
		Komut(IkinciSatir);   //LCDnin ikinci satirina geçilmesi
		VeriDizi("   KAPATINIZ ",g);
		Gecikme(k);
		Komut(Sil);  //LCD ekraninin temizlenmesi
    	VeriDizi("     KAPIYI ",g);
		Komut(IkinciSatir);
		VeriDizi("  KAPAMAK iCiN ",g);
		Gecikme(k);
		Komut(Sil);
		VeriDizi("  GEREKLi OLAN   ",g);
		Komut(IkinciSatir);
		VeriDizi("    4 HANELi   ",g);
		Gecikme(k);
		Komut(Sil);	
		VeriDizi("SiFREYi GiRiNiZ  ",g);
		Gecikme(k);
		Komut(Sil);
		m=0;
		}	

	sayac=0,basla=1;  

	while (basla && f)
	{

		binler=klavyeOku();  //keypadden binler basamaginin okunmasi
		VeriDizi("     *",1000);
		yuzler=klavyeOku();  //keypadden yüzler basamaginin okunmasi
		VeriDizi("*",1000);
		onlar=klavyeOku();   //keypadden onlar basamaginin okunmasi
		VeriDizi("*",1000);
		birler=klavyeOku();  //keypadden birler basamaginin okunmasi
		VeriDizi("*",1000);
		Komut(Sil);
		girilen_sayi=(1000*binler)+(100*yuzler)+(10*onlar)+birler;  //sayinin elde edilmesi

		VeriDizi("    LUTFEN   ",g);
		Komut(IkinciSatir);
		VeriDizi("   BEKLEYiNiZ ",g);
		Gecikme(k);
		Komut(Sil);  
    	VeriDizi("SiFRENiZ KONTROL",g);
		Komut(IkinciSatir);
   	    VeriDizi ("    EDiLiYOR     ",g);
		Gecikme(k);
		Gecikme(5000);
   	    Komut(Sil);	
		sayac++;

		if (sifre==girilen_sayi) 
			{
			basla=0;  //kapi kapandiktan sonra kapama bölümünden çikilmasini sagliyo
			f=0;       //kapi kapandiktan sonra kapama bölümünden çikilmasini sagliyo
			VeriDizi("  DOGRU SiFRE  ",g);
			Komut(IkinciSatir);
			VeriDizi(" KAPI KAPANIYOR ",g);
			Gecikme(k);
			P3_1=!P3_1;      //motor kapama yönüne dogru döndürülüyo
			Gecikme(10000);
			P3_1=!P3_1;      //motor durduruluyo
			Gecikme(100000);
			Komut(Sil);

			}
	        else
 		        if (sayac<=3) 					{ 					VeriDizi("  YANLIS SiFRE ",g); 					Komut(IkinciSatir); 					VeriDizi("TEKRAR DENEYiNiZ",g); 					Gecikme(k); 					Komut(Sil); 					} 		 		if (sayac>=4) // Belli sayida dogru sifre girilmesi denemesi yapilmasini saglar 
			{
			basla=0;
			Komut(Sil);
    		VeriDizi("KAPIYI KAPAMASI ",g);
		    Komut(IkinciSatir);
   		    VeriDizi ("      iÇiN ",g);
			Gecikme(k);
		    Komut(Sil);
    		VeriDizi(" GOREVLi KiSiYi ",g);
			Komut(IkinciSatir);
   		    VeriDizi ("   ÇAGIRINIZ ",g);
			Gecikme(k);
		    Komut(Sil);
			f=0;
	        }

	   }
/**********************************************************************************************************
***********************************************************************************************************
                                        KAPI KAPANDI
***********************************************************************************************************
**********************************************************************************************************/

VeriDizi("   iYi GUNLER   ",g*2);
Gecikme(k);
Komut(Sil);

}

void main (void)
{
  EX0=1;       //kesme 0 aktif ediliyo
  EA=1;        //bütün kesmeler aktif ediliyo
  P3_0=0;      //motor uçlarinin ilk degerleri sifirlaniyo
  P3_1=0;      //motor uçlarinin ilk degerleri sifirlaniyo
  LcdAc();	       /* LCD Açilis islemleri */
  ozelKarTanit();    // Türkçe karakterlerin LCD'ye yüklenmesi

  while(1)
  {
    Komut(Sil); //LCD ekraninin temizlenmesi
	VeriDizi ("    KOCAELi       ",g);
	Komut(IkinciSatir);  //LCDnin ikinci satirina geçilmesi
	VeriDizi("  UNiVERSiTESi ",g);
	Gecikme(k);
    Komut(Sil); //LCD ekraninin temizlenmesi
	VeriDizi ("   ELEKTRONiK ",g);
	Komut(IkinciSatir);  //LCDnin ikinci satirina geçilmesi
	VeriDizi("  OGRETMENLiGi",g);
	Gecikme(k);
	Komut(Sil); //LCD ekraninin temizlenmesi
	VeriDizi ("     Fatih       ",g);
	Komut(IkinciSatir);  //LCDnin ikinci satirina geçilmesi
	VeriDizi("  BAYRAMCAVUS   ",g);
	Gecikme(k);
	Komut(Sil);
	VeriDizi("   010303032    ",g);
	Komut(IkinciSatir);
	VeriDizi("     Elo. 4    ",g);
	Gecikme(k);
	Komut(Sil);
	VeriDizi("     PROJE   ",g);
	Komut(IkinciSatir);
	VeriDizi("      ADI   ",g);
	Gecikme(k);
	Komut(Sil);
	VeriDizi("  Sifreli Kapi ",g);
	Komut(IkinciSatir);
	VeriDizi("     Kilidi    ",g);
	Gecikme(k);
	Komut(Sil);

  }
}

Projeyi Hazırlayan: Fatih Bayram Çavuş Projenin Dosyaları AT89C51 ile Lcd Göstergeli Şifreli Kapı Kilidi

Dosya indirme LINK listesi (HTML formatında) link-3594.zip şifre-pass: 320volt.com
Emeği geçen Kişilere Teşekkürler

  • Mehmet

    atmel de bu programı deneyeceğim porlar uyumlumu #include kısmına ne yazılacak yardım edin…

  • yazıda verilen dosyayı indirin kaynak kodlar dosya içinde

  • Mehmet

    Eyvallah daha denemedim ama inşallah çalışır

  • .hex dosyası yok internette L293D.hex buldum buna ekledim Proteus 8 de çalıştırdım fakat ekrana hiçbirşey gelmiyor ?

    • kaynak kodu keil programı ile derleyeceksiniz

      http://320volt.com/isis-basit-devre-kurulumu-keil-c-yazilim-hex-derleme/

  • Furkan

    Devre semasi 89s52icinde gecerlimi