2015-01-03 62 views
1

我正在創建一個2x2鍵盤掃描儀,其中RC0和RC1是輸入線,RC2和RC3是輸出線。我已經設置TRISC如下PIC MikroC - 製作2x2鍵盤掃描儀

TRISC = 0b00000011;  

然後我已創建的鍵盤掃描器方法

char keyPadScanner(){ 
    PORTC.RC2 = HIGH; PORTC.RC3 = LOW; 
     if (PORTC.RC0 != 0) return '1'; 
     if (PORTC.RC1 != 0) return '2'; 
    PORTC.RC2 = LOW; PORTC.RC3 = HIGH; 
     if (PORTC.RC0 != 0) return '4'; 
     if (PORTC.RC1 != 0) return '5';} 

,並在一段時間(1)循環,我有此以將其顯示到GLCD顯示

test = keyPadScanner(); 
Delay_Ms(50); 
Sm_Glcd_char2(30, 90, test);  

我只想知道我哪裏出錯了,我花了太長時間試圖解決這個問題,如果你能夠把我推向正確的方向而不是給我一個答案,那將是很棒的: )

編輯:高被定義爲1,LOW在0定義,測試只是一個「字符」

這就是我下面

設置RC2高的僞代碼,RC3低
閱讀RC0。如果高,則1正在按下
閱讀RC1。如果高,2正在按下
設置RC2低,RC3高
閱讀RC0。如果高,則按下4個
閱讀RC1。如果高,5被壓

回答

0

爲您設計類似於你的,我曾經見過拉電阻被排除在外,從而留下PORTC.RC1和PORTC.RC0處於未知狀態時按任何按鈕。

+0

感謝您的回答,但您能詳細說明一下嗎?我現在編輯的代碼爲 char keyPadScanner(){ char var; char out; ((PORTC&0x3)== 0)out ='0'; //如果沒有按下,則很快退出 PORTC.RC2 = HIGH; PORTC.RC3 =低; var = PORTC&TRISC;如果((var)== 0x1)out ='1',則爲 ; ((var)== 0x2)out ='2'; PORTC.RC2 = LOW; PORTC.RC3 =高電平; var = PORTC&TRISC;如果((var)== 0x1)out ='4',則爲 。 ((var)== 0x2)out ='5'; 退貨;我不知道如何在註釋中對其格式進行格式化( – Joeliomason

+0

)我的回答與您的軟件無關,您需要確保打開的輸入不是浮動的,要做到這一點,您需要上拉或下拉電阻在原來的軟件中,你需要拉下電阻,[如果你覺得這個有幫助,你可以投我的答案,我一直沒有信譽,因此很難在這裏回答問題。] – st2000