資源描述:
《51單片機(jī)4×4矩陣按鍵掃描方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、/*****4×4按鍵掃描******//***編程要點(diǎn)1.首先檢測(cè)是否有按鍵按下2.若有按鍵按下,即進(jìn)行行檢測(cè),列檢測(cè)3.行檢測(cè):高4位設(shè)為0,低4位為1,進(jìn)行檢測(cè)0x0f4.列檢測(cè):低4位設(shè)為0,高4位為1,進(jìn)行檢測(cè)0xf05.檢測(cè)按鍵是否松開6.送至LED顯示,前四個(gè)代表第幾行后四個(gè)代表第幾列P0為led燈口P2為按鍵接口****///#include#defineucharunsignedchar#definekeyP2//P2口定義,便于調(diào)用#defineledP0//P0口定義,便于調(diào)用unsignedcharline_num,row_num;//行列定義le
2、d_arry[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//數(shù)組定義,便于顯示//******檢測(cè)是否有按鍵按下*****//ucharCheck_Button(){key=0x0f;//高四位為0if(key==0x0f)//若無變化,證明無按鍵按下return0;//返回0else//否則return1;//返回1}//********行檢測(cè)********//ucharLine[]={0x0e,0x0d,0x0b,0x07};//那個(gè)按鍵按下,檢測(cè)出的狀態(tài)則對(duì)應(yīng)數(shù)組中的第幾個(gè)數(shù)voidCheck_Line(){uchari;key=0x0
3、f;//高四位為0for(i=0;i<4;i++){if(key==Line[i]){line_num=i;//取出檢測(cè)值break;//結(jié)束行檢測(cè)}}}//********列檢測(cè)*********//ucharRow[]={0xe0,0xd0,0xb0,0x70};//那個(gè)按鍵按下,檢測(cè)出的狀態(tài)則對(duì)應(yīng)數(shù)組中的第幾個(gè)數(shù)voidCheck_Row(){ucharj;key=0xf0;//低4位置0for(j=0;j<4;j++){if(key==Row[j]){row_num=j;//取出檢測(cè)值break;//結(jié)束行檢測(cè)}}}/*******按鍵松開檢測(cè)*********/ucharChec
4、k_Release(){key=0xf0;//低四位為0if(key==0xf0)//若無變化,證明按鍵松開return0;//返回0else//否則,按鍵未松開return1;//返回1}//*********主函數(shù)*********//intmain(){key=0xff;//按鍵初始化led=0xff;//關(guān)閉LED燈while(1){while(!Check_Button());//若無按鍵按下,則等待,若有繼續(xù)下一步Check_Line();//行檢測(cè)Check_Row();//列檢測(cè)while(Check_Release());//檢測(cè)按鍵是否松開led=led_arry[li
5、ne_num]&led_arry[row_num+4];//送至led顯示/*eg:如果是第三行第二列按鍵按下則第3個(gè)、第6(2列+4)個(gè)LED燈亮如下圖所示(Proteus仿真電路圖)*/}}