鍵盤掃描

學習如何學習!

這張圖片的 alt 屬性值為空,它的檔案名稱為 keyboard.png
4X4掃描式的鍵盤

之前做輸入實習時(INPUT_PULLUP),有4個按鍵(如下圖),1個按鍵要佔用 arduino 1個輸出入接腳,4個按鍵要4個輸出入接腳,4個按鍵有一端接在一起直接接地。如果有16個按鍵,此時用16支arduino 接腳,會把 arduino 的接腳給用光,因此必需要使用另外一種方式來處理按鍵輸入(掃描式的輸入方式)。


上圖是 4X4鍵盤的電路圖,當要使用鍵盤掃描時,不會直接將 R1、R2、R3、R4 接地,而是直接接到 arduino 輸出接腳,C1、C2、C3、C4接到 arduino 輸入接腳。

鍵盤掃描程式

/***************************************************/
/*  鍵盤掃描程式,按S1 code=1,按S2 code=2 ...       */
/***************************************************/

    code = 0 ;
    for(int i=0;i<4;i++){
        //依序將RS[i]的接腳輸出低電位 
        digitalWrite(RS[i],LOW);
        //依序檢測CS[j]的接腳是否是低電位(是否按鍵)
        for(int j=0;j<4;j++){
            if(!digitalRead(CS[j])){
              code = 1+4*i+j;  
              Serial.println(code); //這是測試按鍵狀態程式,正式使用時請刪除
              delay(500); //這是測試按鍵狀態程式,正式使用時請刪除
              break;
            }
        }
       //將RS[i]的接腳輸出高電位 
        digitalWrite(RS[i],HIGH);
    }  
    

程式使用 2 層 for 迴圈來做按鈕輸入檢測工作,第1層 for 迴圈依序令 R1、R2、R3、R4 低電位,第 2 層 for 迴圈分別檢測 C1、C2、C3、C4 是否是低電位。

當 j=0 時,R1低電位(L),R2、R3、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S1 按下;code = 1+4*0+0 =1
i=1,檢測 C2是否低電位,如果是低電位表示 S2 按下;code = 1+4*0+1 =2
i=2,檢測 C3是否低電位,如果是低電位表示 S3 按下;code = 1+4*0+2 =3
i=3,檢測 C4是否低電位,如果是低電位表示 S4 按下;code = 1+4*0+3 =4


當 j=1 時,R2低電位(L),R1、R3、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S5 按下;code = 1+4*1+0 =5
i=1,檢測 C2是否低電位,如果是低電位表示 S6 按下;code = 1+4*1+1 =6
i=2,檢測 C3是否低電位,如果是低電位表示 S7 按下;code = 1+4*1+2 =7
i=3,檢測 C4是否低電位,如果是低電位表示 S8 按下;code = 1+4*1+3 =8


當 j=2 時,R3低電位(L),R1、R2、R4高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S9 按下;code = 1+4*2+0 =9
i=1,檢測 C2是否低電位,如果是低電位表示 S10 按下;code = 1+4*2+1 =10
i=2,檢測 C3是否低電位,如果是低電位表示 S11 按下;code = 1+4*2+2 =11
i=3,檢測 C4是否低電位,如果是低電位表示 S12 按下;code = 1+4*2+3 =12


當 j=3 時,R4低電位(L),R1~R3高電位(H),依序檢測 C1~C4 是否低電位:
i=0,檢測 C1是否低電位,如果是低電位表示 S13 按下;code = 1+4*3+0 =13
i=1,檢測 C2是否低電位,如果是低電位表示 S14 按下;code = 1+4*3+1 =14
i=2,檢測 C3是否低電位,如果是低電位表示 S15 按下;code = 1+4*3+2 =15
i=3,檢測 C4是否低電位,如果是低電位表示 S16 按下;code = 1+4*3+3 =16

入門
知識
語法
流程
函式
實習

發佈留言