『壹』 單片機 行列矩陣鍵盤
這是一種常見的4*4矩陣鍵盤掃描按鍵的方法。其原理是先把4條列線設置為低電平,然後掃描行線,如有按鍵被按下,必定有一條行線為低電平。再把為低電平的行線設置為低電平,然後掃描列線,如有按鍵被按下,必定有一條列線為低電平。
在倒數第3句,P3=x;這里的x中的值是對應行線為低電平,其他7位為高電平。x是P3和0x0f按位或,也就是高四位(行)不變,低四位(列)全置1。但key_code重新讀取P3後,由於前面的操作中把高四位(行)的某一條線置為低電平,按下的鍵導致與該行線接觸的列線必定被拉低為低電平,所以這里key_code的低四位不是1111,而是有一位是0,這樣結合高四位的值就可以確定鍵碼了。
在51單片機中需要注意,雖然向單片機的引腳輸出1,但接著讀回的數據完全受引腳外部電平控制。原則上讀取51單片機的I/O之前必須向向對應I/O寫1,而讀回的數據完全決定於引腳外接電平。這意味著,即使輸出信號,如果外部電平未改變,讀取的數據可能仍然是之前的值,因此在讀取I/O之前應確保輸出高電平。
此外,為了確保准確讀取按鍵狀態,通常在掃描行線和列線時,需要快速切換電平,以避免讀取錯誤的電平狀態。例如,在設置行線為低電平後,應立即掃描對應的列線,然後再快速恢復行線為高電平,繼續下一個行線的掃描。
在實際應用中,還需要注意按鍵的抖動問題,這可能會導致誤觸發。可以通過軟體延時或硬體去抖動電路來解決這個問題。軟體延時通常是通過增加讀取按鍵狀態之間的延時來實現,而硬體去抖動電路則是在按鍵兩端並聯一個電容和電阻,利用RC電路的充放電特性來濾除抖動。
總的來說,4*4矩陣鍵盤的掃描方法需要精確控制電平切換和讀取時機,同時還需要考慮按鍵抖動的影響,以確保按鍵檢測的准確性。
『貳』 單片機的獨立鍵盤或矩陣鍵盤電路,必須要加電阻和電源嗎我試過的,不加電阻和電源,單片機也能識別。
可以不用啊,加電阻主要是用來提高抗干擾能力,要是工作環境比較好的話完全可以不加的,但主要就是怕在單片機引腳在懸空狀態下外界的干擾可能會導致單片機的誤動作而加上的
『叄』 單片機匯編矩陣鍵盤實驗(掃描法)
關於掃描按鍵的原理,可以看下面這篇文章。
本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。
首先通常想到的可能是下面這樣的設計:
這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。
總結
綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:
假設有N個IO口按照思路三可以識別N*(N-1)/2個;
按照思路四可識別N*(N-1)個;
按照思路5可以識別N*(N-1)+N個。
最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?
『肆』 51單片機P0口接矩陣鍵盤可以嗎
首先說下P0口和P1、P2、P3口的區別,關於LED和鍵盤的
P0作為輸出口,未加負載時有4V電壓,但由於晶元內部對P0未接5V+電阻,所以接上負載之後電壓會下降。以LED燈負載為例,接上300歐姆電阻+黃色led,P0口的電壓只有2.4V,led不會亮,所以必須要加上拉電阻。
P1、P2、P3內部都有電源供電,所以加LED這種小負載時電壓不會下降很多。
P0接鍵盤的時候是作為輸入口,這時,P0內部的鎖存器發揮功效,可以鎖存住數據。
鍵盤輸入電路是這樣:
如果是IO——按鍵——地線,也就是不加上拉電阻的接法,接到P0口後,按鍵1次,P0口自動鎖存住低電平,即使沒有上拉電阻,但由於接了mos管電路(如圖),松開按鍵後,VCC的電流不會導通到地線,所以IO口會恢復高電平,可以進行下次邏輯判斷。
結論:P0口只有在用於IO驅動時才需要加上拉電阻,鍵盤不需要
ps:這些你可以下個模擬軟體研究,proteus,它可以把keil生成的工程文件虛擬燒錄到單片機中,用法很簡單,和multisim一樣