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. Projeyi Hazırlayan: Fatih Bayram Çavuş Emeği geçen Kişilere Teşekkürler
Şifreli Kapı Kilidi Devre Şeması
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); } }
at89c51-ile-lcd-gostergeli-sifreli-kapi-kilidi
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/10/23 Etiketler: AT89C51, atmel avr projeleri, c dili, keypad, L293D, motor, şifreli kilit, sürücü, tuş takımı
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
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
https://320volt.com/isis-basit-devre-kurulumu-keil-c-yazilim-hex-derleme/
Devre semasi 89s52icinde gecerlimi