
AT89C51 ile Lcd Göstergeli Şifreli Kapı Kilidi
26.03.2021 tarihinde güncellenen 23.10.2008 tarihinde yayımlanan AT89C51 ile Lcd Göstergeli Şifreli Kapı Kilidi ile 2758 yazısı var. Yazar gevv
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ı
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 Dosya indirme LINK listesi (TXT formatında) link-3594.zip şifre-pass: 320volt.com
Emeği geçen Kişilere Teşekkürler
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