版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
課題三(實(shí)例)之按鍵任務(wù)一獨(dú)立式按鍵控制的數(shù)碼管顯示任務(wù)二矩陣鍵盤數(shù)碼管顯示任務(wù)一獨(dú)立式按鍵控制的數(shù)碼管顯示
本任務(wù)是利用獨(dú)立按鍵實(shí)現(xiàn)對數(shù)碼進(jìn)行控制,記錄按鍵的次數(shù),每當(dāng)按下一次鍵時,計(jì)數(shù)器加1,將計(jì)數(shù)器的值送數(shù)碼管顯示,當(dāng)計(jì)數(shù)器加到10時,則歸零重新計(jì)數(shù)。設(shè)P0口連接按鍵,對Key1進(jìn)行計(jì)數(shù)P1口連接數(shù)碼管
圖6-2鍵盤控制原理圖
為了實(shí)現(xiàn)用按鍵控制LED的顯示,首先要使單片機(jī)讀入按鍵的狀態(tài),再根據(jù)鍵盤的狀態(tài)去控制LED的亮滅。對LED的控制,在前面的課題中已經(jīng)講了,這里不再作重點(diǎn)講解,僅僅作為一個鍵盤控制對象的例子。根據(jù)圖6-2所示的硬件電路,每當(dāng)按下按鍵時,單片機(jī)引腳P0.0將為低電平,程序運(yùn)行時,需要檢測P0.0引腳是否為低電平,若P0.0引腳為低電平,表示按鍵已按下。當(dāng)每次按下按鍵時,則使P1口輸出的數(shù)據(jù)變化一次,輸出不同數(shù)據(jù),對應(yīng)的程序設(shè)計(jì)框圖如圖6-4所示。程序設(shè)計(jì)分析初始化計(jì)數(shù)器+1送顯是否按下鍵否是圖6-4鍵控計(jì)數(shù)顯示流程圖
一、按鍵的特性
作為機(jī)械按鈕,鍵按下或者放開時,都存在著接通或斷開的不穩(wěn)定現(xiàn)象,從而使信號電平具有抖動現(xiàn)象,這種現(xiàn)象稱為抖動。由于按鍵的抖動,使按鍵對應(yīng)的輸出電平若干個干擾脈沖,如圖6-5所示。為了保證每按下一次按鍵,單片機(jī)程序只動作一次,就需要消除因按鍵的抖動現(xiàn)象而引起的錯誤動作,具體的處理方式分為硬件消除抖動和軟件消除抖動,簡稱消抖。鍵盤電路原理抖動時間<10ms開關(guān)動作時間>100ms“1”“0”<10ms圖6-5按鍵的波形二、硬件消抖圖中兩個“與非”門構(gòu)成一個RS觸發(fā)器。當(dāng)按鍵未按下時,輸出為1;當(dāng)鍵按下時,輸出為0。此時即使因按鍵的機(jī)械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開(抖動跳開B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會產(chǎn)生抖動的波形。
也就是說,即使B點(diǎn)的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。硬件消抖動一般用于按鍵較少的情況。三、軟件消抖如果按鍵較多,常用軟件方法去抖,即檢測出鍵閉合后執(zhí)行一個延時程序,產(chǎn)生5ms~10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。
當(dāng)檢測到按鍵釋放后,也要給5ms~10ms的延時,待后沿抖動消失后才能轉(zhuǎn)入該鍵的處理程序。延時等待10ms
仍有按鍵信號?Y
有按鍵信號?NYN按鍵處理
按鍵釋放?NY圖6-7軟件消抖的流程圖思考:為什么要等鍵釋放?
若不等會出現(xiàn)什么情況?1、C語言程序:#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];} } }}2、匯編程序ORG00hSTART: MOVR1,#00H;初始化R1為0,REL: JBP0.3,REL;判斷SP1是否按下
LCALLDELAY;若按下,則延時10ms左右
JBP0.3,REL;再判斷SP1是否真得按下
MOVA,R1 MOVDPTR,#TABLE MOVCA,@A+DPTR MOVP1,A INCR1 JNBP0.3,$;等待SP1釋放
CJNER1,#10,REL SJMPSTART;繼續(xù)對K1按鍵掃描DELAY: MOVR6,#20;延時10ms子程序L1: MOVR7,#248 DJNZR7,$ DJNZR6,L1 RETTABLE:DB3FH,06H,5BH,4FH,66H,6DHDB7DH,07H,7FH,6FHEND練習(xí):編寫程序使得K0按下時顯示1,K7按下時顯示8,無鍵按下時顯示0,有多鍵按下時顯示P。任務(wù)二獲取矩陣鍵盤的鍵值
本任務(wù)目標(biāo)是用矩陣鍵盤控制LED實(shí)現(xiàn)一個矩陣鍵盤的按鍵值。編寫程序使得P0顯示按鍵的行號,P2口顯示按鍵的列號。
在單片機(jī)程序中,對多個鍵的處理應(yīng)包括以下三項(xiàng)內(nèi)容:鍵輸入檢查鍵盤是否有鍵被按下,并消除按鍵抖動。鍵譯碼(掃描法或反轉(zhuǎn)法)即獲取是哪個鍵按下,得到按鍵的行號,和列號;有時還需計(jì)算鍵碼(每個按鍵編號,對于4*4的矩陣按鍵,鍵碼共16個為[0,15])。鍵結(jié)束即檢查按鍵是否抬起,這樣使得一次按鍵只做一次處理。鍵處理根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。一、鍵盤處理檢查鍵盤是否有鍵被按下,并消除按鍵抖動。代碼flag=0;P1=0x0F;//高四位是列線輸出0,低四位是行線讀入前寫1if(P1&0x0F!=0x0F){ delay(); if(P1&0x0F!=0x0F) flag=1;}鍵輸入掃描鍵盤行列式鍵盤的具體識別方法有掃描法和反轉(zhuǎn)法。掃描法即用列線輸出,行線輸入(可交換行線和列線的輸入、輸出關(guān)系)。其中,列線逐列輸出0,某行有鍵按下,行線有0輸入,若無按鍵,行線輸入全部為1。當(dāng)有鍵按下時,根據(jù)行線和列線可最終確定哪個按鍵被按下。反轉(zhuǎn)法行線和列線交換輸入、輸出,分兩步獲取按鍵的鍵號,但是在多鍵同時按下時不能準(zhǔn)確判斷。鍵譯碼代碼獲取行號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;//多個按鍵被按下,或無鍵按下}鍵譯碼——反轉(zhuǎn)法代碼獲取列號
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;//多個按鍵被按下,或無鍵按下}計(jì)算鍵值key=row*4+col;鍵譯碼——反轉(zhuǎn)法代碼獲取列號(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;//多個按鍵被按下,或無鍵按下}計(jì)算鍵值key=鍵譯碼——掃描法即檢查按鍵是否抬起,這樣使得一次按鍵只做一次處理。代碼flag=0;P1=0x0F;if(P1&0x0F!=0){ delay(); if(P1&0x0F!=0) flag=1;}鍵結(jié)束根據(jù)鍵碼執(zhí)行不同按鍵處理程序段。代碼unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};P0=
table[row];P2=table[col];鍵處理主程序while(1){if(有鍵按下){鍵譯碼等待鍵結(jié)束鍵處理}}練習(xí):編寫程序使得P0顯示鍵碼的十位,P2口顯示鍵碼的個位。任務(wù)三簡易計(jì)算器
本任務(wù)目標(biāo)是用矩陣鍵盤控制數(shù)碼管實(shí)現(xiàn)一個簡易計(jì)算器。圖4-7簡易計(jì)算器的電路原理圖
在單片機(jī)程序中,對多個鍵的處理應(yīng)包括以下三項(xiàng)內(nèi)容:鍵輸入檢查鍵盤是否有鍵被按下,并消除按鍵抖動,獲得或規(guī)定(單個按鍵)按鍵的鍵號??梢杂脛討B(tài)顯示函數(shù)代替消抖用的延時函數(shù)。鍵譯碼即獲取是哪個鍵按下,用鍵值給各個按鍵編號,對于4*4的矩陣按鍵,鍵值共16個為[0,15]??蓪㈡I值分配為:數(shù)字鍵0~9、功能鍵0AH~0FH,是按鍵在物理位置上的人為規(guī)定數(shù)值。鍵結(jié)束鍵處理根據(jù)鍵值執(zhí)行不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 精密儀器國際快遞服務(wù)合同
- 汽車制造企業(yè)破產(chǎn)重整計(jì)劃的技術(shù)改造
- 2024年度浙江省公共營養(yǎng)師之四級營養(yǎng)師綜合練習(xí)試卷B卷附答案
- 2024年度浙江省公共營養(yǎng)師之二級營養(yǎng)師真題練習(xí)試卷A卷附答案
- 《家具設(shè)計(jì)方案》課件
- 交通運(yùn)輸工程項(xiàng)目審批流程概述
- 便利店加盟合同范本下載
- 四年級語文下冊教學(xué)計(jì)劃與家長溝通策略
- 標(biāo)準(zhǔn)版離婚協(xié)議書模板-離婚心理輔導(dǎo)
- 社區(qū)衛(wèi)生清掃保潔安全管理方案
- 2025年病案編碼員資格證試題庫(含答案)
- 企業(yè)財務(wù)三年戰(zhàn)略規(guī)劃
- 提高膿毒性休克患者1h集束化措施落實(shí)率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
- 新疆2024年中考數(shù)學(xué)試卷(含答案)
- 2024測繪個人年終工作總結(jié)
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
- 制造業(yè)生產(chǎn)流程作業(yè)指導(dǎo)書
- DB34∕T 4444-2023 企業(yè)信息化系統(tǒng)上云評估服務(wù)規(guī)范
- 福建中閩能源股份有限公司招聘筆試題庫2024
評論
0/150
提交評論