版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)部隊(duì)掃描鍵盤程序說明一、部隊(duì)掃描法矩陣式鍵盤的構(gòu)造與作業(yè)原理:在鍵盤中按鍵數(shù)量較多時(shí),為了削減I/O口的占用,一般將按鍵擺放成矩陣方法,如圖1所示。在矩陣式鍵盤中,每條水平線和筆直線在穿插處不直接連通,而是通過一個(gè)按鍵加以聯(lián)接。這么,一個(gè)端口(如P1口)就能夠構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,并且線數(shù)越多,差異越顯著,比方再多加一條線就能夠構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需求的鍵數(shù)比照多時(shí),選用矩陣法來做鍵盤是合理的。矩陣式構(gòu)造的鍵盤顯著比直接法要雜亂一些,辨認(rèn)也要雜亂一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這么,當(dāng)按鍵沒有按下時(shí),悉數(shù)的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這么,通過讀入輸入線的情況就可得知是不是有鍵按下了。詳細(xì)的辨認(rèn)及編程方法如下所述。矩陣式鍵盤的按鍵辨認(rèn)方法斷定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵辨認(rèn)方法,如上圖所示鍵盤,介紹進(jìn)程如下。差異鍵盤中有無鍵按下將悉數(shù)行線Y0-Y3置低電平,然后查看列線的情況。只需有一列的電平為低,則標(biāo)明鍵盤中有鍵被按下,并且閉合的鍵坐落低電平線與4根行線相穿插的4個(gè)按鍵傍邊。若悉數(shù)列線均為高電平,則鍵盤中無鍵按下。差異閉合鍵地址的方位在供認(rèn)有鍵按下后,即可進(jìn)入斷定詳細(xì)閉合鍵的進(jìn)程。其方法是:順次將行線置為低電平,即在置某根行線為低電往常,其它線為高電平。在斷定某根行線方位為低電平后,再逐行查看各列線的電平情況。若某列為低,則該列線與置為低電平的行線穿插處的按鍵即是閉合的按鍵。下面給出一個(gè)詳細(xì)的比方:8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3別離接有4個(gè)上拉電阻到正電源+5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線構(gòu)成16個(gè)相交點(diǎn)。查看其時(shí)是不是有鍵被按下。查看的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的情況,若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。去掉鍵顫抖。當(dāng)查看到有鍵按下后,延時(shí)一段時(shí)刻再做下一步的查看差異。若有鍵被按下,應(yīng)辨認(rèn)出是哪一個(gè)鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合順次輸出:P1.71110P1.61101P1.51011P1.40111二、部隊(duì)回轉(zhuǎn)法了解部隊(duì)鍵盤掃描得從硬件開端學(xué)習(xí),咱們得知道部隊(duì)掃描是啥意思。在單片機(jī)體系中為了拓寬同一個(gè)I/O口的鍵盤個(gè)數(shù),則選用了部隊(duì)式鍵盤接法,就是穿插相接。所謂的“行”、“列”是咱們?nèi)藶橐?guī)矩的,假定試著把列當(dāng)作行,將行當(dāng)作列是相同的。這兒咱們規(guī)矩P1.0~P1.3為列,P1.7~P1.4為行。如圖所示:1、51比方舉一個(gè)比方吧。榜首步:行線IOP1.7~P1.4置低電平,列線IOP1.0~P1.3置高電平假定K1按下,那么P1.0=0讀P1口P1=00001110第二步:行線IOP1.7~P1.4置高電平,列線IOP1.0~P1.3置低電平假定K1按下,那么P1.7=0讀P1口P1=01110000兩個(gè)字節(jié)相加,得到新數(shù)據(jù):01111110(榜首行榜首列)每按一個(gè)鍵咱們都得到紛歧樣的字節(jié),比對咱們的字節(jié)是啥就能夠知道鍵值是啥了。/////////////////////////////////////////////////////////////////////#include//包括頭文件,一般情況不需求改動(dòng),頭文件包括分外功用寄存器的界說#defineucharunsignedchar#defineuintunsignedintunsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F/*------------------------------------------------函數(shù)聲明------------------------------------------------*/ucharkeyscan(void);//鍵盤掃描voiddelay(uinti);//演示程序/*------------------------------------------------主函數(shù)------------------------------------------------*/voidmain(){ucharkey;P2=0x00;//1數(shù)碼管亮按相應(yīng)的按鍵,會閃現(xiàn)按鍵上的字符while(1){key=keyscan();//調(diào)用鍵盤掃描,switch(key){case0x7e:P0=dofly[0];break;//0按下相應(yīng)的鍵閃現(xiàn)相對應(yīng)的碼值case0x7d:P0=dofly[1];break;//1case0x7b:P0=dofly[2];break;//2case0x77:P0=dofly[3];break;//3case0xbe:P0=dofly[4];break;//4case0xbd:P0=dofly[5];break;//5case0xbb:P0=dofly[6];break;//6case0xb7:P0=dofly[7];break;//7case0xde:P0=dofly[8];break;//8case0xdd:P0=dofly[9];break;//9case0xdb:P0=dofly[10];break;//acase0xd7:P0=dofly[11];break;//bcase0xee:P0=dofly[12];break;//ccase0xed:P0=dofly[13];break;//dcase0xeb:P0=dofly[14];break;//ecase0xe7:P0=dofly[15];break;//f}}}/*------------------------------------------------鍵盤掃描程序------------------------------------------------*/一、部隊(duì)掃描法矩陣式鍵盤的構(gòu)造與作業(yè)原理:在鍵盤中按鍵數(shù)量較多時(shí),為了削減I/O口的占用,一般將按鍵擺放成矩陣方法,如圖1所示。在矩陣式鍵盤中,每條水平線和筆直線在穿插處不直接連通,而是通過一個(gè)按鍵加以聯(lián)接。這么,一個(gè)端口(如P1口)就能夠構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,并且線數(shù)越多,差異越顯著,比方再多加一條線就能夠構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需求的鍵數(shù)比照多時(shí),選用矩陣法來做鍵盤是合理的。矩陣式構(gòu)造的鍵盤顯著比直接法要雜亂一些,辨認(rèn)也要雜亂一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這么,當(dāng)按鍵沒有按下時(shí),悉數(shù)的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這么,通過讀入輸入線的情況就可得知是不是有鍵按下了。詳細(xì)的辨認(rèn)及編程方法如下所述。矩陣式鍵盤的按鍵辨認(rèn)方法斷定矩陣式鍵盤上何鍵被按下介紹一種“行掃描法”。行掃描法行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵辨認(rèn)方法,如上圖所示鍵盤,介紹進(jìn)程如下。差異鍵盤中有無鍵按下將悉數(shù)行線Y0-Y3置低電平,然后查看列線的情況。只需有一列的電平為低,則標(biāo)明鍵盤中有鍵被按下,并且閉合的鍵坐落低電平線與4根行線相穿插的4個(gè)按鍵傍邊。若悉數(shù)列線均為高電平,則鍵盤中無鍵按下。差異閉合鍵地址的方位在供認(rèn)有鍵按下后,即可進(jìn)入斷定詳細(xì)閉合鍵的進(jìn)程。其方法是:順次將行線置為低電平,即在置某根行線為低電往常,其它線為高電平。在斷定某根行線方位為低電平后,再逐行查看各列線的電平情況。若某列為低,則該列線與置為低電平的行線穿插處的按鍵即是閉合的按鍵。下面給出一個(gè)詳細(xì)的比方:8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3別離接有4個(gè)上拉電阻到正電源+5V,并把列線P1.0-P1.3設(shè)置為輸入線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線構(gòu)成16個(gè)相交點(diǎn)。查看其時(shí)是不是有鍵被按下。查看的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的情況,若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。去掉鍵顫抖。當(dāng)查看到有鍵按下后,延時(shí)一段時(shí)刻再做下一步的查看差異。若有鍵被按下,應(yīng)辨認(rèn)出是哪一個(gè)鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合順次輸出:P1.71110P1.61101P1.51011P1.40111二、部隊(duì)回轉(zhuǎn)法了解部隊(duì)鍵盤掃描得從硬件開端學(xué)習(xí),咱們得知道部隊(duì)掃描是啥意思。在單片機(jī)體系中為了拓寬同一個(gè)I/O口的鍵盤個(gè)數(shù),則選用了部隊(duì)式鍵盤接法,就是穿插相接。所謂的“行”、“列”是咱們?nèi)藶橐?guī)矩的,假定試著把列當(dāng)作行,將行當(dāng)作列是相同的。這兒咱們規(guī)矩P1.0~P1.3為列,P1.7~P1.4為行。如圖所示:1、51比方舉一個(gè)比方吧。榜首步:行線IOP1.7~P1.4置低電平,列線IOP1.0~P1.3置高電平假定K1按下,那么P1.0=0讀P1口P1=00001110第二步:行線IOP1.7~P1.4置高電平,列線IOP1.0~P1.3置低電平假定K1按下,那么P1.7=0讀P1口P1=01110000兩個(gè)字節(jié)相加,得到新數(shù)據(jù):01111110(榜首行榜首列)每按一個(gè)鍵咱們都得到紛歧樣的字節(jié),比對咱們的字節(jié)是啥就能夠知道鍵值是啥了。/////////////////////////////////////////////////////////////////////#include//包括頭文件,一般情況不需求改動(dòng),頭文件包括分外功用寄存器的界說#defineucharunsignedchar#defineuintunsignedintunsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F/*------------------------------------------------函數(shù)聲明------------------------------------------------*/ucharkeyscan(void);//鍵盤掃描voiddelay(uinti);//演示程序/*------------------------------------------------主函數(shù)------------------------------------------------*/voidmain(){ucharkey;P2=0x00;//1數(shù)碼管亮按相應(yīng)的按鍵,會閃現(xiàn)按鍵上的字符while(1){key=keyscan();//調(diào)用鍵盤掃描,switch(key){case0x7e:P0=dofly[0];break;//0按下相應(yīng)的鍵閃現(xiàn)相對應(yīng)的碼值case0x7d:P0=dofly[1];break;//1case0x7b:P0=dofly[2];break;//2case0x77:P0=dofly[3];break;//3case0xbe:P0=dofly[4];break;//4case0xbd:P0=dofly[5];break;//5case0xbb:P0=dofly[6];break;//6case0xb7:P0=dofly[7];break;//7case0xde:P0=dofly[8];break;//8case0xdd:P0=dofly[9];break;//9case0xdb:P0=dofly[10];break;//acase0xd7:P0=dofly[11];break;//bcase0xee:P0=dofly[12];break;//ccase0xed:P0=dofly[13];break;//dcase0xeb:P0=dofly[14];break;//ecase0xe7:P0=dofly[15];break;//f}}}/*------------------------------------------------鍵盤掃描程序------------------------------------------------*/ucharkeyscan(void)//鍵盤掃描函數(shù),運(yùn)用部隊(duì)回轉(zhuǎn)掃描法{ucharcord_h,cord_l;//部隊(duì)值基地變量P3=0x0f;//行線輸出全為0cord_h=P3&0x0f;//讀入列線值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《客戶跟蹤技巧》課件
- 《chapter固定資產(chǎn)》課件
- 《肩關(guān)節(jié)鏡簡介》課件
- 單位管理制度合并選集【人事管理篇】
- 2024第八屆全國職工職業(yè)技能大賽(網(wǎng)約配送員)網(wǎng)上練兵考試題庫-中(多選題)
- 單位管理制度分享匯編人事管理篇
- 單位管理制度分享大全人力資源管理篇十篇
- 單位管理制度范例選集人力資源管理篇十篇
- 單位管理制度呈現(xiàn)合集人事管理十篇
- 《電子欺騙》課件
- 公交車站臺服務(wù)規(guī)范與安全意識
- 2024電商消費(fèi)趨勢年度報(bào)告-flywheel飛未-202412
- 中國普通食物營養(yǎng)成分表(修正版)
- 駕駛證學(xué)法減分(學(xué)法免分)試題和答案(50題完整版)1650
- 【人民日報(bào)】72則金句期末評語模板-每頁4張
- 人民網(wǎng)刪除稿件(帖文)申請登記表
- 橋梁加固、拼寬流程圖(共9頁)
- 小組合作學(xué)習(xí)學(xué)生評價(jià)量表
- 新錄用公務(wù)員服務(wù)協(xié)議書
- OQC崗位職責(zé)(完整版)
- 電氣控制與PLC復(fù)習(xí)課件
評論
0/150
提交評論