basıt sifrelı kılit

Başlatan Şahin35, 05 Mart 2014, 11:53:21

Şahin35

#15
anladım hocam. proteusta cızdıgım devreyı tekrar koyuyorum hocam. benım uln2003 gırıslerını bırlestırmemdekı amac cıkısına koacagım bobının 3 amper cekıyor olmasıdır. oyuzden gırıslerı bırlestırıp tek cıkıs yaptım. datashett uln2003 tek bacak 250mA cekıyor . bırlestırdıgımde ıse ıstedıgım amperı alıyorum hocam. sımdı sıze tekrardan proteusta cızdıgım devreyı koyucam hocam. ve yazılı olan programı hocam. acaba gırıslerı tanımlamada yanlıslık mı yapıldı dıye keypad algılamıyor . ve hıcbır ıslem yapmıyor hocam. proeusta gerılım varsa kırmızı yanı 5 v gelıyor yoksa mavı gnd oluyor ya hocam. sımıslasyon yaptıgımda sıyah kutucuga aldıgım hatta kırmızı yanıyor. dıger hatlarda hep mavı yanıyor hocam. tuslara bassamda mavılık degısmıyor. :( anlamadım hocam devrem mantıken dogru ama hatam nerde ...  :( :( :(

bu da program hocam ;
PortA=0
TrisA=%10000000
PortB=0
TrisB=%00000111
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
RAKAM VAR BYTE
OKU VAR BYTE
SIFRE VAR WORD
TUS VAR BYTE
ANA_MENU:
SIFRE=0
TUS=0
ROLE=0
BUZZER=0
BUTON =0
PAUSE 300
BASLA:
   
     
       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<11 THEN
              SIFRE=SIFRE*10+TUS
            ENDIF
            IF SIFRE=1234 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


ete

#16
Resim zaten koymuştun , bir daha koymak gerekemez. 
Hiç düşünüyormusun o resimdeki devreyi yeniden çizip oluşturmak ne kadar zamanımı alır. ?
Düşünmediğin belli Yeniden çizemem doğrusu.

Kodları da vermen gerekmiyordu. Zaten verdim hemde iki defa sitede kirliklik yaratıyor bu tür şeyler
Bir sürü lüzumsuz bilgi. Bu şekilde her şeyi yeniden doldurursak kısa zamanda yer sorunumuz olabilir .

Kodları verirken benim yaptığım giib Code Tag kullan. Mesaj yazarken yukarıda yer alan # tuşuna tıkla araya mesajını kopyala olsun bitsin.

Birazcık kod takip etmeyi ve ortaya çıkan durum karşısından neden böyle olabilir diye muhakeme etmeyide öğrenmelisin.
Sonuçta her şey kafa çalıştırmaya dayanıyor.
Mavilik hiç gitmiyor diyorsun bir düşün bakalım neden olabilir. ?  Nedeni gayet basit çünki o pinler giriş pini olmasına rağmen giriş olarak atanmamış demektir. Bak bakalım TRISB registerine ne değer verilmiş! %00000111 değeri verilmiş. Peki ne verilmesi gerekir TX pini Out , RX pini Input olacak şekilde %00011011 şeklinde değer vermen gerekmezmi?

Şimdi birazda koda bakalım. Tuş değeri bir tuşa basılınca değişecek ancak bastıktan sonra tuş değerini bir başka değere değiştirmez isen SIFRE sürekli değer değiştirir. O halde en başa yani tuş takımının kontrol edildiğı yerin başına TUS=255 koymak gerekir ki her tuşa basılışta tuş yeni bir değer alsın almamış ise de Sifre TUS<11 dediğimiz için TUS=255 olunca onu değerlendirmesin.

Buda tamam başkada bir şey yok sanırım.

Ete

Şahin35

İlginize ve alakanıza cok tesekkur ederım hocam oldu..pekı hocam dıyelım sıfrem 1234# oldugunda ordakı # ısaretı nasıl yapıcam oraya ne yazıcam hocam.ben suan 1234 de bastıgımda sıfre calıyosr.  sıgremı degıstrımek ıstedıgımde ne ypmam gerekıyor. ve bunu hafızada bu sekıl mı tutucam hocam
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
bunu tus takımının sonuna yerlestırmem gerkıyor deme hocam..

ete

# işareti yalnızca görsel bir işarettir. Programında ona ait komut zaten var. Tuş değeri senin programda 12 dir.
1234# şeklinde bir şifre tanımlamak istersen ufak bir değişiklik gerekiyor.
            IF TUS<11 THEN
              SIFRE=SIFRE*10+TUS
            ENDIF
            IF SIFRE=12345 or sifre=12352 THEN
              GOSUB ROLEAC
              SIFRE=0
            ENDIF

komut satırlarını bul.  TUS<11 yerine TUS<13 yaz böylece 11 (*) ve 12 (#) nolu tuslarıda hesaba dahil etmiş olalım.
Bu durumda şifre değerin en sonda 12 tuşuna basarsan 1234*10+12=12352 olacaktır.  Bu durumda karşılaştırmayıda,
IF SIFRE=12352 THEN  şeklinde değiştirirsen yeni şifren 1234# olacaktır.

Bu şifreyi kayıt etmek için silinmeden önce yani SIFRE=0 demeden önce kayıt etmen gerekiyor. ANcak girilecek şifreyi neden kayıt ediyorsun onu bilemiyorum. Bu mantıklı değil. Şifre karşılığını değiştirip kayıt etmek istersen o zaman iş değişiyor. Programa bir menü ilave etmen gereki ki buda LCD ister olmadan olmaz.

Ama şifre karşılığını eproma kayıt edip programınbaşında oradan okutayım dersen o başka.
O zaman programın başlarında bir yere ;
DATA @10,48,64
satırını ilave et bu şifrenin 12352 olduğunu gösteriyor.
BASLA satırından evvel olan kısmına ,
READ 10,KOD.byte1,KOD,byte0
Programın karşılaştırma kısmınada IF SIFRE=12352 yerine IF SIFRE=KOD  yazıp bırak böylece şifre karşılığı epromdan okunmuş olur.
Bu durumda DATA... satırına ne yazarsan şifre karşılığın o olmuş olur.

Ete



Şahin35

hocam ozur dılerım . yanlıs sordum sorumu . benım amac devremde buton varya hocam. ben butona 3 sn bastıgımda  buzzer otucek ve ben yenı sıfremı gırıcem hocam .bıde hocam devreyı calsıtırdıgımda sıfremı gırıyorum sounder otuyor ve 5 sn sonra susuyor. ama ben tekrar sıfremı gırdıgımde ıslem yapmıyor. bende programı acıp kapatıyorum o zaman normale donuyor.birde hocam dıyelım bız 1234# dedık. ben sıfremı degıstırmek ıstedım. butona bastım 3 sn sonra buzzer ottu yenı sfıremı gırcem. bu sefer 7 karaktr olsun ıstedım.1234567# olsun ıstedım  .onun ıcın bıtlerımı degıtırcem hocam yoksa, bır degısken daha atayım ılk dort bır yanda dıger 4 bır yanda mı saklanıyor hoacam nasıl oluyor hocam ...

ete

Bütün projeyi bana yaptırmayı düşünmüyorsun sanırım. Gerisini kendin halledeceksin artık.
Ete

Şahin35

yok hocam komutları bılıyom ama nerde nasıl kullanacagımı bılmıyom. mesela buton la ılgılıde hocam ;
ıf portb.5 =0 then gosub deg
dıcem program butoan basıldıgında buraya dallanacak..
deg:
buray ıste oncelıkle eskı sıfreyı gırıcem ve bu sıfreyı eeprom yazmam lasım daha sonra burda okucam read ve write komutu ıle yapıcam .
  Read 10,sifre.byte0
Read 11,sifre.byte1
if Sifre=65535 then
sifre=$12352
write 10,sifre.byte0:pause 10
write 11,sifre.byte1:pause 10
endif

bunu yazıcam hocam.eskı sıfremı gırdıkten sonra hıgh porta.4 pause 1000 low porta.4 dıcem . buzzer burda 1 sanıye otucek.sonra yenı sıfremı gırıcem ve sıfrem onay aldı mı hıgh porta.4 pause 2000 low porta.4 return dıyecem hocam.ama gel gelelım kı yapbozu bırlestırmekte zorlanıyorum .:( :( :'(

Powered by EzPortal