51單片機(jī)(STC89C52RC) IO擴(kuò)展實驗
最近碰到了需要擴(kuò)展IO口的情況了,正在想辦法從lcd1602身上擠出幾個IO口,另一種可行的方法是添加專用IC,google之發(fā)現(xiàn)可以有更好的方法,網(wǎng)上流傳經(jīng)典IO接按鍵法,可以用5個IO口實現(xiàn)5X5矩陣鍵盤.參考這里:
我參照著實驗了一番,并用protues仿真看看;用上面的例子,如圖:
原理還是采用的是查詢的方法進(jìn)行掃描的,請看其描述:
用3個IO口作行掃描,2個IO作列檢測(為方便描述,我們約定:設(shè)置某一IO口輸出為“0”――稱其 為“掃某IO口”)。用行線輸出掃鍵碼,列線檢測是否有按鍵的查詢方法進(jìn)行掃鍵。掃鍵流程:在行線依次輸出011,101,110掃鍵值,行線每輸出一個 掃鍵值,列線檢測一次。當(dāng)列線檢測到有按鍵時,結(jié)合輸出的掃鍵值可以判斷相應(yīng)的按鍵。
仿真的時候用atmel89c51單片機(jī),選取P1口的0-4,就是不通過,當(dāng)列作為輸入狀態(tài)(為1時),某IO置0時,接通交叉的按鈕,列卻沒有變化,依舊為高電平.什么原因呢?百思不得其解,用一個小實驗,將按鈕接行的一端直接接到地,則列狀態(tài)改變,那么也就是這個上拉電阻的問題咯, 突然想到,P1口內(nèi)是已經(jīng)內(nèi)置了上拉電阻的,能夠?qū)嶋H輸出高電平,那么再接一個上拉電阻就是白搭了,于是去掉上拉電阻部分,功能正常.為再次驗證,將端口接到P0口的0-4,電路依舊按照上圖所示,功能正常,驗證正確.
經(jīng)典接按鈕一文中并沒有提及是在什么單片機(jī)中實現(xiàn)的,只是提供了一個原理,實際當(dāng)中需要注意IO口的上拉電阻問題,不過這個原理確實是蠻經(jīng)典的,設(shè)計不錯.