别掉進矩陣按鍵掃描的坑!
P17-P14設定為輸入,并使能内部上拉電阻。
P13-P10 依次推挽輸出低(0)和輸出開漏(高阻狀态)輪詢切換,時序如附圖2所示。
以S1閉合為例,當程式運作到步驟1時,P13推挽輸出低,而P12-P10輸出開漏高阻。
此時,P17-P14讀取到的IO口狀态隻有P17為低,其它為内部上拉電阻産生的高邏輯。
附圖1的矩陣掃描電路隻适用于沒有組合按鍵,則所連接配接的S1-S16不存在同時按下或者閉合的情況。
當有同時按下的情況時,則可能出現按鍵誤檢測到接下的情況。
甚至如果P13-P10不是輸出開漏,會有損壞晶片情況發生。
比如,當S1和S2同時閉合時,如果在步驟1檢測之前,P13設定為推挽輸出低,而P12設定為推挽輸出高。
則P12輸出的高電平沿着紅色的線,經過S2和S1短路到P11端口輸出的地,造成處理器的損壞。
比如,當S1、S2、S5同時閉合時,
在步驟1,P13輸出推挽低,P12-P10輸出高阻,P17、P16檢測到低。
在步驟2,P12輸出推挽低,P13、P11、P10輸出高阻,預期結果隻能P17檢測到低。
但是,由于存在附圖4所示的P12->S2->S1->S5->P16的潛通路,使能P16也檢測到低,進而S6也被誤判為閉合。