單片機(jī)實(shí)例之按鍵原理演示幻燈片_第1頁(yè)
單片機(jī)實(shí)例之按鍵原理演示幻燈片_第2頁(yè)
單片機(jī)實(shí)例之按鍵原理演示幻燈片_第3頁(yè)
單片機(jī)實(shí)例之按鍵原理演示幻燈片_第4頁(yè)
單片機(jī)實(shí)例之按鍵原理演示幻燈片_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1,課題三(實(shí)例)之按鍵,任務(wù)一獨(dú)立式按鍵控制的數(shù)碼管顯示任務(wù)二矩陣鍵盤(pán)數(shù)碼管顯示,2,任務(wù)一獨(dú)立式按鍵控制的數(shù)碼管顯示,本任務(wù)是利用獨(dú)立按鍵實(shí)現(xiàn)對(duì)數(shù)碼進(jìn)行控制,記錄按鍵的次數(shù),每當(dāng)按下一次鍵時(shí),計(jì)數(shù)器加1,將計(jì)數(shù)器的值送數(shù)碼管顯示,當(dāng)計(jì)數(shù)器加到10時(shí),則歸零重新計(jì)數(shù)。設(shè)P0口連接按鍵,對(duì)Key1進(jìn)行計(jì)數(shù)P1口連接數(shù)碼管,3,圖6-2鍵盤(pán)控制原理圖,4,為了實(shí)現(xiàn)用按鍵控制LED的顯示,首先要使單片機(jī)讀入按鍵的狀態(tài),再根據(jù)鍵盤(pán)的狀態(tài)去控制LED的亮滅。對(duì)LED的控制,在前面的課題中已經(jīng)講了,這里不再作重點(diǎn)講解,僅僅作為一個(gè)鍵盤(pán)控制對(duì)象的例子。根據(jù)圖6-2所示的硬件電路,每當(dāng)按下按鍵時(shí),單片機(jī)引腳P0.0將為低電平,程序運(yùn)行時(shí),需要檢測(cè)P0.0引腳是否為低電平,若P0.0引腳為低電平,表示按鍵已按下。當(dāng)每次按下按鍵時(shí),則使P1口輸出的數(shù)據(jù)變化一次,輸出不同數(shù)據(jù),對(duì)應(yīng)的程序設(shè)計(jì)框圖如圖6-4所示。,程序設(shè)計(jì)分析,5,6,一、按鍵的特性作為機(jī)械按鈕,鍵按下或者放開(kāi)時(shí),都存在著接通或斷開(kāi)的不穩(wěn)定現(xiàn)象,從而使信號(hào)電平具有抖動(dòng)現(xiàn)象,這種現(xiàn)象稱為抖動(dòng)。由于按鍵的抖動(dòng),使按鍵對(duì)應(yīng)的輸出電平若干個(gè)干擾脈沖,如圖6-5所示。為了保證每按下一次按鍵,單片機(jī)程序只動(dòng)作一次,就需要消除因按鍵的抖動(dòng)現(xiàn)象而引起的錯(cuò)誤動(dòng)作,具體的處理方式分為硬件消除抖動(dòng)和軟件消除抖動(dòng),簡(jiǎn)稱消抖。,鍵盤(pán)電路原理,7,二、硬件消抖圖中兩個(gè)“與非”門(mén)構(gòu)成一個(gè)RS觸發(fā)器。當(dāng)按鍵未按下時(shí),輸出為1;當(dāng)鍵按下時(shí),輸出為0。此時(shí)即使因按鍵的機(jī)械性能,使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(kāi)(抖動(dòng)跳開(kāi)B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會(huì)產(chǎn)生抖動(dòng)的波形。也就是說(shuō),即使B點(diǎn)的電壓波形是抖動(dòng)的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。,硬件消抖動(dòng)一般用于按鍵較少的情況。,8,三、軟件消抖如果按鍵較多,常用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。,思考:為什么要等鍵釋放?若不等會(huì)出現(xiàn)什么情況?,9,1、C語(yǔ)言程序:#includesbitP0_0=P00;unsignedcharcount;unsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;voiddelay10ms()unsignedchari,j;for(i=250;i0;i-)for(j=248;j0;j-);,10,voidmain(void)while(1)if(P0_0=0)delay10ms();if(P0_0=0)count+;if(count=10)count=0;while(P0_0=0);P1=tablecount;,11,2、匯編程序ORG00hSTART:MOVR1,#00H;初始化R1為0,REL:JBP0.3,REL;判斷SP1是否按下LCALLDELAY;若按下,則延時(shí)10ms左右JBP0.3,REL;再判斷SP1是否真得按下MOVA,R1MOVDPTR,#TABLEMOVCA,A+DPTRMOVP1,AINCR1JNBP0.3,$;等待SP1釋放CJNER1,#10,REL,12,SJMPSTART;繼續(xù)對(duì)K1按鍵掃描DELAY:MOVR6,#20;延時(shí)10ms子程序L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND,13,練習(xí):編寫(xiě)程序使得K0按下時(shí)顯示1,K7按下時(shí)顯示8,無(wú)鍵按下時(shí)顯示0,有多鍵按下時(shí)顯示P。,14,任務(wù)二獲取矩陣鍵盤(pán)的鍵值,本任務(wù)目標(biāo)是用矩陣鍵盤(pán)控制LED實(shí)現(xiàn)一個(gè)矩陣鍵盤(pán)的按鍵值。,15,編寫(xiě)程序使得P0顯示按鍵的行號(hào),P2口顯示按鍵的列號(hào)。,16,在單片機(jī)程序中,對(duì)多個(gè)鍵的處理應(yīng)包括以下三項(xiàng)內(nèi)容:鍵輸入檢查鍵盤(pán)是否有鍵被按下,并消除按鍵抖動(dòng)。鍵譯碼(掃描法或反轉(zhuǎn)法)即獲取是哪個(gè)鍵按下,得到按鍵的行號(hào),和列號(hào);有時(shí)還需計(jì)算鍵碼(每個(gè)按鍵編號(hào),對(duì)于4*4的矩陣按鍵,鍵碼共16個(gè)為0,15)。鍵結(jié)束即檢查按鍵是否抬起,這樣使得一次按鍵只做一次處理。鍵處理根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。,一、鍵盤(pán)處理,17,檢查鍵盤(pán)是否有鍵被按下,并消除按鍵抖動(dòng)。代碼flag=0;P1=0 x0F;/高四位是列線輸出0,低四位是行線讀入前寫(xiě)1if(P1,鍵輸入,18,掃描鍵盤(pán)行列式鍵盤(pán)的具體識(shí)別方法有掃描法和反轉(zhuǎn)法。掃描法即用列線輸出,行線輸入(可交換行線和列線的輸入、輸出關(guān)系)。其中,列線逐列輸出0,某行有鍵按下,行線有0輸入,若無(wú)按鍵,行線輸入全部為1。當(dāng)有鍵按下時(shí),根據(jù)行線和列線可最終確定哪個(gè)按鍵被按下。反轉(zhuǎn)法行線和列線交換輸入、輸出,分兩步獲取按鍵的鍵號(hào),但是在多鍵同時(shí)按下時(shí)不能準(zhǔn)確判斷。,鍵譯碼,19,代碼獲取行號(hào)temp=0;P1=0 x0F;/低四位輸入輸入前寫(xiě)1/列為高四位低電平輸出temp=P1;/讀P1口temp=(temp/多個(gè)按鍵被按下,或無(wú)鍵按下,鍵譯碼反轉(zhuǎn)法,20,代碼獲取列號(hào)P1=0 xF0;/列高四位輸入,輸入前寫(xiě)1/行為低四位,低電平輸出temp=P1;/讀P1口temp=(temp4),鍵譯碼反轉(zhuǎn)法,21,代碼獲取列號(hào)(row,col)ucharcodescan4=0 xEF,0 xDF,0 xBF,0 x7F;for(i=0;i4;i+)P1=scani;/低四位輸入掃描第0列,p1.4為低電平temp=P1;/讀P1口temp=(temp/多個(gè)按鍵被按下,或無(wú)鍵按下計(jì)算鍵值key=,鍵譯碼掃描法,22,即檢查按鍵是否抬起,這樣使得一次按鍵只做一次處理。代碼flag=0;P1=0 x0F;if(P1,鍵結(jié)束,23,根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。代碼unsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;P0=tablerow;P2=tablecol;,鍵處理,24,主程序,while(1)if(有鍵按下)鍵譯碼等待鍵結(jié)束鍵處理,25,練習(xí):編寫(xiě)程序使得P0顯示鍵碼的十位,P2口顯示鍵碼的個(gè)位。,26,任務(wù)三簡(jiǎn)易計(jì)算器,本任務(wù)目標(biāo)是用矩陣鍵盤(pán)控制數(shù)碼管實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器。,27,圖4-7簡(jiǎn)易計(jì)算器的電路原理圖,28,在單片機(jī)程序中,對(duì)多個(gè)鍵的處理應(yīng)包括以下三項(xiàng)內(nèi)容:鍵輸入檢查鍵盤(pán)是否有鍵被按下,并消除按鍵抖動(dòng),獲得或規(guī)定(單個(gè)按鍵)按鍵的鍵號(hào)??梢杂脛?dòng)態(tài)顯示函數(shù)代替消抖用的延時(shí)函數(shù)。鍵譯碼即獲取是哪個(gè)鍵按下,用鍵值給各個(gè)按鍵編號(hào),對(duì)于4*4的矩陣按鍵,鍵值共16個(gè)為0,15??蓪㈡I值分配為:數(shù)字鍵09、功能鍵0AH0FH,是按鍵在物理位置上的人為規(guī)定數(shù)值。鍵結(jié)束鍵處理根據(jù)鍵值執(zhí)行不同程序段。如:若鍵

溫馨提示

  • 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)論