2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號(hào):閩ICP備19027007號(hào)-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
大家好,小科來(lái)為大家解答以上問(wèn)題。5個(gè)IO口最多能掃描多少個(gè)按鍵這個(gè)很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!
1、在做項(xiàng)目(項(xiàng)目)的時(shí)候,往往需要用到的按鍵比較多,IO資源又比較緊張,所以就想盡辦法在其他模塊中節(jié)省IO端口,最后擠出一兩個(gè)IO端口,卻發(fā)現(xiàn)還是不夠用,所以真的沒(méi)有辦法再增加一個(gè)IC來(lái)掃描按鍵。
2、一個(gè)IC的價(jià)格雖然不高,但對(duì)于大批量生產(chǎn)、產(chǎn)品利潤(rùn)低的廠商來(lái)說(shuō),卻是一筆巨大的開(kāi)支!
3、那么,我們能否想出一個(gè)更好的密鑰掃描方法:使用最少的IO端口,掃描最多的密鑰?可以嗎?
4、例如:給定五個(gè)IO端口,可以掃描多少個(gè)按鍵?有人說(shuō)2*3=6,如圖1所示:
5、圖1
6、是的,大多數(shù)技術(shù)參考書(shū)都是這樣做的,我們經(jīng)常這樣做:3個(gè)IO端口用于行掃描,2個(gè)IO端口用于列檢測(cè)(為了描述方便,我們同意將一個(gè)IO端口的輸出設(shè)置為“0”——稱之為“掃一個(gè)IO端口”)。
7、行行輸出掃描鍵碼,列行檢測(cè)是否有掃描按鍵的按鍵查詢方式。
8、掃描鍵流程:行線上依次輸出011、101、110的掃描鍵值,行線上輸出每個(gè)掃描鍵值,列線上檢測(cè)一次。
9、當(dāng)列線檢測(cè)到一個(gè)鍵時(shí),可以結(jié)合輸出的掃描鍵值來(lái)判斷對(duì)應(yīng)的鍵。
10、但是,5 IO真的只能掃描6鍵嗎?有人說(shuō)能掃九,很聰明!從行IO和地導(dǎo)出三個(gè)鍵(注意上拉電阻),如圖2所示:
11、圖二
12、掃鍵過(guò)程:首先檢測(cè)三行的IO口,掃K1’、K2’、K3’的鍵,然后按照上面2*3的掃鍵過(guò)程。
13、5個(gè)IO端口可以掃描9個(gè)按鍵,足夠強(qiáng)大,比6個(gè)按鍵多1/2!
14、動(dòng)動(dòng)腦筋。你能再掃幾個(gè)嗎?就幾個(gè)?一個(gè)就行!好了,再想想,就當(dāng)是被逼出來(lái)的吧!圖3:
15、圖3
16、不多不少,就10把鑰匙!這種掃描按鍵的方式比較少見(jiàn)!太美了!掃鍵過(guò)程:將IO1輸出設(shè)置為“0”,檢測(cè)IO2…IO5,如果判斷有對(duì)應(yīng)的按鍵按下,則知道有按鍵;如果沒(méi)有按鍵,繼續(xù)掃描按鍵:將IO2的輸出設(shè)置為“0”,檢測(cè)IO3、IO4、IO5,判斷按鍵是否被按下,以此類推。
17、這里需要注意的是,當(dāng)某個(gè)IO端口被掃描(輸出為“0”)時(shí),不要檢測(cè)已經(jīng)被掃描的IO端口。
18、比如此時(shí)將IO2的輸出設(shè)置為“0”,依次檢測(cè)IO3、IO4、IO5,但不要檢測(cè)IO1,否則會(huì)出問(wèn)題(為什么,請(qǐng)思考)。
19、你感覺(jué)如何?還不錯(cuò)!讓我們?cè)倏纯磮D3。多么有成就感?。】?,看.你看到了什么?來(lái)?。⒁?jiàn)圖4:
20、圖4
21、真的很強(qiáng)!你看到了20把鑰匙!又一個(gè)對(duì)稱的三角形。
22、然而,這樣的安排能正確掃描20個(gè)按鍵嗎?答案是肯定的:不是!上下三角形相互對(duì)稱,對(duì)稱掃過(guò)的按鍵無(wú)法區(qū)分。
23、你注意到圖3分析中提到的幾點(diǎn)了嗎?(“清掃IO端口時(shí),不要檢查已清掃的IO端口,否則會(huì)出錯(cuò)”)
24、我們來(lái)分析一下圖4:當(dāng)IO1輸出“0”時(shí),按下K11或K11’鍵可以被IO2檢測(cè)到,但I(xiàn)O2檢測(cè)無(wú)法區(qū)分K11和K11’鍵!同樣,無(wú)論掃描哪個(gè)IO端口,都有兩個(gè)對(duì)稱的按鍵無(wú)法區(qū)分。
25、我們假設(shè)如果能區(qū)分對(duì)稱密鑰,就能正常判斷密鑰。
26、我們?cè)谙耄河袥](méi)有單向傳導(dǎo)裝置?沒(méi)錯(cuò)。參見(jiàn)圖5!
27、圖5
28、很聰明的思維!利用二極管的單向?qū)щ娦詤^(qū)分兩個(gè)對(duì)稱密鑰。
29、按鍵掃描思路:對(duì)IO端口逐個(gè)掃描按鍵,另外四個(gè)IO端口可以分別檢測(cè)到它們所在的四個(gè)按鍵。
30、這樣就不會(huì)有圖3分析中提到的注意點(diǎn)。
31、夠酷了!等等,我們不要滿足于現(xiàn)狀。讓我們?cè)倏纯磮D2。是不是有點(diǎn)啟發(fā)?是的,我們來(lái)分析一下“五個(gè)IO口的地衍生五鍵”。
32、看圖片6:
33、圖6
34、25把鑰匙!5個(gè)IO端口掃出25個(gè)按鍵!別激動(dòng),我們來(lái)分析一下它的可行性,通過(guò)分析才能使用。
35、假設(shè)按鍵掃描過(guò)程:先掃描地面上的五個(gè)按鍵,然后掃描按鍵,如圖5所示。
36、首先將五個(gè)按鍵掃描到地面,判斷沒(méi)有按鍵,然后逐一掃描IO口。
37、但是,在掃描一個(gè)鍵的IO端口時(shí),如果按下一個(gè)接地鍵,該鍵可能會(huì)被誤判,因?yàn)榻拥劓I比其他鍵具有更高的響應(yīng)優(yōu)先級(jí)。
38、比如掃一掃IO1,IO1輸出“0”,就在按下K62的時(shí)候,IO2檢測(cè)到有按鍵,所以無(wú)法判斷是K11還是K62。
39、我們可以在程序中避免這種對(duì)按鍵的誤判:如果IO2檢測(cè)到一個(gè)按鍵,那么下一步就是判斷是否有接地按鍵被按下,如果沒(méi)有,那么就可以正確判斷是K11。
40、我們總結(jié)了掃描鍵的數(shù)量:
41、s=(n-1)* n n-使能二極管
42、s=(n-1)* n/2n-省略二極管。
43、經(jīng)典?多經(jīng)典?。∥腋嬖V你一個(gè)小道消息:第一個(gè)設(shè)計(jì)這條賽道的人是一位大亨。他(她?)還為此申請(qǐng)了專利!在此我們默默向老板致敬!
44、來(lái)源:【微信微信官方賬號(hào):硬件攻擊獅子】歡迎添加關(guān)注!請(qǐng)注明文章來(lái)源。
45、支票
本文到此結(jié)束,希望對(duì)大家有所幫助。
2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號(hào):閩ICP備19027007號(hào)-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。