4x3 Keypad tuş basıp bırakma kontrolü

Başlatan javax1, 07 Kasım 2013, 23:03:46

javax1

Merhaba Arkadaşlar,  4x3 keypad üzerinden basılan tuş 7 segment display'de görünecek. Look-up table yapısını kullandım. Sorunum şu: keypad üzerindeki tuşa basılı tuttuğum zaman display üzerinde tuşun değeri yanıp sönüyor(kesik kesik). Elimi çektiğim zaman ise display sönüyor. Bana lazım olan ise : 1 kere tuşa basıp bıraktığımda displayde değeri gözükecek, başka bir tuşa basıp bırakırsam o tuşun değeri displayde gözükecek.

   list p=16F877A
   #include <P16F877A.inc>
Sayac EQU 0x20
   ORG 0x00
   GOTO ana
   ORG 0x04
row
   INCF Sayac,1
   BTFSS PORTB, 0
   GOTO TusBas
   
   INCF Sayac,1
   BTFSS PORTB, 1
   GOTO TusBas

   INCF Sayac,1
   BTFSS PORTB, 2
   GOTO TusBas
   GOTO next
tara
   CLRF Sayac
   BSF STATUS, 0
   BCF PORTB, 4
newrow
   GOTO row
next
   BSF PORTB, 3
   RLF PORTB,1
   BTFSC STATUS, 0
   GOTO newrow
   GOTO tara

TusBas   RETURN

tablo
   MOVF Sayac, W
   ADDWF PCL,1
   NOP
   RETLW b'00000110'
   RETLW b'01011011'
   RETLW b'01001111'
   RETLW b'01100110'
   RETLW b'01101101'
   RETLW b'01111101'
   RETLW b'00000111'
   RETLW b'01111111'
   RETLW b'01101111'
   RETLW b'11110110'
   RETLW b'00111111'
   RETLW b'10010010'
goster
   CALL tablo
   MOVWF PORTC
   RETURN
ana
   MOVLW 0xFF
   MOVWF PORTB
   BSF STATUS, 5
   CLRF TRISC
   MOVLW B'00001111'
   MOVWF TRISB
   BSF INTCON, 7
   BSF INTCON, 3
   BSF OPTION_REG, 7
   BCF STATUS, 5
   CLRF PORTC
   CALL tara
   CALL goster
   GOTO ana
   END

drozk

#1
Programın ana döngüsü sürekli portc'yi sildiği için tuş değeri göstergede kalmıyor. Aşağıdaki gibi değiştirirseniz düzelecektir.

Alıntı Yapana
   MOVLW 0xFF
   MOVWF PORTB
   BSF STATUS, 5
   CLRF TRISC
   MOVLW B'00001111'
   MOVWF TRISB
   BSF INTCON, 7
   BSF INTCON, 3
   BSF OPTION_REG, 7
   BCF STATUS, 5
   CLRF PORTC
tekrar 
   CALL tara
   CALL goster
   GOTO tekrar
   END

javax1

#2
drozk :  Hocam senin dediğin gibi yaptım tüm tuşlar sadece 1-2-3 için işliyor

1->1
2->2
3->3

4->1
5->2
6->3

7->1
8->2
9->3

olarak displayde gözüküyor. Sanırım bu sayaçta bir şey var look-up tablosu sayaça göre çekiyor çünkü.?

Senin dediğinden önce sadece ana programda CLRF PORTC yazan satırı sildim. Oldu gibi tüm tuşlar basıyordu. Fakat şöyle bir sorun vardı. 9-8-7....3 'e kadar geri geri bastım. Fakat sanki 1. satırdaki tuşlara basınca program şaşırıyordu. tuşlar basmaya başlıyor, tıkanıyor vs...

drozk

B portunun 3. bitini de çıkış yapıp deneyin. tararken o biti set edip sola kaydırıyorsunuz. işlemci kaydırmadan önce portu okuyup kaydırma işlemini yapar. 3. bit giriş olduğu için sıfır okuyor olabilir. sıfır okuduğu için kaydırınca 4. bit sıfır olur. sürekli 1,2,3 gösterir.

javax1

Hocam o şekilde yapınca program kitleniyor. Gene 1-2-3 şeklinde sayıyor sanırım. 4.tuşa basınca 1 yazıyor ve sonra diğer tuşlara basmaya izin vermiyor.

şu şekilde yapınca:

ana programda

MOVLW B'00000111'
MOVWF TRISB