STM32 4 4矩陣鍵盤掃瞄程式(中斷方式)

2021-10-09 03:28:40 字數 2767 閱讀 2636

總體思路:中斷線為4行連線的gpio口,先初始化矩陣的4行輸出低電平4列輸出高電平,當有按鍵按下時的上公升沿觸發中斷;然後在相應的中斷處理函式裡面採取查詢的方式(參考上篇)獲得鍵值。

部分程式

void

exti9_5_irqhandler

(void

)//外部中斷中斷函式

if(gpio_readinputdatabit ( line2_gpio_port, line2_gpio_pin ))if

(gpio_readinputdatabit ( line3_gpio_port, line3_gpio_pin ))if

(gpio_readinputdatabit ( line4_gpio_port, line4_gpio_pin )

)exti_clearitpendingbit

(exti_line7)

;//清除標誌位 }if

(exti_getitstatus

(exti_line6)

!= reset)

//檢測中斷標誌位

if(gpio_readinputdatabit ( line2_gpio_port, line2_gpio_pin ))if

(gpio_readinputdatabit ( line3_gpio_port, line3_gpio_pin ))if

(gpio_readinputdatabit ( line4_gpio_port, line4_gpio_pin )

)exti_clearitpendingbit

(exti_line6)

;//清除標誌位}if

(exti_getitstatus

(exti_line5)

!= reset)

//檢測中斷標誌位

if(gpio_readinputdatabit ( line2_gpio_port, line2_gpio_pin ))if

(gpio_readinputdatabit ( line3_gpio_port, line3_gpio_pin ))if

(gpio_readinputdatabit ( line4_gpio_port, line4_gpio_pin )

)exti_clearitpendingbit

(exti_line5)

;//清除標誌位

}//重置gpio,等待下次中斷

//行置高

gpio_resetbits ( row1_gpio_port, row1_gpio_pin )

; gpio_resetbits ( row2_gpio_port, row2_gpio_pin )

; gpio_resetbits ( row3_gpio_port, row3_gpio_pin )

; gpio_resetbits ( row4_gpio_port, row4_gpio_pin )

;//列置高

gpio_setbits ( line1_gpio_port, line1_gpio_pin )

; gpio_setbits ( line2_gpio_port, line2_gpio_pin )

; gpio_setbits ( line3_gpio_port, line3_gpio_pin )

; gpio_setbits ( line4_gpio_port, line4_gpio_pin );}

void

exti4_irqhandler

(void)if

(gpio_readinputdatabit ( line2_gpio_port, line2_gpio_pin ))if

(gpio_readinputdatabit ( line3_gpio_port, line3_gpio_pin ))if

(gpio_readinputdatabit ( line4_gpio_port, line4_gpio_pin )

)exti_clearitpendingbit

(exti_line4)

;//清除標誌位

}//重置gpio,等待下次中斷

//行置高

gpio_resetbits ( row1_gpio_port, row1_gpio_pin )

; gpio_resetbits ( row2_gpio_port, row2_gpio_pin )

; gpio_resetbits ( row3_gpio_port, row3_gpio_pin )

; gpio_resetbits ( row4_gpio_port, row4_gpio_pin )

;//列置高

gpio_setbits ( line1_gpio_port, line1_gpio_pin )

; gpio_setbits ( line2_gpio_port, line2_gpio_pin )

; gpio_setbits ( line3_gpio_port, line3_gpio_pin )

; gpio_setbits ( line4_gpio_port, line4_gpio_pin )

;}

注意事項:

①在選擇開發板的io口時一定要看看原理圖或者資料手冊,確定這8個io口是可用的

②使用外部中斷時要開啟復用io時鐘afio

③中斷程式裡面一定要有按鍵鬆開的檢測,不然會一直進入中斷服務函式。

STM32鍵盤掃瞄程式

stm32鍵盤掃瞄程式 帶中斷觸發輸入 可注釋忽略 include key.h include delay.h 按鍵初始化函式 void key init void while gpiob idr 0x0f00 0x0000 等待鬆開 gpio setbits gpiob,gpio pin 12 g...

矩陣鍵盤掃瞄

矩陣鍵盤掃瞄一般採取行列掃瞄法。比如先拉低所有列線,拉高行線,之後讀取行線狀態,如果行線有一行為低,則假設有按鍵按下,此時再延時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...