您的位置: 首頁(yè) >游戲 >

5個(gè)IO口最多能掃描多少個(gè)按鍵

2022-06-12 18:30:51 編輯:畢晴藍(lán) 來(lái)源:
導(dǎo)讀 大家好,小科來(lái)為大家解答以上問(wèn)題。5個(gè)IO口最多能掃描多少個(gè)按鍵這個(gè)很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!1、在做項(xiàng)目(項(xiàng)目)的時(shí)候,

大家好,小科來(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ì)大家有所幫助。


免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章

精彩推薦

圖文推薦

點(diǎn)擊排行

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)歸原作者所有。