Şifreli Kapı Kilidi

devre bağlantı şeması



şifreli kapı kilidi


Pic Basic Pro kodları:

'ŞİFRELİ KAPI KİLİDİ 'ilk kapı şifresi 0000 'şifre değiştirmek için * tuşuna 'bastıktan sonra yönetici şifresini girin 'ISIS te hafızadaki şifreyi sıfırlamak isterseniz 'DEBUG-RESET PERSİSTENT MODEL DATA tıklayın TRISB=%00000000 TRISD=%00001111 TRISC=%00000000 PORTC=0 '------------------------------------------------- '@ DEVICE pic16F877A '@ DEVICE pic16F877A, WDT_on '@ DEVICE pic16F877A, PWRT_ON '@ DEVICE pic16F877A, PROTECT_OFF '@ DEVICE pic16F877A, XT_OSC '------------------------------------------------- '----------LCD DEFINE komutları----------- DEFINE LCD_DREG PORTB 'data bacakları hangi Porta bağlı? DEFINE LCD_DBIT 4 'data bacakları hangi bitten başlıyor? DEFINE LCD_EREG PORTB 'Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 'Enable Bacağı Hangi bite bağlı? DEFINE LCD RWREG PORTB 'R/W Bacağı Hangi Porta bağlı? DEFINE LCD_RWBIT 2 'R/W Bacağı Hangi bite bağlı? DEFINE LCD_RSREG PORTB 'RS Bacağı Hangi Porta bağlı? DEFINE LCD_RSBIT 1 'RS bacağı Hangi Bite bağlı? DEFINE LCD_BITS 4 '4 bit mi yoksa 8 bit olarak bağlı? DEFINE LCD_LINES 2 'Kaç sıra yazabiliyor?> LOW PORTB.2 i VAR BYTE 'buzer alarm tekrarı s VAR BYTE 'basamak değişkeni yon_sifre VAR WORD 'yönetici şifresi yildiz VAR BYTE 'şifre değiştirmek için sifre VAR WORD 'şifre değişkeni yaz VAR WORD 'şifreyi Eeprom'a yazma tus VAR BYTE 'tuş değişkeni tahmin VAR WORD 'tuşpad ten girilen sayı yon_sifre=1923 'yönetici şifresi '--Eepromdan şifreyi okuma -- GOSUB eepromdan_oku '--Eeproma şifreyi yazma -- IF sifre>9999 THEN sifre=0 GOSUB eeproma_yaz ENDIF GOSUB baslangic '------ANA PROGRAM------ dongu: tus=20 CALL tara SELECT CASE tus 'tuşpad menü kontrolü CASE 10 'yıldız tuşuna basıldıysa yildiz=1 s=0 sifre=yon_sifre LCDOUT $FE,1 LCDOUT $FE,$C0,"SIFRE=" PAUSE 10 CALL tara CASE ELSE 'diğer tuşlara basıldıysa CALL islem END SELECT GOTO dongu '------ALT PROGRAMLAR------ tara: WHILE tus=20 'tus=20 olduğu sürece '(hiçbir tuşa basılmadığında) 'WHILE-WEND arasını işlemeye devam eder. PORTD=%00010000 IF PORTD.1 THEN tus=1 IF PORTD.2 THEN tus=2 IF PORTD.3 THEN tus=3 PORTD=%00100000 IF PORTD.1 THEN tus=4 IF PORTD.2 THEN tus=5 IF PORTD.3 THEN tus=6 PORTD=%01000000 IF PORTD.1 THEN tus=7 IF PORTD.2 THEN tus=8 IF PORTD.3 THEN tus=9 PORTD=%10000000 IF PORTD.1 THEN tus=10'* tuşu IF PORTD.2 THEN tus=0 'if PORTD.3 THEN tus=11 '# tuşu WEND'WHILE komutuna geri gönderir RETURN islem: IF s<4 b="">THEN 'sayı dört basamaktan küçükse IF s=0 THEN tahmin=0 s=s+1'sayaç oluşturuldu tahmin=tahmin*10+tus'basamakları oluşturur LCDOUT $FE,$C0,"SIFRE=" LCDOUT $FE,$C0+(s+6),"*" PORTC.4=1'tuş basma sesi PAUSE 40 PORTC.4=0 PAUSE 60 ENDIF IF s=4 THEN 'sayı dört basamaklı oldğunda IF yaz=0 THEN 'şifre kontrol edilecek ise CALL kontrol ELSE 'şifre eeproma yazılacak ise sifre=tahmin GOSUB eeproma_yaz GOSUB eepromdan_oku LCDOUT $FE,1,"SIFRE KAYDEDILDI" PAUSE 500 GOSUB baslangic yaz=0 yildiz=0 s=0 tahmin=0 ENDIF ENDIF RETURN kontrol: IF tahmin<>sifre THEN IF yildiz=0 THEN LCDOUT $FE,1,"GECERSIZ SIFRE" ELSE LCDOUT $FE,1,"YONETICI " LCDOUT $FE,$C0,"DEGILSINIZ" ENDIF FOR i=0 TO 3 PORTC=%00011000 PAUSE 60 PORTC=%00000000 PAUSE 30 NEXT i PAUSE 100 IF yildiz=1 THEN LCDOUT $FE,1,"KAPI SIFRESI " LCDOUT $FE,$C0,"GIRINIZ" PAUSE 500 ENDIF PORTC.3=0 LCDOUT $FE,1 GOSUB baslangic ENDIF IF tahmin=sifre THEN IF yildiz=0 THEN LCDOUT $FE,1 LCDOUT $FE,$80,"DOGRU SIFRE" LCDOUT $FE,$C0,"KAPI ACILDI" PORTC.5=1 PAUSE 500 PORTC.5=0 LCDOUT $FE,1 GOSUB baslangic ELSE LCDOUT $FE,1 LCDOUT $FE,$80,"DOGRU SIFRE" PORTC.5=1 PAUSE 500 PORTC.5=0 yaz=1 LCDOUT $FE,1,"YENI SIFRE GIR" LCDOUT $FE,$C0,"SIFRE=" PAUSE 10 ENDIF ENDIF yildiz=0 s=0 tahmin=0 GOSUB eepromdan_oku RETURN baslangic: 'başlangıç yönlendirme ekranı LCDOUT $FE,1,"SIFRENIZI GIRIN" LCDOUT $FE,$C0,"SIFRE=" PAUSE 10 RETURN eepromdan_oku: READ 1002,sifre.HIGHBYTE READ 1003,sifre.LOWBYTE RETURN eeproma_yaz: WRITE 1002,sifre.HIGHBYTE WRITE 1003,sifre.LOWBYTE RETURN

Dosyaları indirmek için tıklayınız...



Yorum Gönder

0 Yorumlar