devre bağlantı şeması

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 4>'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...
0 Yorumlar