欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
5×5矩陣鍵盤(pán)掃描,一條龍化繁為簡(jiǎn)

        【【電鹵藥丸】5×5矩陣鍵盤(pán)掃描,一條龍化繁為簡(jiǎn),值得擁有】https://toutiao.com/group/6636525037820051975/?iid=15906422033&app=explore_article&timestamp=1548690813&group_id=6636525037820051975&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share



設計中在遇到按鍵較多,但是單片機I/O資源有限時(shí),采用矩陣鍵盤(pán)是一種很好的選擇方案。在按鍵較少時(shí),矩陣鍵盤(pán)沒(méi)有明顯的優(yōu)勢,比如3×3矩陣鍵盤(pán)占用I/O口6個(gè),只支持9個(gè)按鍵;但是,按鍵較多時(shí),矩陣鍵盤(pán)的優(yōu)勢就凸顯出來(lái)了,比如5×5矩陣鍵盤(pán)占用I/O口10個(gè),可支持25個(gè)按鍵;

?矩陣鍵盤(pán)的硬件設計非常簡(jiǎn)單,如圖1以5×5矩陣鍵盤(pán)為例,藍色行線(xiàn)5條,綠色列線(xiàn)5條(加上拉電阻),用按鍵代替行列交叉的節點(diǎn)即組成了矩陣鍵盤(pán),其中二極管處的紅色連線(xiàn)可用來(lái)檢測按鍵是否按下或作為中斷信號的(可以不需要,使用時(shí)沒(méi)有任何影響,本文不涉及)。

圖1:矩陣鍵盤(pán)

?如圖2為單片機STM32F103CBT6的外圍電路,帶顏色的I/O口為矩陣鍵盤(pán)行線(xiàn)PA1~PA5(藍色),列線(xiàn)PA6~PA10(綠色)。為方便編程,矩陣鍵盤(pán)最好選擇同組的I/O端口。

圖2:?jiǎn)纹瑱C外圍電路

硬件的設計就是以上部分,接下來(lái)講解程序部分,

矩陣鍵盤(pán)的掃描方法有多種,其中很青睞的是行列反轉掃描,不僅簡(jiǎn)單而且效率高,而且只需要掌握該方法就足夠了。

?行列反轉掃描的邏輯:

①行線(xiàn)輸出全為0(行線(xiàn)PA1~PA5配置成推挽輸出,列線(xiàn)PA6~PA10配置成上拉輸入)

②讀入列線(xiàn)值

③輸出列線(xiàn)值(行線(xiàn)PA1~PA5配置成上拉輸入,列線(xiàn)PA6~PA10配置成推挽輸出)

④讀入行線(xiàn)值

⑤組合行線(xiàn)列線(xiàn)值

對于STM32的單片機,直接操作寄存器會(huì )更簡(jiǎn)單,且無(wú)需再對I/O進(jìn)行另外的配置,全部代碼如圖3所示,完全可以當做一個(gè)模塊來(lái)使用。

圖3:矩陣鍵盤(pán)的行列反轉掃描

以下代碼與圖3里面的代碼完全一致(為方便瀏覽和拷貝)

/*----------------------5*5矩陣鍵盤(pán)掃描函數,返回掃描鍵值(行列反轉掃描)-----------------------*/u16 Key_Scan(void){u16 cord_h,cord_l;u16 key_value = 0xFFFF;GPIOA->CRL = 0x88333334;GPIOA->CRH = 0x44444888;GPIOA->ODR = GPIOA->IDR & 0xFFC1;cord_l = GPIOA->IDR & 0x07C0;if(cord_l != 0x07C0){delay_ms(10);if(cord_l != 0x07C0){cord_l = GPIOA->IDR & 0x07C0;GPIOA->CRL = 0x33888884;GPIOA->CRH = 0x44444333;GPIOA->ODR = cord_l | 0xF83F;delay_us(1);cord_h = GPIOA->IDR & 0x003E;cord_h >>= 1;cord_l >>= 1;key_value = (cord_l cord_h) & 0xFFFF;return(key_value);}}return(0xFFFF);}

?以下代碼為端口配置寄存器的操作,PA組I/O有16個(gè)引腳:PA0~PA15;3代表推挽輸出,4代表浮空輸入,8代表上拉輸入;

GPIOA->CRL = 0x88333334; //低8位配置GPIOA->CRH = 0x44444888; //高8位配置

?以下代碼中,GPIOA->ODR為端口輸出數據寄存器,用于寫(xiě)操作;GPIOA->IDR為端口輸入數據寄存器,用于讀操作;

0xFFC1的二進(jìn)制:1111 1111 1100 0001,表示要對PA1~PA5置0。

0x07C0的二進(jìn)制:0000 0111 1100 0000,表示要對PA6~PA10讀值。

GPIOA->ODR = GPIOA->IDR & 0xFFC1;//行線(xiàn)輸出全為0cord_l = GPIOA->IDR & 0x07C0; //讀入列線(xiàn)值

行列反轉后的原理與上面完全一樣,這里就不一一闡述了。

?最后講一下組合行線(xiàn)列線(xiàn)值,假如S1按鍵按下去了,得到的二進(jìn)制為(注意黑體字

cord_h:0000 0000 0011 1100

cord_l: 0000 0111 1000 0000

cord_h >>= 1 表示右移1位得到:

0000 0000 0001 1110

cord_l >> = 1 表示右移1位得到:

0000 0011 1100 0000

組合碼(鍵值):key_value=0000 0011 1101 1110,即0x03DE;最后函數返回key_value值,該值就作為判斷S1的鍵值。

?之所以右移1位,是因為PA0沒(méi)有用于矩陣鍵盤(pán),所得到的鍵值也就被左移了1位,事實(shí)上,也可以不用右移,只是得到的組合碼不同而已,右移是為了方便計算。

矩陣鍵盤(pán)的鍵值定義如下:

#define S1 0x03DE#define S2 0x03BE#define S3 0x037E#define S4 0x02FE#define S5 0x01FE#define S6 0x03DD#define S7 0x03BD#define S8 0x037D#define S9 0x02FD#define S10 0x01FD#define S11 0x03DB#define S12 0x03BB#define S13 0x037B#define S14 0x02FB#define S15 0x01FB#define S16 0x03D7#define S17 0x03B7#define S18 0x0377#define S19 0x02F7#define S20 0x01F7#define S21 0x03CF#define S22 0x03AF#define S23 0x036F#define S24 0x02EF#define S25 0x01EF


?要點(diǎn):

①行列反轉掃描的思想是行線(xiàn)作為輸出時(shí),讀出列線(xiàn)的值;然后反過(guò)來(lái),列線(xiàn)作為輸出時(shí),讀出行線(xiàn)的值,最后把兩個(gè)值組合起來(lái)就是該按鍵的鍵值;

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
STM32 劉凱老師 位綁定程序
. GPIO原理與配置(跑馬燈,蜂鳴器,按鍵)
【轉】位帶操作的原理及使用
stm32 端口位操作問(wèn)題
51單片機矩陣鍵盤(pán)掃描程序分析?
stm32筆記:點(diǎn)亮一個(gè)led (精簡(jiǎn)版)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久