AT89C51 ile Lcd Göstergeli Şifreli Kapı Kilidi

Projeyi Hazırlayan: Fatih Bayram Çavuş Projenin Dosyaları at89c51-sifreli-kapi-kilidi Emeği geçen Kişilere Teşekkürler
Şifreli Kapı Kilidi Devre Şeması

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.

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);
}
}Yazar: gevv
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1893 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; gevv















Yazılar e-postanıza gönderilsin
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