單片機(jī)實(shí)現(xiàn)4X4矩陣鍵盤控制項(xiàng)目_第1頁
單片機(jī)實(shí)現(xiàn)4X4矩陣鍵盤控制項(xiàng)目_第2頁
單片機(jī)實(shí)現(xiàn)4X4矩陣鍵盤控制項(xiàng)目_第3頁
單片機(jī)實(shí)現(xiàn)4X4矩陣鍵盤控制項(xiàng)目_第4頁
單片機(jī)實(shí)現(xiàn)4X4矩陣鍵盤控制項(xiàng)目_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第13章章 單片機(jī)實(shí)現(xiàn)單片機(jī)實(shí)現(xiàn)4*4矩陣鍵矩陣鍵盤控制項(xiàng)目盤控制項(xiàng)目 學(xué)習(xí)內(nèi)容 13.1 項(xiàng)目需求 13.2 項(xiàng)目工作原理分析 13.3 項(xiàng)目硬件電路設(shè)計(jì) 13.4 項(xiàng)目軟件程序設(shè)計(jì) 13.5系統(tǒng)調(diào)試結(jié)果總結(jié)13.1 項(xiàng)目需求項(xiàng)目需求矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成矩陣鍵盤。在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4*4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O口的利用率。項(xiàng)目要求:設(shè)定矩陣鍵盤編號(hào),按下鍵盤中的某個(gè)按鍵,可以通過數(shù)碼管看到顯示對(duì)應(yīng)的鍵盤編號(hào)值。 (4*4)矩陣鍵盤實(shí)物圖 13.2 項(xiàng)目工作原理分析

2、項(xiàng)目工作原理分析 4*4矩陣鍵盤的行信號(hào)分別接P2.0P2.3,列信號(hào)分別接P2.4P2.7,無按鍵閉合時(shí),P2.0P2.3與 P2.4P2.7開路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O口線之間短路。判斷矩陣鍵盤有按鍵按下方法如下:先讓P2.0P2.3輸出低電平,監(jiān)測P2.4P2.7的狀態(tài),如果P2.4P2.7輸出為高電平則沒有按鍵閉合,如果檢測到P2.4P2.7輸出為低電平則表示有按鍵按下發(fā)生閉合狀態(tài),以上只是說明有按鍵閉合,具體是哪個(gè)按鍵閉合好需要進(jìn)一步檢測。 一旦確定有按鍵已經(jīng)穩(wěn)定閉合后,接著判斷為哪一個(gè)按鍵閉合,采用對(duì)按鍵進(jìn)行掃描的方式,依次給每一條列線送低電平,其余各列都為高電平,

3、并檢測每次掃描的行狀態(tài)。每當(dāng)掃描輸出某一列為低電平時(shí),相繼讀入行線狀態(tài)。若全為高電平,表示為低電平的這列沒有按鍵閉合。否則行線不全部為高電平,表示為低電平的這列上有按鍵閉合。確定閉合按鍵的位置后,計(jì)算出按鍵值,產(chǎn)生按鍵碼。 在矩陣按鍵處理過程中,一旦檢測到有按鍵閉合與確認(rèn)按鍵已經(jīng)穩(wěn)定閉合期間,通過調(diào)用10-20ms延時(shí)子程序避開按鍵抖動(dòng)問題。由于按鍵是機(jī)械器件,按下或者松開時(shí)有固定的機(jī)械抖動(dòng),抖動(dòng)圖如圖所示。 按鍵去抖分為硬件去抖和軟件去抖,硬件去抖最簡單的是按鍵兩端并聯(lián)電容,容量根據(jù)實(shí)驗(yàn)而定。軟件去抖使用方便不增加硬件成本,容易調(diào)試,所以現(xiàn)在處理按鍵抖動(dòng)問題大部分選擇軟件去抖。軟件去抖操作步

4、驟如下: 檢測到按鍵按下后進(jìn)行10-15ms延時(shí),用于跳過這個(gè)抖動(dòng)區(qū)域。 延時(shí)后再檢測按鍵狀態(tài),如果沒有按下表明是抖動(dòng)或者干擾造成,如果仍舊按下,可以認(rèn)為是真正的按下。并進(jìn)行對(duì)應(yīng)的操作。 同樣按鍵釋放后也要進(jìn)行去抖動(dòng)延時(shí),延時(shí)后檢測按鍵是否真正松開。 采用單片機(jī)控制矩陣按鍵實(shí)現(xiàn)按鍵鍵碼值顯示的電路結(jié)構(gòu)由51單片機(jī)最小系統(tǒng)、數(shù)碼顯示電路、數(shù)碼驅(qū)動(dòng)電路、矩陣鍵盤電路和電源供電電路組成。 單片機(jī)控制矩陣鍵盤電路結(jié)構(gòu)圖 13.3 項(xiàng)目硬件電路設(shè)計(jì)項(xiàng)目硬件電路設(shè)計(jì) 矩陣鍵盤電路的行信號(hào)分別接P2.0P2.3,列信號(hào)分別接P2.4P2.7,進(jìn)行按鍵檢測時(shí),假設(shè)查詢到P25為低電平,P24 P26 P27為

5、高電平,那么可能按下的按鍵為S2 S6 S10 S14。進(jìn)一步探測,先把P20設(shè)置為低電平,P21 P22 P23為高電平,如果此時(shí)P25一直為低電平,就是S2按鍵被按下。如果P25為高電平,令其P21設(shè)為低電平,P20 P22 P23為高電平,如果此時(shí)P25為低電平,表明S6按鍵被按下。依此類推,可以確定S1-S16中哪個(gè)按鍵被按下。單片機(jī)控制矩陣鍵盤硬件電路原理圖 Y111.0592MC230PC130PC410uFC50.1uFC310uFVCC5VR110KP1.01P1.12P1.23P1.34P1.45P1.5/MOSI6P1.6/MISO7P1.7/SCK8RST9P3.0/RX

6、D10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17XTAL218XTAL119GND20A8/P2.021A9/P2.122A10/P2.223A11/P2.324A12/P2.425A13/P2.526A14/P2.627A15/P2.728PSEN29PROG/ALE30EA/VPP31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40U151單片機(jī)VCC5VVCC5VSS112J1供電電源電路R21KD1S112S23S34S45S56S67

7、S78S89S9AS10BS11CS12DS13ES14ES15FS16P20P21P22P23P24P25P26P27P20P21P22P23P24P25P26P27abcgddpabfcgdedpabfcgdedpabfcgdedpfee1d2h3c4g5com46b7com38com29f10a11com112DS1123456781615141312111091KP00P01P02P03P04P05P06P07P00P01P02P03P04P05P06P07AABBCCDDEEFFGGDPDPOC1C111D22D33D44D55D66D77D88D91Q192Q183Q174Q165

8、Q156Q147Q138Q12GND10VCC20U274HC573VCC5VCOM1COM1COM4COM3COM2COM2COM3COM4P10P11P12P13P10P11P12P13VCC5V13.4 項(xiàng)目軟件程序設(shè)計(jì)項(xiàng)目軟件程序設(shè)計(jì) 矩陣鍵盤行線P20P23為輸出線,列線P24P27為輸入線。單片機(jī)將行線(P20P23)全部輸出低電平,此時(shí)讀入列線數(shù)據(jù),若列線全為高電平則沒有鍵按下,當(dāng)列線有出現(xiàn)低電平時(shí)調(diào)用延時(shí)程序以此來去除按鍵抖動(dòng)。延時(shí)完成后再判斷是否有低電平,如果此時(shí)讀入列線數(shù)據(jù)還是有低電平,則說明確實(shí)有鍵按下,再來進(jìn)一步確定鍵值。 系統(tǒng)軟件設(shè)計(jì)流程圖 程序代碼#include

9、/包含頭文件,頭文件包含特殊功能寄存器的定義#define uchar unsigned char#define uint unsigned intunsigned char const table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8, 0 x80,0 x90,0 x88,0 x83,0 xa7,0 xa1,0 x86,0 x8e;/定義共陽數(shù)碼管段碼表0-Fuchar keyscan(void);/鍵盤掃描函數(shù)聲明void delay(void); /延時(shí)函數(shù)聲明uchar keyscan(void) /鍵盤掃描函數(shù) uchar k

10、ey_h,key_l;/行列值中間變量 P2=0 xf0; /行線輸出全為0 key_h=P2&0 xf0; /讀入列線值 if(key_h!=0 xf0) /先檢測有無按鍵按下 delay(); /去抖 if(key_h!=0 xf0) key_h=P2&0 xf0; /讀入列線值 P2=key_h|0 x0f; /輸出當(dāng)前列線值 key_l=P2&0 x0f; /讀入行線值 return(key_h+key_l);/鍵盤最后組合碼值 return(0 xff); /返回該值 void delay(void) /延時(shí)函數(shù)unsigned char i,j;for(i=

11、0;i20;i+)for(j=0;j250;j+);void main() /定義主函數(shù) uchar key; P1=0 xff; /設(shè)置數(shù)碼管位碼端電平,顯示按鍵上的按鍵碼 while(1) key=keyscan(); /調(diào)用鍵盤掃描, switch(key) case 0 xee:P0=table0;break; /顯示按鍵碼“0” case 0 xde:P0=table1;break; /顯示按鍵碼“1” case 0 xbe:P0=table2;break; /顯示按鍵碼“2” case 0 x7e:P0=table3;break; /顯示按鍵碼“3” case 0 xed:P0=t

12、able4;break; /顯示按鍵碼“4” case 0 xdd:P0=table5;break; /顯示按鍵碼“5” case 0 xbd:P0=table6;break; /顯示按鍵碼“6” case 0 x7d:P0=table7;break; /顯示按鍵碼“7” case 0 xeb:P0=table8;break; /顯示按鍵碼“8” case 0 xdb:P0=table9;break; /顯示按鍵碼“9” case 0 xbb:P0=table10;break; /顯示按鍵碼“a” case 0 x7b:P0=table11;break; /顯示按鍵碼“b” case 0 xe

13、7:P0=table12;break; /顯示按鍵碼“c” case 0 xd7:P0=table13;break; /顯示按鍵碼“d” case 0 xb7:P0=table14;break; /顯示按鍵碼“e” case 0 x77:P0=table15;break; /顯示按鍵碼“f” void send_char(unsigned char txd) / 傳送一個(gè)字符SBUF = txd;while(!TI);/ 等特?cái)?shù)據(jù)傳送TI = 0;/ 清除數(shù)據(jù)傳送標(biāo)志void send_str() / 傳送字串unsigned char i = 0;uint j;while(stri !=0 x00)SBUF = stri;while(TI=0);/ 等特?cái)?shù)據(jù)傳送TI = 0;/ 清除數(shù)據(jù)傳送標(biāo)志i+;/ 下一個(gè)字符for(j=0;j5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論