譚成豪,許建明
邵陽學(xué)院信息工程系,湖南邵陽 422000
試述51系列單片機(jī)矩陣鍵盤編程
譚成豪,許建明
邵陽學(xué)院信息工程系,湖南邵陽 422000
在單片機(jī)系統(tǒng)中,常常使用鍵盤向單片機(jī)輸入信息。鍵盤由一組常開的按鍵組成,當(dāng)按鍵閉合時(shí)就會(huì)向單片機(jī)系統(tǒng)輸入一個(gè)電平信息。每個(gè)按鍵都被賦予了一個(gè)鍵碼,單片機(jī)根據(jù)此代碼執(zhí)行任務(wù)。在單片機(jī)系統(tǒng)按鍵數(shù)量較多時(shí),為了減少I/O口的使用通常使用矩陣鍵盤。
單片機(jī);鍵盤;矩陣鍵盤;I/O口
矩陣鍵盤的按鍵排成矩陣,一般是4×4矩陣,即4行4列,行和列的交叉點(diǎn)接一個(gè)常開的獨(dú)立按鍵,按鍵被閉合時(shí)就接通行線和列線。8個(gè)I/O口產(chǎn)生16個(gè)交叉點(diǎn)16個(gè)按鍵,按鍵數(shù)量比獨(dú)立按鍵多了一倍,9個(gè)I/O口產(chǎn)生20個(gè)按鍵, I/O口越多產(chǎn)生的按鍵數(shù)量越多,效果越明顯。可以在鍵盤掃描程序中對(duì)每個(gè)按鍵進(jìn)行編號(hào),如第一行按鍵從左到右對(duì)應(yīng)0、1、2、3,第二行按鍵從左到右對(duì)應(yīng)4、5、6、7,第三行按鍵從左到右對(duì)應(yīng)8、9、A、B,第四行按鍵左到右對(duì)應(yīng)C、D、E、F,每按一次鍵讓數(shù)碼管顯示該按鍵所代表的編號(hào)。
矩陣鍵盤結(jié)構(gòu)比獨(dú)立鍵盤復(fù)雜,識(shí)別難度也比獨(dú)立按鍵大很多。矩陣鍵盤的工作方式有程序掃描方式、定時(shí)掃描方式、中斷掃描方式3種。本文只討論程序掃描方式。程序掃描方式是CPU主動(dòng)調(diào)用掃描子函數(shù),響應(yīng)鍵盤的輸入要求。在子函數(shù)里有以下步驟:
1)判斷鍵盤中有無按鍵閉合;
2)延時(shí)去抖消除干擾;
3)檢測(cè)是否確實(shí)有按鍵閉合,確定閉合鍵的編號(hào);
4)等待閉合鍵的釋放。
整個(gè)步驟中確定閉合鍵的編號(hào)是關(guān)鍵所在,常用的判斷方法有逐行掃描法和反轉(zhuǎn)掃描法。
4×4矩陣鍵盤無需外接電源,電位變化完全由編程來決定。通過軟件延時(shí)來消抖動(dòng),去干擾。4×4矩陣鍵盤4行4列交叉,每個(gè)按鍵位于交叉點(diǎn)上對(duì)應(yīng)的行列號(hào)唯一,共16個(gè)按鍵。4×4矩陣鍵盤8個(gè)I/O口接P1口,7SEG-MPX2-AN-GREEN7段共陽極數(shù)碼管通過上拉電阻接P0口。鍵盤中每閉合一個(gè)按鍵讓數(shù)碼管顯示對(duì)應(yīng)的編號(hào)。如上圖所示。
矩陣鍵盤編程要實(shí)現(xiàn)按鍵的正確判斷、鍵值的確定和消除抖動(dòng)去干擾三個(gè)目標(biāo),閉合鍵釋放后才顯示對(duì)應(yīng)按鍵編號(hào),目標(biāo)程序要簡(jiǎn)潔易行。
4.1 逐行掃描法
此方法中,單片機(jī)每次掃描其中的一行,循環(huán)掃描四行。首先掃描第一行,給P1口賦值0xef,即第一行為低電平,其他行和所有列為高電平,當(dāng)有第一行有按鍵閉合時(shí),對(duì)應(yīng)的列線電平會(huì)被拉低,軟件延時(shí)消去抖動(dòng)干擾后再讀取P1口的值,如第一行第一列閉合了就會(huì)得到0xee,第一行第一列閉合了就會(huì)得到0xed,第一行第三列閉合了就會(huì)得到0xeb,第一行第四列閉合了就會(huì)得到0xe7;同理,檢測(cè)第二行時(shí),賦值0xdf給P1口,若各列有按鍵閉合則會(huì)分別得到0xde、0xdd、0xdb、0xd7,類推,檢測(cè)第三行時(shí)賦值0xbf,若各列有按鍵閉合則會(huì)分別得到0xbe、0xbd、0xbb、0xb7,檢測(cè)第四行時(shí)賦值0x7f,若各列有按鍵閉合則會(huì)分別得到0x7e、0x7d、0x7b、0x77然后單片機(jī)對(duì)應(yīng)此值處理相應(yīng)的任務(wù)。
4.2 反轉(zhuǎn)掃描法
在這種方法中對(duì)單片機(jī)P1口賦值兩次,第一次給P1口賦值0xf0,即高四位高低平,第四位低電平,若有按鍵閉合則高四位中對(duì)應(yīng)的某一位會(huì)被線拉低,讀取P1口的值,賦給一個(gè)中間變量這就確定了按鍵的行;第二次給P1口賦值0x0f,即高四位低低平,第四位高電平,若有鍵閉合則低四位中對(duì)應(yīng)的某一位會(huì)被線拉低,讀取P1口的值,賦給另一個(gè)中間變量,這樣按鍵的行和列都確定了,然后再對(duì)兩個(gè)變量進(jìn)行“按位與”運(yùn)算得到一個(gè)最終值,根據(jù)次值判斷具體按鍵。從0~F依次是0xee、0xed、0xeb、0xe7、0xde、0xdd、0xdb、0xd7、0xbe、0xbd、0xbb、0xb7、0x7e、0x7d、0x7b、077。然后單片機(jī)對(duì)應(yīng)此值處理相應(yīng)的任務(wù)。
使用鍵盤可以實(shí)現(xiàn)計(jì)算機(jī)的人機(jī)對(duì)話,可以更好的實(shí)現(xiàn)工業(yè)控制,在單片機(jī)I/O口資源緊張的情況下矩陣鍵盤大大緩解了I/O口資源的緊張,使單片機(jī)可以控制更多模塊,實(shí)現(xiàn)更為強(qiáng)大的功能。
[1]張俊謨.單片機(jī)中級(jí)教程[M].北京航空航天大學(xué)出版社,2006,10.
[2]張洪潤(rùn),蘭清華.單片機(jī)應(yīng)用技術(shù)教程[M].北京:清華大學(xué)出版社,1997,11.
TP368
A
1674-6708(2011)39-0197-01
譚成豪,學(xué)生,所在院校:邵陽學(xué)院電子科學(xué)與技術(shù)專業(yè)
指導(dǎo)老師:許建明,碩士研究生,工作單位:邵陽學(xué)院信息工程系,職務(wù):教師