Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

4*3 Keypad Tanıtımı

Başlatan msimsek23, 27 Eylül 2003, 22:19:12

msimsek23

Arkadaşlar şifreli kilit projesi yapmaya çalışan biri olarak pic basic pro'da keypad'in pic'e nasıl tanıtıldığını anlamış değilim.Bana komut ve örneklerle birileri anlatabilirse çok minnettar olucam.Şimdiden teşekkür ederim.....

mhk

http://groups.yahoo.com/group/PicProjeUP/files/MHK/  adresindeki 4x4 KEYPAD LCD uygulaması.zip dosyasını indirip incelersen aradığını bulabilirsin sanırım. İyi çalışmalar.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

fsan

daha sonra birde   buraya bakabilirsin

msimsek23

arkadaşlar yardımlarınız için teşekkür ederimde ben bu yahoo group'a dahil edilmiş miyim acaba?giremiyorumda?Bide kullandığım keypad 4*3 yani 4 satır ve 3 kolon var toplam 7 giriş yani.Ama elimdeki keypad'da 8 tane çıkış var?o bir fazlalık neyin nesi ve bu  1'den 8'e kadar olan hanelerden hangileri satır hangileri sütun?Şimdiden sağolun....

james

1.ucu kullanmıyosun.
2,3,4 sutun1,2,3
5,6,7,8 satır 1,2,3,4
ARAMIYORUM , BULUYORUM

mhk

Verdiğim yahoo groups lara üye olmak zor değil. Yahoo dan mail adresin varsa oraya yazdığın kullanıcı adı ve şifresi ile giriş yapabilirsin. Yahoo dan mail adresin yoksa alman gerekecek.Buda zor değil ;)
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mukoali

slm fsan
senin key pad uygulamanı ben şifreli kilit için kullanmak istiyorum ancak 1 tuşa basıldığını algılatmama

rağmen 1 tuşa 2.kez basılmasını bir türlü algılattıramadım bu konuda yardımlarını bekliyorum a=a+1 mantığını bir türlü burada çalıştıramadım

fsan

selam,
bak dostum burada bazi yeni komutlar ekledim proteuste simule et göreceksin

Define 

 LCD_DREG       PORTD 
Define  LCD_DBIT	    4
Define  LCD_RSREG      PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG       PORTE
Define  LCD_EBIT   

   	1

ADCON1 = 7 		   ' PORTA AND PORTE DIGITAL
OPTION_REG.7 = 0   ' PORTB Pullups.

TRISB = %11110000  ' PORTB 0-3 output, 4-7 input  


PORTB = 0
TRISC = 0
PORTC = 1

'*******************
keybuf var byte[4]
keycnt var byte
for keycnt = 0 to 4
    

keybuf[keycnt] = 0
next
'*******************

key  var byte
col  var byte
row  var byte
delay var byte

delay = 0

pause 100        


lcdout $fe,1,"4X4-KEYPAD DEMO",$fe,$c0,"2003 - by F.San" 

Main:
    gosub Chk_KEYPAD
    if PORTC = 0 then PORTC = 1
    

if delay = 100 then PORTC = PORTC << 1
    delay  = delay + 1
    pause 1
goto Main

Chk_KEYPAD:
    for col = 0 to 3 
        PORTB = (dcd 

col) ^ $f    
        row = PORTB >> 4
        if row != $f then   ' key pressed 
            key = (col * 4) + (ncd (row ^ $f))
            

gosub DeBounce
            gosub Got_KEY
            key = 0
        endif
    next 
return    

DeBounce:
    delay = 0
    while (row != $f) and 

(delay < 20) 
        pause 10
        delay = delay + 1 
    wend
    delay = 0
return

Got_KEY:
    'lcdout $fe,1,"4X4-KEYPAD 

DEMO",$fe,$c0,"BUTTON: ",#key
    PORTC = key

'*******************
    if keycnt > 3 then 
       lcdout $fe,1
       keycnt = 0
    

endif
    keybuf[keycnt] = key
    lcdout #keybuf[keycnt] 
    keycnt = keycnt + 1
'*******************
return

end

mukoali

teşekkürler dostum birde bunu deneyecem inşaallah olur

fsan

kardes,
girilmesi istenen şifre 4 rakam olacaksa:

şifre var byte[4]

şifre[0] = 1
şifre[1] =

9
şifre[2] = 8
şifre[3] = 0

'burada ben şifreyi array degiskene "1980", yaptim ama sen istersen bu degerleri bir eeproma keypad dan grilen degerlerle WRITE (kayit) edip

daha sonra burada READ komutu ile doldurursun.    
*************************************************************
şifrenin dogru olup olmadigini kotrol etmek istersen
if keycnt = 3

then
if (keybuf[0] = şifre[0]) and  (keybuf[1] = şifre[1]) and (keybuf[2] = şifre[2]) and (keybuf[3] = şifre[3]) then
goto Gris_OK
else
lcdout "Yanlis

Sifre!"
endif
endif

mukoali

sağolasın fsan yardımların çok işime yaradı
ben ilk şifre girişini pic enerjilendikten sonra pad den girilsin istiyordum

ama bu anasıl olacak orayı aşamadım
data komutu ile gireyim sonra değiştireyim dediğimde ise picin enrjisi kesilip yeniden açıldığında write la yazılan şifre geçersiz oluyor data ile yazılan

kalıyor yanlışım varsa düzeltirsen memnun olurum

fsan

dostum,
picbasic pro manual da yazildigi gibi:

DATA, veya EEPROM komutlari eeproma default start

values koymak icin, yani PIC'i bir programmer hardware ile programlarken istedigin degerleri bu komutlarla belirlenen eeprom adreslere yaziyor daha sonra bukomutlar bir ise

yaramiyor.

PIC calisma esnasinda bu adreslere yazdigin degerleri degistirmek istersen: WRITE address, value veya okumak istersen: READ address, variable

adamlar sag

olsunlar harika bir yöntemle isleri bizim icin kolaylastirmislar.

mukoali

ya arkadaşım seni de yoruyorum ama bu kontrol olayını çalıştıramadım proteus deniyorum bir türlü doğru şifre

kombinasyonun da geçmiyor hatam nerde gösterebilirmisin

porta.2 doğru çıkışta aktif olacak
port b ler keypade bağlı

OPTION_REG.7= 0   ' PORTB Pullups.



TRISB = %11110000  ' PORTB 0-3 output, 4-7 input  
PORTB = 0
TRISA = 0
PORTA = 0

'*******************
keybuf var byte[4]
şifre var

byte[4]
keycnt var byte

'*******************
a var byte
b var byte
c var byte
d var byte

temp0 var byte
temp1 var byte
temp2 var

byte
temp3 var byte
temp4 var byte

sif0 var byte
sif1 var byte
sif2 var byte
sif3 var byte

key  var byte
col  var byte
row  var byte
delay

var byte

şifre[0] =1
şifre[1] =1
şifre[2] =1
şifre[3] =1

d=10
delay = 0
a=0
keycnt=0
temp4=0


;gosub

sifirla

sifoku:
;read 0,temp0
;read 1,temp1
;read 2,temp2
;read 3,temp3
;read 4,temp4

pause 10      

gosub bufersil

Main:

 

  gosub Chk_KEYPAD

   if keycnt = 4 then gosub control1
   

   if c=15 then control
   
   if delay = 100 then b=1
   delay  = delay + 1
 
   


goto Main

Chk_KEYPAD:

    for col = 0 to 3
       PORTB = (dcd col) ^ $f    
       row = PORTB >> 4
       if row != $f then   ' key pressed


           key = (col * 4) + (ncd (row ^ $f))

bekle:if portb.4=0 or portb.5=0 or portb.6=0 then bekle

           gosub DeBounce
           gosub Got_KEY
           key

= 0
       endif
   next
return    

DeBounce:
   delay = 0
   while (row != $f) and (delay < 20)
       pause 15
       delay = delay + 1
   wend


   delay = 0
return

Got_KEY:
 
  c=key
if keycnt > 3 then
     keycnt = 0
   endif
   keybuf[keycnt] = key
   c = key
   keycnt =

keycnt + 1
return

bufersil:
keycnt=0
for keycnt = 0 to 4
   keybuf[keycnt] = 0
next
return

control:
if a=1 then high porta.2:end
;if d=0

then goto sifdegis1
;if d=1 then gosub şifreonay
gosub bufersil
goto main

control1:
if (keybuf[0] = şifre[0]) and (keybuf[1] = şifre[1]) and (keybuf[2] = şifre[2]) and

(keybuf[3] = şifre[3]) then a=1:porta.1=1
return

şeklinde devam ediyor burda bile dpğru şifreyi girince # basılınca porta.2 çekecek ama olmadı bir türlü

fsan

Alıntı Yapif keycnt = 4 then gosub control1
burada keycnt=4 oluyormu? yoksa 0,1,2.3 mü

oluyor bir bak.

Alıntı Yapcontrol:
if a=1 then high porta.2:end
burada sonuna "end" yazmissin ? "endif" mi

olacakti?

Alıntı Yapcontrol1:
if (keybuf[0] = şifre[0]) and (keybuf[1] = şifre[1]) and (keybuf[2] = şifre[2]) and (keybuf[3] = şifre[3]) then a=1:porta.1=1


":porta.1=1" den sonra "endif" olmasi gerekmiyormu?

**************
control1:
if (keybuf[0] = şifre[0]) and (keybuf[1] = şifre[1]) and

(keybuf[2] = şifre[2]) and (keybuf[3] = şifre[3]) then
a=1:porta.1=1
endif
return
*************'

mukoali

control1:
if (keybuf[0] = şifre[0]) and (keybuf[1] = şifre[1]) and (keybuf[2] = şifre[2]) and (keybuf[3] = şifre[3]) then


a=1:porta.1=1
endif
return

aynen yaptım bir fark yok endif olsada hata vermiyor olmasada
ama sonuç hala doğru şifreyi yazınca portb.2 çalışmıyor

if

keycnt = 4 then gosub control1

3 olunca 3.tuşdan sonra control1 gidiyor 4 olunca 4 .tuşdan sonra gidiyor

if a=1 then high porta.2:end

burdaki end ise  porta.2 deki

led yanınca prg durması için şimdilik

sonuç olarak hatamı bulamadım  başka ne olabilir