關於矩陣鍵盤IO口寫法

2021-07-16 03:38:32 字數 1965 閱讀 9567

void gpio_keypads_init(void)

void keypads_rowscan_ipu()

void keypads_linescan_out_pp()

void keypads_rowscan_out_pp()

然後就是行列分別配置推挽輸出和下拉輸入。

int key_line = 0;

char key_val;

char keypads_scan()

else if(gpio_readinputdatabit(gpioa,gpio_pin_5) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_6) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_7) == 0)

else key_line = 0;

switch(key_line)

key_line = 0;

keypads_linescan_ipu();

keypads_rowscan_out_pp();   

}else if(gpio_readinputdatabit(gpiob,gpio_pin_1) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_5) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_6) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_7) == 0)

else key_line = 0;

switch(key_line)

key_line = 0;

keypads_linescan_ipu();

keypads_rowscan_out_pp();         

}else if(gpio_readinputdatabit(gpiob,gpio_pin_2) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_5) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_6) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_7) == 0)

else key_line = 0;

switch(key_line)

key_line = 0;

keypads_linescan_ipu();

keypads_rowscan_out_pp();  

}else if(gpio_readinputdatabit(gpioa,gpio_pin_8) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_5) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_6) == 0)

else if(gpio_readinputdatabit(gpioa,gpio_pin_7) == 0)

else key_line = 0;

switch(key_line)

key_line = 0;

keypads_linescan_ipu();

keypads_rowscan_out_pp();  

}return key_val;

}之後就是鍵盤掃瞄程式,在檢測到行電平之後進入switch,然後將行io口切換為推挽輸出,列io口切換為上拉輸入,這樣是最簡單但是是最直觀的寫法。

之前寫的鍵盤掃瞄沒有在檢測的時候加入io口型別切換,雖然測試的時候很正常,但是換了其他的條件之後(比如換了電源,換了其他電路板等情況),就變得不正常,按鍵在特定情況下才有輸出(原因一直還沒有排查清楚)。

總之,最妥善的寫法還是需要加上io口狀態的切換。

矩陣鍵盤掃瞄

矩陣鍵盤掃瞄一般採取行列掃瞄法。比如先拉低所有列線,拉高行線,之後讀取行線狀態,如果行線有一行為低,則假設有按鍵按下,此時再延時20毫秒左右後判 斷行線的某一行是否仍然為低,若為低則確認有鍵按下。這時可以進行按鍵鍵值判斷,即判別在哪一行哪一列有按鍵按下。判斷的方法是通過拉高列線,依次置行線 的某一行...

矩陣鍵盤掃瞄

矩陣鍵盤掃瞄 module matrix keyboard input clk 50m,50m時鐘 input rst n,復位 input 3 0 row,矩陣鍵盤行輸入 output reg 3 0 col,矩陣鍵盤列輸出 output reg key flag,按鍵按下標誌 output re...

矩陣鍵盤掃瞄

根據矩陣鍵盤的原理圖可知,當沒有按鍵按下時,p1 0xf0 然後依次將p1 0 p1 3單獨置低電平,其他置高,再掃瞄各列的狀態,來判斷是哪個按鍵按下,比如,將p1 0輸出低電平,其他的引腳都輸出高電平,即p1 0xfe,那麼當第1行有按鍵按下時p1的相應值為,1x1 01111110 0x7e 1...