Şifreli kilit yardım!!!

Başlatan İzmir35, 19 Mart 2014, 10:56:33

İzmir35

Arkadaşlar merhaba. ben şifreli kilit devresi yapmaya calısıyorum.. Suana kadar sıfreyı girip roleyi cektırebiliyom. sifremi keypad dan gırdıkten sonra role cekıyor. ben buna ılave olrak sıfremı degıstırmek ıstıyorum. bunun ıcın bır adet buton devresı bagladım. butona bastıgımda keypad dan sıfremı degıstırmek ıstıyorum . ama bunu bır turlu beceremedım.. pıc basıc da yazdıgım kodlar :

PortA=0
TrisA=%10000000
PortB=0
TrisB=%00111001
CMCON=7
OPTION_REG.7=0
SYMBOL BUZZER =PORTA.4
SYMBOL BUTON =PORTB.5
SYMBOL ROLE =PORTB.6
SYMBOL KAYIT=PORTB.1
  SYMBOL YATAY_A =PORTA.0
  SYMBOL YATAY_B =PORTA.1
  SYMBOL YATAY_C =PORTA.2
  SYMBOL YATAY_D =PORTA.3
  SYMBOL DIKEY_1=PORTB.0
  SYMBOL DIKEY_2=PORTB.3
  SYMBOL DIKEY_3=PORTB.4
   ADR VAR BYTE
  
  DAD VAR BYTE
 RAKAM VAR BYTE
 OKU VAR BYTE
 SIFRE VAR WORD
 TUS VAR BYTE
 ANA_MENU:
 SIFRE=0
 TUS=0
 ROLE=0
 BUZZER=1
 BUTON =0
 PAUSE 300
         LOW buzzer
         pause 2000
         HIGH buzzer
       DATA @10,123,124
Read 10,sifre.byte0 
Read 11,sifre.byte1 
if Sifre=65535 then 
sifre=$1234 
write 10,sifre.byte0:pause 10 
write 11,sifre.byte1:pause 10  
    
           ENDIF
 BASLA:       
        
        tus=255
       YATAY_A=0
       IF DIKEY_1=0 THEN
         TUS=1
        LOW buzzer
         pause 750
         HIGH buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
        
         IF DIKEY_2=0 THEN
           TUS=2
          low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_2=0:WEND
         ENDIF
         
       IF DIKEY_3=0 THEN
         TUS=3
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_3=0:WEND
       ENDIF
       
       HIGH YATAY_A
       
       YATAY_B=0
       IF DIKEY_1=0 THEN
         TUS=4
        low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
       
       IF DIKEY_2=0 THEN
         TUS=5
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_2=0:WEND
       ENDIF
       IF DIKEY_3=0 THEN
           TUS=6
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_3=0:WEND
       ENDIF
        
        HIGH YATAY_B
        
        YATAY_C=0
        IF DIKEY_1=0 THEN
          low buzzer
         pause 750
         high buzzer
          TUS=7
          low buzzer
         pause 750
         high buzzer
          WHILE DIKEY_1=0:WEND
        ENDIF
        
          IF DIKEY_2=0 THEN
            TUS=8
            low buzzer
         pause 750
         high buzzer
            WHILE DIKEY_2=0:WEND
          ENDIF
            IF DIKEY_3=0 THEN
              TUS=9
              low buzzer
         pause 750
         high buzzer
              WHILE DIKEY_3=0:WEND
            ENDIF
            
            HIGH YATAY_C
        
         YATAY_D=0
         IF DIKEY_1=0 THEN
           TUS=11
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_1=0:WEND
         ENDIF
         
           IF DIKEY_2=0 THEN
             TUS=0
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_2=0:WEND
           ENDIF
           IF DIKEY_3=0 THEN
             TUS=12
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_3=0:WEND
           ENDIF
            HIGH YATAY_D
            PAUSE 30
            IF TUS=10 THEN TUS=0
            IF TUS<13 THEN
              SIFRE=SIFRE*10+TUS
            ENDIF
            IF SIFRE=12352 THEN
              GOSUB ROLEAC
              SIFRE=0
            ENDIF
            IF SIFRE>10000 THEN SIFRE=0
            
            GOTO BASLA  
          
 ROLEAC:
            HIGH PORTB.6
            PAUSE 5000
            LOW PORTB.6
            PAUSE 5000
            RETURN
            IF BUTON=1 THEN 
   
       
       LOW PORTB.6
       PAUSE 2000
       ELSE
       HIGH BUZZER
       PAUSE PORTB.6
      ENDIF
         
             

          BASLA2:
           FOR   DAD = 8 TO 11
           HIGH DAD
           GOSUB DEGER2
           LOW DAD
           NEXT DAD
           GOTO BASLA2
           END
           DEGER2
             YATAY_A=0
       IF DIKEY_1=0 THEN
         TUS=1
        WHILE DIKEY_1=0:WEND
       ENDIF
        
         IF DIKEY_2=0 THEN
           TUS=2
           WHILE DIKEY_2=0:WEND
      ENDIF
         
       IF DIKEY_3=0 THEN
         TUS=3
         WHILE DIKEY_3=0:WEND
       ENDIF
       
       HIGH YATAY_A
       
       YATAY_B=0
       IF DIKEY_1=0 THEN
         TUS=4
       WHILE DIKEY_1=0:WEND
       ENDIF
       
       IF DIKEY_2=0 THEN
         TUS=5
         WHILE DIKEY_2=0:WEND
     ENDIF
        IF DIKEY_3=0 THEN
           TUS=6
           WHILE DIKEY_3=0:WEND
        ENDIF
        
        HIGH YATAY_B
        
        YATAY_C=0
        IF DIKEY_1=0 THEN
          TUS=7
          WHILE DIKEY_1=0:WEND
        ENDIF
        
          IF DIKEY_2=0 THEN
            TUS=8
            WHILE DIKEY_2=0:WEND
          ENDIF
            IF DIKEY_3=0 THEN
              TUS=9
              WHILE DIKEY_3=0:WEND
           ENDIF
            
            HIGH YATAY_C
        
         YATAY_D=0
         IF DIKEY_1=0 THEN
           TUS=11
           WHILE DIKEY_1=0:WEND
        ENDIF
         
          IF DIKEY_2=0 THEN
           TUS=0
            WHILE DIKEY_2=0:WEND
           ENDIF
           IF DIKEY_3=0 THEN
           TUS=12
            WHILE DIKEY_3=0:WEND
           ENDIF
            HIGH YATAY_D
            PAUSE 30
           IF TUS=10 THEN TUS=0
           
           IF TUS<13 THEN
            SIFRE=SIFRE*10+TUS
             IF SIFRE>10000 THEN SIFRE=0
           read 10,SIFRE
                   endif
IF SIFRE=255 THEN

WRITE 10,SIFRE
pause 10   
           ENDIF
            RETURN

kudretuzuner

Merhaba,
Yazılım dilini pek bilmiyorum.1234 yerine($ değiştirmeden)istediğiniz rakkamları yazarsanız olur diye TAHMİN ediyorum.
sifre=$1234
Amatör

İzmir35

nasıl yanı ..  anlamadım. kullancı sıfresınını gıryor.1234# daha sonra degıstırmek ıstıyor. orda portb.5 baglı bır tane bton var ona basacak. sıfresını degıstırcek. butona bastıgında eskı sıfreyı gıreecek. daha sonra yenı sıfre gırıp onaylıcak bunu yapmak ısıtıyom . ben sadece degısstırme ıslemını yapamadım

emre salman

hocam kodları biraz inceledim sizin programlama mantığınızda biraz  yanlıs var öncelikle sanırım dogru anladıysam
                IF SIFRE=12352 THEN
              GOSUB ROLEAC
              SIFRE=0
            ENDIF

sifre 12352 ise role ac diyorsunuz burdaki 12352 yi değişkenle yapmanız lazım yani mesela Emre var byte
emre = 12352

daha sonra şifre değiştirme kısmında keypadden girelen değerleri en son emre değişkenine atamanız gerekiyor

daha önce ben yapmıstım şuan dosyaları bulamadım ama bulabilirsem koyarım buraya

İzmir35

hocam benım demek ıstedıgım sıfre :1234# ise gosub roleac gıt ordakı roleyı 5sn aktıf et sonra kapan. sizin elınızde nasıl bır calsıma var hocam. ben programı derledıgımde hata vermıyor yanlız sıfremı degıstıemıyom. nasıl yapmam gerekıyor hocam??