'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [E.T.E] * '* Notice : Copyright (c) 2005 Ete] * '* : All Rights Reserved * '* Date : 02.06.2005 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** PORTA=0:PORTB=0 TRISB=%00000001 'PortB.0 giriş diğerleri çıkış yapıldı. TRISA=%00111111 'A portu tamamı çıkış yapıldı. '----------------------------------------------------------------- @ DEVICE pic16F628 'işlemci 16F628 @ DEVICE pic16F628, WDT_OFF 'Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON 'Power on timer açık @ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı @ DEVICE pic16F628, MCLR_OFF 'MCLR pini kullanılıyor. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak '----------------------------------------------------------------- CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş çıkış '----------------------------------------------------------------- SIFRE VAR WORD RAKAM var WORD TEMP VAR WORD BASKA VAR WORD ZAMAN VAR WORD SURE VAR word SAYAC VAR BYTE SAYI VAR BYTE DURUM VAR BYTE BIRLER VAR BYTE ONLAR VAR BYTE YUZLER VAR BYTE BINLER VAR BYTE ZIL VAR BYTE 'ÇALACAK ZİL ADEDİ X VAR BYTE CIK VAR BIT YAZ var BIT SYMBOL HAT=PORTB.0 SYMBOL CIKIS1=PORTB.1 SYMBOL CIKIS2=PORTB.2 SYMBOL CIKIS3=PORTB.3 symbol CIKIS4=PORTB.4 SYMBOL CIKIS5=PORTB.5 SYMBOL CIKIS6=PORTB.6 SYMBOL ROLE=PORTB.7 SYMBOL VALDAT=PORTA.0 SYMBOL BUZZER=PORTA.7 '-------------------------------------------------------------------------- 'DATA @ 0,1,2,3,4 'data @ 0,255,255,255,255,255 DATA @ 16,5 PAUSE 200 CLEAR read 0,SAYI:PAUSE 10 IF SAYI=$FF THEN SIFRE=2580 'şifre değişirken buradaki şifre yerine yenisi yazılacak GOSUB SIFREYAZ endIF READ 0,BINLER READ 1,YUZLER READ 2,ONLAR READ 3,BIRLER SIFRE=BINLER*1000+YUZLER*100+ONLAR*10+BIRLER READ 16,ZIL IF ZIL=255 THEN ZIL=5 WRITE 16,ZIL ENDIF read 10,durum IF DURUM=255 then DURUM=0 GOSUB ROLEYAZ ENDIF PORTB=durum '--------------------------------------ANA-------------------------------------- BASLA: Sayac=0 '-------------------------------PORTB.0=HIGH------------- ILK: IF HAT=1 THEN ILK '------------------------------PORTB.0=LOW--------------- BAK: SAYAC=SAYAC+1 BIR: IF HAT=0 THEN BIR '------------------------------PORTB.0=LOW----------------- IF SAYAC=ZIL THEN PAUSE 1800 HIGH ROLE pause 300 GOTO BIRINCI ENDIF SURE=0 WHILE HAT=1 SURE=SURE+1 IF SURE=300 THEN ILK PAUSE 1 WEND IF SURE<100 THEN BIR GOTO BAK '------------------ZİL SAYMA BÖLÜMÜ BİTTİ------------------ BIRINCI: :SAYAC=0:GOSUB SES1:GOSUB SES2:gosub ses1 YINE: RAKAM=0:GOSUB SIFREAL IF CIK=1 THEN BITIR 'süre aşımı olmuş ise IF RAKAM=2006 THEN 'yedek şifre olan 2006 buradan değiştirilecek. SIFRE=2580 'şifre değiştirilirken buradaki 2580 yerine yenisi yazılacak. GOSUB SES2 GOSUB SES1 GOSUB SES2:gosub ses1 GOSUB SIFREYAZ GOTO ROLEKONTROL ENDIF IF RAKAM=SIFRE THEN GOSUB SES2:pause 50 GOSUB SES1:pause 50 GOSUB SES1:gosub ses1 GOTO ROLEKONTROL ENDIF SAYAC=SAYAC+1 IF SAYAC=3 THEN '3 defa yanlış şifre girilebilir fazlasında bloke olur ATLA: GOSUB EXIT SLEEP 600 '600 sn bloke olacak. GOTO BASLA ENDIF GOSUB SES2 GOSUB SES1 GOSUB SES3 GOTO YINE ROLEKONTROL: IF YAZ=1 then gosub ROLEYAZ GOSUB ALBILGI IF CIK=1 THEN BITIR 'süre aşımı olmuş ise IF SAYI=12 THEN ACMA '# '# tuşuna basılmış ise açma ya git IF SAYI=11 THEN KAPAT '* '* tuşuna basılmış ise kapatmaya git. gosub ses2:gosub ses3 GOTO ROLEKONTROL ACMA: GOSUB ALBILGI IF CIk=1 THEN BITIR IF SAYI=0 THEN 'sıfır tuşuna basılmış ise çık ve tekrar başa git gosub ses3 GOSUB EXIT GOTO BASLA ENDIF DURUM=PORTB IF SAYI=1 THEN IF durum.1=0 THEN GOSUB SES1:YAZ=1 PORTB=DURUM | %00000010 '1 tuşuna basılınca 1 nolu çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=2 THEN IF durum.2=0 THEN GOSUB SES1:GOSUB SES1:YAZ=1 PORTB=DURUM | %00000100 '2 tuşuna basılınca 2. ci çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=3 THEN IF durum.3=0 THEN FOR X=1 TO 3:GOSUB SES1:NEXT YAZ=1 PORTB=DURUM | %00001000 '3 tuşuna basılınca 3. çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=4 THEN IF durum.4=0 THEN FOR X=1 TO 4:GOSUB SES1:NEXT YAZ=1 PORTB=DURUM | %00010000 '4 tuşuna basılınca 4. çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=5 THEN IF durum.5=0 THEN FOR X=1 TO 5:GOSUB SES1:NEXT YAZ=1 PORTB=DURUM | %00100000 '#5 '5 tuşuna basılınca 5. çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=6 THEN IF durum.6=0 THEN FOR X=1 TO 6:GOSUB SES1:NEXT YAZ=1 PORTB=DURUM | %01000000 '#6 '6 tuşuna basılınca 6. çıkışı aç goto ROLEKONTROL ENDIF ENDIF IF SAYI=8 THEN '#8 GOSUB SES2 GOSUB ALBILGI GOSUB SES1:gosub ses2 '8 tuşuna basılırsa zil çalma sayısını yeniden IF CIK=1 THEN BITIR 'gir ve yeni girilen 1-13 arası rakamı yeni IF SAYI>0 AND SAYI<13 THEN 'zil çalma adedi olarak eproma yaz. ZIL=SAYI:WRITE 16,ZIL:PAUSE 10 ENDIF GOTO ROLEKONTROL ENDIF IF SAYI=9 THEN '#9 GOSUB SIFREAL '9 rakamı girilirse GOSUB SES1:gosub ses2 IF CIK=1 THEN BITIR IF RAKAM=SIFRE THEN 'önce eski şifreyi gir GOSUB SES1:GOSUB SES1:GOSUB SES2 GOSUB SIFREAL 'sonra yeni şifreyi gir IF CIK=1 THEN BITIR SIFRE=RAKAM GOSUB SES1:gosub ses2 gosub SIFREYAZ 'yeni şifreyi eproma kayıt et. ENDIF ENDIF GOTO ROLEKONTROL KAPAT: GOSUB ALBILGI 'önce * tuşuna basılmış ise program buraya gelir IF CIK=1 THEN BITIR durum=PORTB IF SAYI=0 THEN 'sıfır tuşuna basılmış ise her şeyi kapat GOSUB SES3 PORTB=DURUM & %10000001 '*0 ENDIF IF SAYI=1 THEN '1 tuşuna basılmış ise 1. çıkışı kapat IF durum.1=1 THEN GOSUB SES2:YAZ=1 PORTB=DURUM & %11111101 goto ROLEKONTROL ENDIF ENDIF IF SAYI=2 THEN '2 tuşuna basılmış ise 2. çıkışı kapat IF durum.2=1 THEN GOSUB SES2:GOSUB SES2 YAZ=1 PORTB=DURUM & %11111011 goto ROLEKONTROL ENDIF ENDIF IF SAYI=3 THEN '3 tuşuna basılmış ise 3. çıkışı kapat IF durum.3=1 THEN FOR X=1 TO 3:GOSUB SES2:NEXT YAZ=1 PORTB=DURUM & %11110111 goto ROLEKONTROL ENDIF ENDIF IF SAYI=4 THEN '4 tuşuna basılmış ise 4. çıkışı kapat IF durum.4=1 THEN FOR X=1 TO 4:GOSUB SES2:NEXT YAZ=1 PORTB=DURUM & %11101111 goto ROLEKONTROL ENDIF endif IF SAYI=5 THEN '5. tuşuna basılmış ise 5. çıkışı kapat IF durum.5=1 THEN FOR X=1 TO 5:GOSUB SES2:NEXT YAZ=1 PORTB=DURUM & %11011111 '*5 ENDIF ENDIF IF SAYI=6 THEN '6 tuşuna basılmış ise 6. çıkışı kapat. IF durum.6=1 THEN FOR X=1 TO 6:GOSUB SES2:NEXT YAZ=1 PORTB=DURUM & %10111111 '*6 ENDIF ENDIF GOTO ROLEKONTROL SIFREAL: GOSUB ALBILGI IF CIK=1 THEN RETURN RAKAM=SAYI*1000 GOSUB ALBILGI IF CIK=1 THEN RETURN RAKAM=RAKAM+SAYI*100 GOSUB ALBILGI IF CIK=1 THEN RETURN RAKAM=RAKAM+SAYI*10 GOSUB ALBILGI IF CIK=1 THEN RETURN RAKAM=RAKAM+SAYI RETURN ALBILGI: SURE=0:ZAMAN=0 WHILE VALDAT=0 SURE=SURE+1 PAUSEus 270 IF SURE=65500 THEN CIK=1:RETURN ENDIF WEND SAYIAL: SAYI=0 WHILE VALDAT=1 SAYI.0=PORTA.4 SAYI.1=PORTA.3 SAYI.2=PORTA.2 SAYI.3=PORTA.1 WEND IF SAYI=10 THEN SAYI=0 RETURN SIFREYAZ:TEMP=SIFRE BINLER=TEMP DIG 3 YUZLER=TEMP DIG 2 ONLAR =TEMP DIG 1 BIRLER=TEMP DIG 0 WRITE 0,BINLER:PAUSE 10 WRITE 1,YUZLER:PAUSE 10 WRITE 2,ONLAR :PAUSE 10 WRITE 3,BIRLER:PAUSE 10 RETURN ROLEYAZ: DURUM=PORTB & %01111110 WRITE 10,durum YAZ=0 return SES1: SOUND BUZZER,[110,12]:pause 130:RETURN SES2: SOUND BUZZER,[95,12] :pause 130:RETURN SES3: SOUND BUZZER,[85,25] :Pause 130:RETURN BITIR: GOSUB EXIT:GOTO BASLA:RETURN EXIT : SURE=0 HAT=0 CIK=0 SAYAC=0 RAKAM=0 LOW ROLE ' LOW ISD gosub ses2 gosub ses2 GOSUB SES3 GOSUB SES3 RETURN End