arm4個(gè)IO口矩陣鍵盤(pán)設(shè)計(jì)_第1頁(yè)
arm4個(gè)IO口矩陣鍵盤(pán)設(shè)計(jì)_第2頁(yè)
arm4個(gè)IO口矩陣鍵盤(pán)設(shè)計(jì)_第3頁(yè)
arm4個(gè)IO口矩陣鍵盤(pán)設(shè)計(jì)_第4頁(yè)
arm4個(gè)IO口矩陣鍵盤(pán)設(shè)計(jì)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、4*4矩陣鍵盤(pán)在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤(pán)是人機(jī)對(duì)話不可缺少的組件之一。在按鍵比較少時(shí),我們可以一個(gè)單片機(jī) I/0 口接一個(gè)按鍵,但當(dāng)按鍵需要很多,I/0資源又比較緊張時(shí),使用矩陣式鍵盤(pán)無(wú)疑是最好的選擇。4*4矩4*4矩陣鍵盤(pán)是運(yùn)用得最多的鍵盤(pán)形式,也是單片機(jī)入門(mén)必需掌握的一種鍵盤(pán)識(shí)別技術(shù),通常的陣鍵盤(pán)都是占用八個(gè)I0 口,但是掃描的時(shí)候就是分時(shí)工作的,這樣我們用四個(gè)10就可以實(shí)現(xiàn)八個(gè)10的功能,10資源可以更好的提高10利用率。通過(guò)單向?qū)щ姷亩O管,4個(gè)I0 口掃描16個(gè)按鍵,按傳統(tǒng)的行列式掃描方法,單片機(jī)系統(tǒng)要掃描16個(gè)按鍵,需要采用8個(gè)10 口。當(dāng)10 口個(gè)數(shù)有限時(shí),就要采用另外的辦法。如下

2、電路,只用4個(gè)10口就實(shí)現(xiàn)采集16個(gè)按鍵的輸入,在工程中得到很好地使用。掃描方法如下:1) PA0 , PA1, PA2 PA3設(shè)置為內(nèi)部上拉輸入模式。則是5列中相應(yīng)I0 口對(duì)應(yīng)行處的按鍵按下。程序讀取這四個(gè)10 口的引腳電平,如果某個(gè)10為低電平。2)PA0輸出低電平,PA1, PA2 PA3設(shè)置為內(nèi)部上拉輸入模式。程序讀取 腳電平。如果某個(gè)10為低電平,則是4列中相應(yīng)10口對(duì)應(yīng)行處的按鍵按下。P A1,PA2PA3這三個(gè)10 口的引3)PA1輸出低電平,PA0, PA2 PA3設(shè)置為內(nèi)部上拉輸入模式。程序讀取P A0,PA2PA3這三個(gè)10 口的引腳電平。如果某個(gè)10為低電平,則是3列中相

3、應(yīng)10口對(duì)應(yīng)行處的按鍵按下。4)PA2輸出低電平,PA0, PA1, PA3設(shè)置為內(nèi)部上拉輸入模式。程序讀取 腳電平。如果某個(gè)10為低電平,則是2列中相應(yīng)10口對(duì)應(yīng)行處的按鍵按下。P A0,PA1,PA3這三個(gè)10 口的引5)PA3輸出低電平,PA0, PA1, PA2設(shè)置為內(nèi)部上拉輸入模式。程序讀取 腳電平。如果某個(gè)10為低電平,則是1列中相應(yīng)10 口對(duì)應(yīng)行處的按鍵按下。P A0,PA1,PA2這三個(gè)10 口的引但是應(yīng)該注意一個(gè)問(wèn)題是當(dāng)一 IO口正在掃鍵時(shí),如果有對(duì)地的鍵按下,這是有可能會(huì)誤判按鍵,對(duì)地鍵比其他鍵有更高的響應(yīng)優(yōu)先級(jí),例如掃描時(shí),恰好S15按下,那就不能判別式 S15還是12,

4、我們可以在程序上避免這種按鍵誤判,若檢測(cè)到PA1有鍵按下,就先去判斷是否有對(duì)地鍵按下,如果沒(méi)有那就可以正確地判斷是S12了;按鍵消抖:當(dāng)檢測(cè)到有按鍵按下時(shí),延遲 5ms,延時(shí)后如果還是檢測(cè)到被按下,則說(shuō)明按鍵確實(shí)被按 下。當(dāng)按鍵處于按下?tīng)顟B(tài)時(shí),一直循環(huán)當(dāng)前指令,當(dāng)按鍵釋放后才執(zhí)行后面程序。鍵盤(pán)掃描程序void Key_G PI O_Co nfig(void)/*定義一個(gè) GPIO_InitTypeDef類(lèi)型的結(jié)構(gòu)體*/ GPIO_lnitTyp eDef GPIO_ln itStructure;/*開(kāi)啟GPIOA的外設(shè)時(shí)鐘*/RCC_A PB2Perip hClockCmd( RCC_A PB

5、2 Peri ph_GP lOA, ENABLE);/*選擇要控制的GPIOA引腳*/GP10nitStructure.G PIO_ Pin = GPIO_P in_0|G PIO_P in_1 | GPIO_Pin_2| GPIO_Pin_3;/*設(shè)置引腳模式為通用推挽輸出*/GP IO_I nitStructure.G PI O_Mode = GPI O_Mode_I PU;/* 設(shè)置引腳速率為 50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/* 調(diào)用庫(kù)函數(shù),初始化 GPIOA*/ GPIO_Init(GPIOA, &am

6、p;GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3);key_scan(void ) unsigned int key=0;void/ GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)&& GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)&&

7、GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)&& GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1 )Delay_nms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1

8、)if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)=0)key=16;if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)=0)key=15;if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)=0)key=14;if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=0)key=13;GPIO_ResetBits(GPIOA, GPIO_Pin_0);GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin

9、_3);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1)Delay_nms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2) &&GPIO_ReadInputDataBit(GPIOA,GPIO_P

10、in_3)!=1) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)=0)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)=1) key=15;else key=12;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)=0)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)=1) key=14;else key=11;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=0)if(GPIO_ReadInputDataBit(

11、GPIOA,GPIO_Pin_3)=1) key=13;else key=10;GPIO_SetBits(GPIOA, GPIO_Pin_1);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_2| GPIO_Pin_3);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1) Delay_nms(5);if(GPIO_Rea

12、dInputDataBit(GPIOA,GPIO_Pin_2) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)=0)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)=1) key=16;else key=9;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)=0) if(GPIO_R

13、eadInputDataBit(GPIOA,GPIO_Pin_2)=1) key=14;else key=8; if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=0) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=1) key=13;else key=7;GPIO_SetBits(GPIOA, GPIO_Pin_2);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_3);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) &a

14、mp;&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1) Delay_nms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)!=1) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pi

15、n_0)=0)if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)=1) key=16;else key=6;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)=0) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)=1) key=15;else key=5;if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=0) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)=1) key=13;else key=4;GPIO_SetB

16、its(GPIOA, GPIO_Pin_3);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) &&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)!=1) Delay_nms(5);if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)&&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)!=1) if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)=0)if(GPIO_ReadInputDataBit

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論