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