排版:小宇從:從我們從事Chip House的項目(工程)時,我們經(jīng)常使用更多的按鈕,并且IO資源很緊張,因此我們嘗試了各種方法將IO端口保存在其他模塊中。
我擠出了一個或兩個IO端口,但發(fā)現(xiàn)仍然不夠。
無法添加IC來掃描按鍵。
盡管IC的價格不高,但對于批量生產(chǎn)且產(chǎn)品利潤較低的制造商來說,這是非常昂貴的費用!然后,我們可以考慮一種更好的密鑰掃描方法:使用最少的IO端口,掃描最多的密鑰嗎?我可以?例如:給定5個IO端口,可以掃描多少個鍵?有人說它是2 * 3 = 6,如圖1所示:圖一,大多數(shù)技術(shù)參考書都這樣做,我們經(jīng)常這樣做:使用3個IO端口進行行掃描,并使用2個IO端口進行列檢測(對于為了便于描述,我們同意:將某個IO端口輸出設(shè)置為“ 0”,稱其為“掃描某個IO端口”)。
使用行行輸出掃描鍵代碼,使用列行檢查是否有按鍵查詢方法來掃描鍵。
掃描鍵過程:在行線上依次輸出011、101、110掃描鍵值。
每次在行行上輸出掃描鍵值時,都會對列行進行一次檢查。
當在列線中檢測到鍵時,可以通過組合輸出的掃描鍵值來判斷相應的鍵。
但是,實際上5個IO只能掃描6個鍵嗎?有人說您可以掃描九個,這非常聰明!使用行IO和接地來派生3個鍵(請注意上拉電阻),如圖2所示:圖2掃描鍵過程:首先檢測3個行IO端口,掃描K1,K2和K39鍵;,K3&#39 ;,然后如圖2所示進行上述2 * 3按鍵掃描過程。
5個IO端口可以掃描9個按鍵,這足夠強大,比6個按鍵要多1/2個!用你的大腦,你可以掃描更多嗎?一些?一個很好!好吧,再想一想,我被逼出去了!圖片三:圖片三不多也不少,恰好是10個鍵!這種掃描密鑰的方式相對罕見!漂亮的!掃描按鍵過程:將IO1輸出設(shè)置為“ 0”,檢查IO2…IO5,如果判斷為有對應的按鍵,則可以知道有按鍵;如果沒有鍵,則繼續(xù)掃描鍵:將IO2輸出設(shè)置為“ 0”,檢查IO3,IO4,IO5,判斷是否有鍵按下,依此類推。
此處注意:掃描特定的IO端口(輸出為“ 0”)時,請勿檢測已掃描的IO端口。
例如:此時,將IO2的輸出設(shè)置為“ 0”,并依次檢查IO3,IO4,IO5,但不要檢查IO1,否則將發(fā)生錯誤(請考慮原因)。
你覺得怎么樣?不錯吧!讓我們再次看一下圖3,它是如此的充實!看,看...你又看到了什么?快速地!參見圖片4:圖片4真的很強!您可以看到20個鍵!另一個對稱的三角形。
但是,這樣的安排可以正確掃描20個鍵嗎?答案是肯定的:不!上三角和下三角相互對稱,并且不能區(qū)分因?qū)ΨQ而掃出的琴鍵。
您是否注意到圖3的分析中提到的要點? (“在掃描某個IO端口時,請勿檢查已掃描的IO端口,否則將發(fā)生錯誤”。
)讓我們來分析圖4:當IO1輸出“ 0”時,按K11或K11。
39;鍵可以被檢測到IO2,但是IO2檢測不能區(qū)分K11和K11。
鑰匙!同樣,無論掃描哪個IO端口,都有兩個無法區(qū)分的對稱密鑰。
我們假設(shè),如果可以區(qū)分對稱密鑰,則可以正常判斷密鑰。
我們在思考:是否有單向通信設(shè)備?有!見圖五!圖5非常聰明的主意!使用二極管的單向電導率來區(qū)分兩個對稱鍵。
掃描按鍵提示:逐個IO端口掃描按鍵,其他四個IO端口可以檢測到它們所在的四個按鈕。
這樣,在圖3的分析中就不會提及任何關(guān)注點。
足夠酷!等一下,不要對現(xiàn)狀感到滿意,讓我們看一下圖2。
這是否有啟發(fā)性?是的,讓我們分析“從5個接地的IO端口派生的5個密鑰”。
參見圖片6:圖片6 25個按鍵! 5個IO端口可清除25個按鍵!不要激動,讓我們分析一下它的可行性,只有在分析之后才能使用它。
假定按鍵掃描過程:首先掃描地面上的5個按鍵,然后如圖5所示掃描按鍵。
首先將5個按鍵掃描到地面上,判斷沒有按鍵,然后一個接一個地掃描按鍵在IO端口上。
但是,在掃描某個IO端口的鍵時,如果按下接地鍵,則此時可能會誤判該鍵,因為接地鍵的響應優(yōu)先級高于其他鍵。
例如:掃描IO1,僅在以下情況下IO1輸出“ 0”