ŞİFRELİ KAPI KİLİDİ YAPIMI

Başlatan gilestel, 18 Kasım 2014, 19:34:37

gilestel

merhaba arkadaşlar ben pic konusunda amatörüm hobi amaclı çalışmalarım var.Bunlardan bir tanesi şifreli kapı kilidi kapı kilidi şu şekilde çalışıyor.
1-)İlk etapda şifre 1111
2-)şifreyi doğru girdikten 10sn sonra kapı kapanır.
3-)Şifreyi üst üste 3 defa yanlış girerseniz buzzer çalışır.Buzerı susturmak için A tuşuna basmanız yeterlidir.
4-)Şifre girerken eğer A B C D E F tuşlarına basarsanız korkamayın o tuşlar iptal edildi.Sadece belli zamanlar da aktif oluyor.3 defa şifreyi yalnış girildikten sonra A tuşuna basarsanız buzzer susar diğer tuşlar yine çalışmaz. Şifreyi doğru girdikten 10sn içinde B tuşuna basarsanız eğer şifre değiştir menüsü gelir.
5-)Şifreyi doğru girdiniz ve B tuşuna bastınız o zaman da girmek istediğiniz şifreyi arda arda 2 defa doğru girmeniz gerekmektedir. Mesala 1. kez 2222 girdiniz 2. kez 3333 girdiniz 2 hakkınız bitti tekrar iki  defa doğru şifreyi girmeniz gerekir. Şifreyi düzgün bir şekilde değiştirdikten 10sn sonra kapı tekrar kapanır.
Teşekkürler

#include <16F877A.h>


#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
#use delay(clock=4000000)
#include <lcd.c>

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#byte portc=0x07
char const keys[]={1,2,3,10,
                   4,5,6,11,
                   7,8,9,12,
                   14,0,15,13};
                   
int x,bayrak=0,j=0,c=0,g,a,hak=0,i,tarama,q,tara,tik,v;
long int deger=0,tak=200,t,degisim,m;
long int tus[10],kayitli_sifre[5],dizi[3];

#int_timer0
void timer0_kesme(){
set_timer0(60);
if(input(pin_B5))

{
q=q+1;
if(q==tak)
{
output_bit(PIN_B5,0);
q=0;
tik=1;
}
}
}

#int_ext
void dis_kesme()
{

x=keys[portc>>4];

j=j+1;



}
void main()
{
set_tris_b(0x01);
set_tris_c(0xF0);
set_tris_d(0x00);
output_d(0x00);
output_b(0x00);
basla:

}
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
set_timer0(60);
enable_interrupts(INT_timer0);
   // TODO: USER CODE!!
lcd_init();

ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

printf(lcd_putc,"HOS GELDINIZ");
delay_ms(1000);
printf(lcd_putc,"\f");

printf(lcd_putc,"SIFRENIZI GIRIN");
delay_ms(1000);

printf(lcd_putc,"\f");
c=0;

While(1)
{

while(input(pin_B5)){
if(x!=11){
if(a!=1){
printf(lcd_putc,"KAPI KAPANMADAN");

printf(lcd_putc,"\nISLEM YAPAMAZSIN");
delay_ms(2500);
printf(lcd_putc,"\f");
printf(lcd_putc,"\SIFRE DEGISTIRMEK\nICIN B'ye BASINIZ");
delay_ms(2500);
printf(lcd_putc,"\f");
}
}
if(x==11)
{tak=200000;
j=0;
c=0;
x=0;
t=20;
}
if(v==1)
{
printf(lcd_putc,"KAPI KAPANMADAN");

printf(lcd_putc,"\nISLEM YAPAMAZSIN");
delay_ms(2500);
printf(lcd_putc,"\f");
printf(lcd_putc,"\SIFRE DEGISTIRMEK\nICIN B'ye BASINIZ");
delay_ms(2500);
printf(lcd_putc,"\f");
if(x==11)
v=0;
if(input(pin_B5)==0)
v=0;
}

if(input(pin_B5)==1&&t==20)
{
a=1;


tekrar:
if(degisim!=1){
switch(x)
{
case 1:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 2:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 3:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 4:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 5:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 6:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 7:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 8:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 9:
if(j<5)
{
tus[j]=x;

}//j<5
break;

case 10:
if(j<5)
{
j=j-1;
x=16;
}

//j<5
break;


case 11:
if(j<5)
{
j=j-1;

x=16;
}
//j<5
break;


case 12:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 13:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 14:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 15:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 0:
if(j<5)
{
tus[j]=x;

}//j<5
break;

case 16:
break;
}//switch

}
g=j;


if(g==1)
{
if(c==0)
{deger=tus[1];
printf(lcd_putc,"YENI SIFRE=\n%Lu",deger);
delay_ms(100);
printf(lcd_putc,"\f");
g=0;
c=c+1;
}
}
if(g==2)
{
if(c==1)
{
deger=deger*10+tus[2];
printf(lcd_putc,"\f");
printf(lcd_putc,"YENI SIFRE=\n%Lu",deger);
delay_ms(100);

g=0;
c=c+1;
}
}

if(g==3)
{
if(c==2)
{
deger=deger*10+tus[3];
printf(lcd_putc,"\f");
printf(lcd_putc,"YENI SIFRE=\n%Lu",deger);
delay_ms(100);

g=0;
c=c+1;
}
}

if(g==4){
if(c==3)
{
g=0;
c=c+1;
deger=deger*10+tus[4];
printf(lcd_putc,"\f");
printf(lcd_putc,"YENI SIFRE=\n%Lu",deger);
delay_ms(100);
degisim=1;
m=m+1;
dizi[m]=deger;
if(dizi[1]==dizi[2])
{
m=0;
t=0;
q=0;
v=1;
tak=200;
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE DEGISTI");
delay_ms(1000);
m=0;
write_eeprom(0,tus[1]);
write_eeprom(1,tus[2]);
write_eeprom(2,tus[3]);
write_eeprom(3,tus[4]);
write_eeprom(4,1);
deger=0;
tus[1]=0;
tus[2]=0;
tus[3]=0;
tus[4]=0;
if(m==2)
m=0;
c=0;
j=0;
degisim=0;
goto basla;
}

else{
degisim=0;
if(m==2)
m=0;
deger=0;
g=0;
c=0;
j=0;
tus[1]=0;
tus[2]=0;
tus[3]=0;
tus[4]=0;
goto tekrar;
}


}
}
printf(lcd_putc,"\f");
printf(lcd_putc,"YENI SIFRE=\n%Lu",deger);
delay_ms(100);
printf(lcd_putc,"\f");




}
}
sifre:
if(tik==1)
{
tik=0;
goto basla;

}
if(hak==3)
output_b(0b00000010);

if(bayrak!=1){
switch(x)
{
case 1:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 2:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 3:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 4:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 5:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 6:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 7:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 8:
if(j<5)
{
tus[j]=x;

}//j<5
break;


case 9:
if(j<5)
{
tus[j]=x;

}//j<5
break;

case 10:
if(j<5)
{
j=j-1;
if(input(pin_B1))
{output_bit(PIN_B1,0);
hak=0;
}
x=16;
}//j<5
break;


case 11:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 12:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 13:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 14:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 15:
if(j<5)
{
j=j-1;
x=16;
}//j<5
break;


case 0:
if(j<5)
{
tus[j]=x;

}//j<5
break;

case 16:
break;
}//switch

}
g=j;


if(g==1)
{
if(c==0)
{deger=tus[1];
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);
printf(lcd_putc,"\f");
g=0;
c=c+1;
}
}
if(g==2)
{
if(c==1)
{
deger=deger*10+tus[2];
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);

g=0;
c=c+1;
}
}

if(g==3)
{
if(c==2)
{
deger=deger*10+tus[3];
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);

g=0;
c=c+1;
}
}

if(g==4){
if(c==3)
{
bayrak=1;
deger=deger*10+tus[4];
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);
tara=0;
g=0;
c=c+1;
}
}
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);
printf(lcd_putc,"\f");

if(bayrak==1)
{
if(tara!=1){
for(i=1;i<5;i++)
{
if(tus[i]==kayitli_sifre[i])
tarama=tarama+1;

}
if(tarama==4)
{tarama=0;
output_b(0b00100000);

tus
j=0;
c=0;
tara=1;
a=0;
}
else
{
tarama=0;
hak=hak+1;
bayrak=0;
tus[4]=0;
tus[1]=0;
tus[2]=0;
tus[3]=0;
deger=0;
j=0;
c=0;
a=0;
goto basla;

}
}

if(x==11)
{delay_ms(20);
deger=0;
j=0;
bayrak=0;
printf(lcd_putc,"\f");
printf(lcd_putc,"SIFRE=%Lu",deger);
delay_ms(100);
x=0;
tus[1]=0;
tus[2]=0;
tus[3]=0;
tus[4]=0;
c=0;
}

//!printf(lcd_putc,"yeni deger=%Lu",deger);
//!delay_ms(100);
//!printf(lcd_putc,"\f");
}//bayrak





}//while1




}//while

gilestel


Powered by EzPortal