天天看點

51單片機(STC89C52RC) IO擴充實驗

  最近碰到了需要擴充IO口的情況了,正在想辦法從lcd1602身上擠出幾個IO口,另一種可行的方法是添加專用IC,google之發現可以有更好的方法,網上流傳經典IO接按鍵法,可以用5個IO口實作5X5矩陣鍵盤.參考這裡:

   我參照着實驗了一番,并用protues仿真看看;用上面的例子,如圖:

51單片機(STC89C52RC) IO擴充實驗

  原理還是采用的是查詢的方法進行掃描的,請看其描述:

  用3個IO口作行掃描,2個IO作列檢測(為友善描述,我們約定:設定某一IO口輸出為“0”――稱其 為“掃某IO口”)。用行線輸出掃鍵碼,列線檢測是否有按鍵的查詢方法進行掃鍵。掃鍵流程:在行線依次輸出011,101,110掃鍵值,行線每輸出一個 掃鍵值,列線檢測一次。當列線檢測到有按鍵時,結合輸出的掃鍵值可以判斷相應的按鍵。

  仿真的時候用atmel89c51單片機,選取P1口的0-4,就是不通過,當列作為輸入狀态(為1時),某IO置0時,接通交叉的按鈕,列卻沒有變化,依舊為高電平.什麼原因呢?百思不得其解,用一個小實驗,将按鈕接行的一端直接接到地,則列狀态改變,那麼也就是這個上拉電阻的問題咯, 突然想到,P1口内是已經内置了上拉電阻的,能夠實際輸出高電平,那麼再接一個上拉電阻就是白搭了,于是去掉上拉電阻部分,功能正常.為再次驗證,将端口接到P0口的0-4,電路依舊按照上圖所示,功能正常,驗證正确.

  經典接按鈕一文中并沒有提及是在什麼單片機中實作的,隻是提供了一個原理,實際當中需要注意IO口的上拉電阻問題,不過這個原理确實是蠻經典的,設計不錯.

轉載于:https://www.cnblogs.com/xiaoxia/archive/2011/05/24/2055332.html