




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)實(shí)例之按鍵原理任務(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ù)碼管
圖6-2鍵盤控制原理圖
為了實(shí)現(xiàn)用按鍵控制LED得顯示,首先要使單片機(jī)讀入按鍵得狀態(tài),再根據(jù)鍵盤得狀態(tài)去控制LED得亮滅。對(duì)LED得控制,在前面得課題中已經(jīng)講了,這里不再作重點(diǎn)講解,僅僅作為一個(gè)鍵盤控制對(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ì)分析初始化計(jì)數(shù)器+1送顯是否按下鍵否是圖6-4鍵控計(jì)數(shù)顯示流程圖
一、按鍵得特性
作為機(jī)械按鈕,鍵按下或者放開時(shí),都存在著接通或斷開得不穩(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)稱消抖。鍵盤電路原理抖動(dòng)時(shí)間<10ms開關(guān)動(dòng)作時(shí)間>100ms“1”“0”<10ms圖6-5按鍵的波形二、硬件消抖圖中兩個(gè)“與非”門構(gòu)成一個(gè)RS觸發(fā)器。當(dāng)按鍵未按下時(shí),輸出為1;當(dāng)鍵按下時(shí),輸出為0。此時(shí)即使因按鍵得機(jī)械性能,使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(抖動(dòng)跳開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)一般用于按鍵較少得情況。三、軟件消抖如果按鍵較多,常用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms~10ms得延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵得狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。
當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms得延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵得處理程序。延時(shí)等待10ms
仍有按鍵信號(hào)?Y
有按鍵信號(hào)?NYN按鍵處理
按鍵釋放?NY圖6-7軟件消抖的流程圖思考:為什么要等鍵釋放?
若不等會(huì)出現(xiàn)什么情況?1、C語(yǔ)言程序:#include<reg51、H>sbitP0_0=P0^0;unsignedcharcount;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay10ms(){ unsignedchari,j; for(i=250;i>0;i--) for(j=248;j>0;j--);}voidmain(void){ while(1){ if(P0_0==0) { delay10ms(); if(P0_0==0) { count++; if(count==10)count=0; while(P0_0==0); P1=table[count];} } }}大家學(xué)習(xí)辛苦了,還是要堅(jiān)持繼續(xù)保持安靜2、匯編程序ORG00hSTART: MOVR1,#00H;初始化R1為0,REL: JBP0、3,REL;判斷SP1就是否按下
LCALLDELAY;若按下,則延時(shí)10ms左右
JBP0、3,REL;再判斷SP1就是否真得按下
MOVA,R1 MOVDPTR,#TABLE MOVCA,A+DPTR MOVP1,A INCR1 JNBP0、3,$;等待SP1釋放
CJNER1,#10,REL SJMPSTART;繼續(xù)對(duì)K1按鍵掃描DELAY: MOVR6,#20;延時(shí)10ms子程序L1: MOVR7,#248 DJNZR7,$ DJNZR6,L1 RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND練習(xí):編寫程序使得K0按下時(shí)顯示1,K7按下時(shí)顯示8,無(wú)鍵按下時(shí)顯示0,有多鍵按下時(shí)顯示P。任務(wù)二獲取矩陣鍵盤得鍵值
本任務(wù)目標(biāo)就是用矩陣鍵盤控制LED實(shí)現(xiàn)一個(gè)矩陣鍵盤得按鍵值。編寫程序使得P0顯示按鍵得行號(hào),P2口顯示按鍵得列號(hào)。
在單片機(jī)程序中,對(duì)多個(gè)鍵得處理應(yīng)包括以下三項(xiàng)內(nèi)容:鍵輸入檢查鍵盤就是否有鍵被按下,并消除按鍵抖動(dòng)。鍵譯碼(掃描法或反轉(zhuǎn)法)即獲取就是哪個(gè)鍵按下,得到按鍵得行號(hào),和列號(hào);有時(shí)還需計(jì)算鍵碼(每個(gè)按鍵編號(hào),對(duì)于4*4得矩陣按鍵,鍵碼共16個(gè)為[0,15])。鍵結(jié)束即檢查按鍵就是否抬起,這樣使得一次按鍵只做一次處理。鍵處理根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。一、鍵盤處理檢查鍵盤就是否有鍵被按下,并消除按鍵抖動(dòng)。代碼flag=0;P1=0x0F;//高四位就是列線輸出0,低四位就是行線讀入前寫1if(P1&0x0F!=0x0F){ delay(); if(P1&0x0F!=0x0F) flag=1;}鍵輸入掃描鍵盤行列式鍵盤得具體識(shí)別方法有掃描法和反轉(zhuǎn)法。掃描法即用列線輸出,行線輸入(可交換行線和列線得輸入、輸出關(guān)系)。其中,列線逐列輸出0,某行有鍵按下,行線有0輸入,若無(wú)按鍵,行線輸入全部為1。當(dāng)有鍵按下時(shí),根據(jù)行線和列線可最終確定哪個(gè)按鍵被按下。反轉(zhuǎn)法行線和列線交換輸入、輸出,分兩步獲取按鍵得鍵號(hào),但就是在多鍵同時(shí)按下時(shí)不能準(zhǔn)確判斷。鍵譯碼代碼獲取行號(hào)temp=0;P1=0x0F;//低四位輸入輸入前寫1//列為高四位低電平輸出temp=P1;//讀P1口
temp=(~temp&0x0F);//屏蔽高四位
switch(temp){ case1:
row=0;break;//p1、0被拉低 case2:
row=1;break;//p1、1被拉低 case4:
row=2;break;//p1、2被拉低 case8:
row=3;break;//p1、3被拉低 default:
row=16;//多個(gè)按鍵被按下,或無(wú)鍵按下}鍵譯碼——反轉(zhuǎn)法代碼獲取列號(hào)
P1=0xF0;//列高四位輸入,輸入前寫1//行為低四位,低電平輸出temp=P1;//讀P1口temp=(~(temp>>4)&0x0F);switch(temp){ case1:col=0;break;//p1、4被拉低 case2:
col=1;break;//p1、5被拉低 case4:
col=2;break;//p1、6被拉低 case8:
col=3;break;//p1、7被拉低 default:
col=16;//多個(gè)按鍵被按下,或無(wú)鍵按下}計(jì)算鍵值key=row*4+col;鍵譯碼——反轉(zhuǎn)法代碼獲取列號(hào)(row,col)ucharcodescan[4]={0xEF,0xDF,0xBF,0x7F};for(i=0;i<4;i++){P1=scan[i];//低四位輸入掃描第0列,p1、4為低電平temp=P1;//讀P1口
temp=~(temp&0x0F); //屏蔽高四位
if(temp==1)//p1、0被拉低
row=0,col=I,break;elseif(temp==2)//p1、1被拉低
row=1,col=i,break;elseif(temp==4)//p1、2被拉低
row=2,col=i,break;elseif(temp==8)//p1、3被拉低
row=3,col=i,break;elserow=16,col=16;//多個(gè)按鍵被按下,或無(wú)鍵按下}計(jì)算鍵值key=鍵譯碼——掃描法即檢查按鍵就是否抬起,這樣使得一次按鍵只做一次處理。代碼flag=0;P1=0x0F;if(P1&0x0F!=0){ delay(); if(P1&0x0F!=0) flag=1;}鍵結(jié)束根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。代碼unsignedcharcodetable[]={0x3f,0x0
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年自然科學(xué)碩士生入學(xué)考試試題及答案
- 上海工藝美術(shù)職業(yè)學(xué)院《基礎(chǔ)醫(yī)學(xué)概要》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年醫(yī)學(xué)檢驗(yàn)師考試試卷及答案對(duì)比
- 應(yīng)用統(tǒng)計(jì)入門2025年考試試題及答案
- 山西省朔州市懷仁市第一中學(xué)2025年高三年級(jí)英語(yǔ)試題二模試題含解析
- 2025年職業(yè)技能鑒定考試試卷及答案
- 遼寧省丹東市鳳城市白旗中學(xué)2025年初三期末調(diào)研測(cè)試物理試題含解析
- 山西省懷仁一中2025屆高三.十三校聯(lián)考.第一次考試英語(yǔ)試題試卷含解析
- 工業(yè)廢水處理藥劑租賃及環(huán)保監(jiān)管服務(wù)合同
- 工業(yè)級(jí)材料扭轉(zhuǎn)試驗(yàn)機(jī)租賃與設(shè)備定期檢修合同
- 強(qiáng)基計(jì)劃語(yǔ)文試題及答案
- 2025至2030中國(guó)玻尿酸市場(chǎng)前景預(yù)判及未來(lái)消費(fèi)規(guī)模調(diào)研報(bào)告
- 2025-2030中國(guó)船舶行業(yè)發(fā)展分析及發(fā)展前景與投資研究報(bào)告
- 耐藥菌耐藥性監(jiān)測(cè)策略-全面剖析
- 2025年中國(guó)陳皮市場(chǎng)調(diào)查研究報(bào)告
- 2024年農(nóng)藝師考試考試形式試題及答案
- 老年綜合評(píng)估技術(shù)應(yīng)用中國(guó)專家共識(shí)解讀
- 北京市通州區(qū)2025年初中學(xué)業(yè)水平模擬考試(一模)英語(yǔ)試卷(含答案)
- 手術(shù)中大出血搶救流程
- 初中語(yǔ)文第23課《“蛟龍”探?!氛n件-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 2025重慶武工工業(yè)技術(shù)研究院有限公司招聘15人筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論