PDA

View Full Version : chống rung nút nhấn


hahahaa3pro
18-11-2009, 10:50 PM
SCAN_BUTTON

movff key2,key3
movff key1,key2
movff PORTD,key1
movff key1,W ; W=key1
cpfseq key2 ;key2 = key1 -> bo qua lenh tiep theo
goto EXIT_SCAN
cpfseq key3 ;key3 =key1 -> bo qua lenh tiep theo
goto EXIT_SCAN

dcfsnz timeout ;bo qua lenh tiep theo neu khac 0 ( neu =0 thi lam)
call clear_key
movff key,W ; key la bien luu gia tri cua nut khi dc nhan
cpfseq key1 ; bo qua lenh ke tiep neu = W
goto SCAN_BUTTON1
goto EXIT_SCAN
SCAN_BUTTON1
movff key1,key
movlw .1
cpfseq flag ;neu flag = 1, nhan lan dau tien
goto LANSAU
movlw .100
movwf timeout
INCF PORTB
movlw .0
movwf flag
EXIT_SCAN
return
LANSAU
movlw .0
cpfseq key1
goto subkey
movlw .1
movwf flag
return
subkey
movlw .100
movwf timeout
INCF PORTB
return

Đây là đoạn code chống rung phím nhấn và kiểm tra phím bị đè.
Ý tưởng là sử dụng ngắt. Cứ 10ms thì sẽ kt giá trị nút nhấn. Nếu 3 lần như nhau thì nút được nhấn và tăng PORTB lên 1. Nếu nút bị đè thì sau tg là 1s mới tích cực lại nút nhấn.
Chương trình này mình test trên protues thì chạy sai. Nếu mà nhấn 1 lần thì PortB nó tăng lên 6,7 :|
Hi vọng các bạn giúp mình tìm ra lí do tại sao lại bị sai như vậy.
Thanks các bạn nhiều.
( Vì mình hok bit cách post code nên nhờ mod sửa giùm, thanks mod nhìu :D)

nghia_tdh21
18-11-2009, 10:59 PM
Theo mình nghĩ trong protues ko thể mô phỏng độ rung của phím. Mình thường chống rung bằng delay.