·
鍵盤結構
如下圖,16按鍵九宮格鍵盤電路中,有四條緯線分別接到PORTB3:0,四條經線分別接到PORTB7:4。
經緯線總共有16個交點,分別由一個按鍵控制是否接通。假設如圖上所示,四條經緯線的另一端各自以限流電阻接至電源來做PULL UP,所有經緯線一般狀況下均為高電位。 若某一條緯線的另一端被輸出埠控制拉到低電位,且被按下按鍵將這條緯線導通特定的經線,則這條特定經線將會被拉均至低電位,其它的經線不變。 因此對想偵測某一按鍵,只要對其所跨的緯線輸出低電位,同時並讀取其所跨越的經線是否為低電位,即可知道這對經緯線交叉點上的按鍵是否被按。
鍵盤掃瞄
雖然逐一控制緯線輸出低電位並偵測經線可以得到九宮格鍵盤是否被按下的狀態,但用掃瞄的方式,偵測到的是按下期間被掃瞄的次數而不是被按鍵被按的次數,用來偵測按鍵輸入並不理想。想要偵測按鍵被按下的事件,需要偵測按鍵導通狀態的變化也就是下降緣或則上昇緣。為了達成這個目的。首先必需要有16個按鍵的狀態變數可記錄按鍵導通狀態,其次要有下降緣(或上昇緣)事件變數,可以記錄按鍵通狀態的變化事件。
依下列虛擬碼流程撰寫掃描程式: