2011-04-01 52 views
0

我在MPLAB中編程PIC16F877(使用匯編)。我有4x4開關面板。我可以接受輸入,但是我無法檢測到它來自哪個開關。 我正在使用portb,使第一個RB4到RB7輸入和RB0到RB3輸出,但例如SW0,SW4,SW8,SW12功能相同?我如何嚴格確定他們?4x4開關面板檢測

我的代碼

... 
bsf TRISB,5 
bcf TRISB,2 
bcf STATUS,RP0 

bsf STATUS,RP0 
bcf OPTION_REG,7 
bcf STATUS,RP0 

... 

btfs PORTB,5 
call button1 

goto main 

button1: 
movlw b'11111111' 
movwf PORTD 
clrf PORTE 
bsf PORTE,2 
call delay 

    return 
+3

如果您的鍵盤連接到PORTB,爲什麼在'button1'例程中使用PORTD和PORTE? – 2011-04-01 22:50:31

回答

2

大道,一次一列,掃描行下面是相關的部分,進而帶動下一列。聽起來你正在同時驅動多個列,所以不能分辨出它是哪個開關,因爲同一行變爲活動狀態。有some sample code here,但您需要將其轉換爲程序集。替代方案good Microchip app note (AN1081)描述了問題和解決方案,即使您的硬件不同,您也可以從中學習。