單片機(jī)應(yīng)用技術(shù)匯編+C51項(xiàng)目教程課件_第1頁
單片機(jī)應(yīng)用技術(shù)匯編+C51項(xiàng)目教程課件_第2頁
單片機(jī)應(yīng)用技術(shù)匯編+C51項(xiàng)目教程課件_第3頁
單片機(jī)應(yīng)用技術(shù)匯編+C51項(xiàng)目教程課件_第4頁
單片機(jī)應(yīng)用技術(shù)匯編+C51項(xiàng)目教程課件_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

書名:

單片機(jī)應(yīng)用技術(shù)——匯編+C51ISBN:978-7-111-50040-7出版社:機(jī)械工業(yè)出版社本書配有電子課件項(xiàng)目3可以調(diào)控的走馬燈設(shè)計(jì)與制作

走在大街上,看到五彩斑斕的走馬燈,你是不是也想自己一試伸手,親自做一個(gè)出來?本項(xiàng)目就將設(shè)計(jì)一個(gè)帶按鍵控制的非常漂亮的走馬燈效果。本項(xiàng)目涉及到的知識點(diǎn)有鍵盤接口、中斷系統(tǒng)、定時(shí)器定時(shí)、C51編程。

任務(wù)3.1學(xué)習(xí)鍵盤接口技術(shù)任務(wù)3.2可以調(diào)控的走馬燈的設(shè)計(jì)與仿真下一頁任務(wù)3.1學(xué)習(xí)鍵盤接口技術(shù)鍵盤接口是單片機(jī)系統(tǒng)的一個(gè)非常常見、實(shí)用的接口。用于實(shí)現(xiàn)人機(jī)交互中指令的輸入。常見的鍵盤接口有獨(dú)立式按鍵和行列式(也叫矩陣式)鍵盤。3.1.1獨(dú)立式鍵盤應(yīng)用3.1.2按鍵的消抖處理3.1.3矩陣式鍵盤應(yīng)用

上一頁下一頁返回獨(dú)立式按鍵的結(jié)構(gòu)特點(diǎn):每個(gè)按鍵單獨(dú)占有一根I/O口線,按鍵的兩個(gè)端子一端接地,另外一端接到一個(gè)單獨(dú)的I/O口線,同時(shí)通過上拉電阻接到+5v電源端。每個(gè)按鍵的工作不會影響其它I/O口線的狀態(tài)。在此電路中,按鍵輸入為低電平有效,上拉電阻保證了按鍵斷開時(shí),I/O口線有確定的高電平。當(dāng)I/O口線內(nèi)部有上拉電阻時(shí),外電路可以不配置上拉電阻。上一頁下一頁返回二、獨(dú)立式按鍵的軟件設(shè)計(jì)按上圖的電路,設(shè)計(jì)出獨(dú)立式鍵盤程序如下,此程序中Keyfun1~Keyfun8分別為每個(gè)按鍵對應(yīng)的功能子程序標(biāo)號(可根據(jù)實(shí)際需要編寫),按鍵去除抖動采用軟件延時(shí),按鍵的接口選用P1端口。匯編源程序清單如下:START:MOVA,P1;讀入鍵盤狀態(tài)

MOV30H,A;保存鍵盤狀態(tài)值

LCALLDL10ms;延時(shí)10ms消抖

MOVA,P1;再讀鍵盤狀態(tài)

CJNEA,30H,RETURN;再次結(jié)果不同。說明是抖動引起,返回

CJNEA,#0FFH,KEY-1;確認(rèn)是否有鍵按下

LJMPRETURN上一頁下一頁返回KEY-1:CJNEA,#0FEH,KEY-2;K1鍵未按下,轉(zhuǎn)KEY-2LJMPKeyfun1;是Kl鍵按下,轉(zhuǎn)KEY1對應(yīng)的功能子程序KEY-2:CJNEA,#0FDH,KEY-3;K2鍵未按下,轉(zhuǎn)KEY-3LJMPKeyfun2;K2鍵按下,轉(zhuǎn)Keyfun2處理KEY-3:CJNEA,#0FBH,KEY-4;K3鍵未按下,轉(zhuǎn)KEY-4LJMPKeyfun3;K3鍵按下,轉(zhuǎn)Keyfun3處理KEY-4:CJNEA,#0F7H,KEY-5LJMPKeyfun4KEY-5:CJNEA,#0EFH,KEY-6LJMPKeyfun5KEY-6:CJNEA,#0DFH,KEY-7LJMPKeyfun6KEY-7:CJNEA,#0BFH,KEY-8LJMPKeyfun7KEY-8:CJNEA,#7FH,RETURN;K8未按下,返回

LJMPKeyfun8;K8鍵按下,轉(zhuǎn)Keyfun8處理RETURN:RET;重鍵或無鍵按下,不處理返回DL10ms:MOVR7,#12H;三循環(huán)延時(shí)程序,大約10ms。

D0:MOVR5,#10HD1:MOVR4,#10HD2:DJNZR4,$D3:DJNZR5,D1

DJNZR7,D0RET上一頁下一頁返回3.1.2按鍵的消抖處理在單片機(jī)應(yīng)用系統(tǒng)中所用的鍵盤按鍵是一種機(jī)械開關(guān),其機(jī)械觸點(diǎn)在閉合或斷開瞬間,會出現(xiàn)電壓抖動現(xiàn)象,如圖所示。為了保證按鍵識別的準(zhǔn)確性,可采用硬件消抖和軟件消抖兩種方式進(jìn)行消抖處理。硬件方法可采用RS觸發(fā)器等消抖電路。軟件方法則是采用時(shí)間延遲,由于鍵的前沿抖動時(shí)間大約為10ms左右,因此可在延時(shí)10ms后待按鍵穩(wěn)定閉合時(shí)再判別鍵盤的狀態(tài),若仍有按鍵閉合,則確認(rèn)有鍵按下,否則認(rèn)為是按鍵的抖動。上一頁下一頁返回例3-1:如圖所示,實(shí)現(xiàn)如下功能,按下某個(gè)鍵,在單個(gè)數(shù)碼管上顯示出鍵號。

上一頁下一頁返回本題中,按鍵全部為獨(dú)立式按鍵,讀取P1口的狀態(tài)即可判斷按下的是哪個(gè)鍵,讀取相應(yīng)的鍵的編碼送入P1口即可。C51源程序如下:#include<AT89X51.H>unsignedcharled[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8};voiddelay(){unsignedinti;for(i=0;i<2000;i++);}voidmain(){unsignedcharkey;while(1){key=P2;if(key!=0xFF)delay();上一頁下一頁返回3.1.3行列式鍵盤應(yīng)用

一、行列式鍵盤結(jié)構(gòu)上一頁下一頁返回二、行列式鍵盤按鍵識別如上圖所示AT89S51與4×4鍵盤的接口電路,按鍵識別時(shí)通過P1.0~P1.3(X0~X3)分別輸出低電平,檢測P1.4~P1.7(Y0~Y3)的狀態(tài)是否為低電平來確定是否有鍵按下,通常把X3~X0稱為行掃描輸出線,Y0~Y3稱為列檢測輸入線。具體識別過程如下:①判別鍵盤上有無鍵閉合。其方法為掃描口X0~X3輸出全“0”,讀Y0~Y3的狀態(tài),若為全“1”(鍵盤上列線全為高電平)則鍵盤上沒有閉合鍵,若Y0~Y3不為全“1”則有鍵處于閉合狀態(tài)。②去除鍵的機(jī)械抖動。其方法為判別到鍵盤上有鍵閉合后,可采用軟件延遲一段時(shí)間(一般為10ms)再判別鍵盤的狀態(tài),若仍為有鍵閉合狀態(tài),則認(rèn)為鍵盤上有一個(gè)確定的鍵被按下,否則認(rèn)為是鍵的抖動。上一頁下一頁返回③判別閉合鍵的鍵號。方法為對X0~X3每位依次分別輸出低電平,其它三位為高電平,對鍵盤的列線進(jìn)行檢測。即相應(yīng)的順次讀Y0~Y3的狀態(tài),若Y0~Y3為全“1”,則行線為0的這一行上沒有鍵閉合,否則這一行上有鍵閉合。閉合鍵的鍵號等于為低電平的列號加上為低電平行的首鍵號。例如:X0~X3輸出為1101時(shí),讀出Y0~Y3為1101,則第2行與第2列相交的鍵處于閉合狀態(tài),第2行的首鍵號為8,列號為2,閉合鍵的鍵號為:N=為低電平的行首鍵號+為低電平的列號=8+2=10④使CPU對鍵的一次閉合僅作一次處理。閉合鍵一次僅進(jìn)行一次鍵功能操作,采用的方法為等待閉合鍵釋放以后再把鍵值送入A中,然后執(zhí)行鍵功能操作。上一頁下一頁返回定時(shí)器中斷掃描方式是利用單片機(jī)內(nèi)部定時(shí)器產(chǎn)生定時(shí)中斷(例如100ms),CPU響應(yīng)中斷請求時(shí),對鍵盤進(jìn)行掃描和鍵值識別。定時(shí)中斷掃描方式的鍵盤接口電路與程序掃描法的接口電路相同。定時(shí)器中斷鍵盤掃描程序,實(shí)際上作為定時(shí)器中斷服務(wù)程序。這種方式雖然可以改善程序結(jié)構(gòu),但是多數(shù)掃描仍然可能為“空掃描”,CPU效率提高不大。另外一種中斷掃描方式是鍵盤按鍵中斷掃描方式。下圖是按鍵中斷掃描方式的AT89S51與鍵盤的接口電路任務(wù)3.2可以調(diào)控的走馬燈的設(shè)計(jì)與仿真3.2.1硬件電路設(shè)計(jì)3.2.2程序編制3.2.3綜合仿真調(diào)試上一頁下一頁返回3.2.1硬件電路設(shè)計(jì)本項(xiàng)目在P2和P0口連接16個(gè)共陽極的發(fā)光二極管,在P1口在第0、1、2設(shè)置3個(gè)獨(dú)立式按鍵,在P3口連接一只公陽極的7段數(shù)碼管。要實(shí)現(xiàn)的功能如下:模式鍵K1設(shè)置走馬燈的模式,共有8種模式可設(shè)置,每種模式對應(yīng)的16只二極管的走動模式。選擇某種模式后可在數(shù)碼管上顯示出模式號。加速鍵K2用來實(shí)現(xiàn)走馬燈的速度加速。減速鍵則用來實(shí)現(xiàn)走馬燈的速度減速。上一頁下一頁返回3.2.2程序編制本項(xiàng)目對應(yīng)的C51源程序如下:#include<AT89X51.h>#defineu8unsignedchar#defineu16unsignedintu8ModeNo;//模式編號u8MovingBit=0;//移動位數(shù)u8Tdx;//速度索引u8TCounter=0;//延時(shí)計(jì)數(shù)器u16Speed;//二極管移動速度bitDirection=1;//滾動方向u8codeModeDisplay[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8};u16code上一頁下一頁返回SpeedCommon[]={0,2,4,6,8,10,15,30,45,80,120,160,200,240,280};//速度常數(shù)//延時(shí)函數(shù)voidDelay(u16x){u8i;while(x--)for(i=0;i<120;i++);}//三按鍵識別函數(shù)u8GetKey(){u8K;if(P1==0xFF)return0;//如果沒有鍵按下,則返回0。Delay(10);switch(P1)//確認(rèn)有鍵按下,判斷是哪個(gè)鍵。{上一頁下一頁返回case0xFE:K=1;break;case0xFD:K=2;break;case0xFB:K=3;break;default:K=0;}while(P1!=0xFF);//等待按鍵釋放再返回鍵值。returnK;}//按鍵處理voidKeyProcess(u8Key){switch(Key){case1:Direction=1;MovingBit=0;ModeNo=(ModeNo+1)%8;P3=ModeDisplay[ModeNo];break;case2:if(Tdx>1)Speed=SpeedCommon[--Tdx];break;case3:if(Tdx<14)Speed=SpeedCommon[++Tdx];上一頁下一頁返回switch(ModeNo){case0:LedLight(0x0001<<MovingBit);break;case1:LedLight(0x8000>>MovingBit);break;case2:if(Direction)LedLight(0x0001<<MovingBit);elseLedLight(0x8000>>MovingBit);if(MovingBit==15)Direction=!Direction;break;case3:if(Direction)LedLight(~(0x0001<<MovingBit));elseLedLight(~(0x8000>>MovingBit));if(MovingBit==15)Direction=!Direction;break;case4:if(Direction)LedLight(0x000F<<MovingBit);elseLedLight(0xF000>>MovingBit);if(MovingBit==15)Direction=!Direction;break;case5:if(Direction)LedLight(~(0x000F<<MovingBit));elseLedLight(~(0xF000>>MovingBit));if(MovingBit==15)Direction=!Direction;break;上一頁下一頁返回case6:if(Direction)LedLight(0xFFFE<<MovingBit);elseLedLight(~(0x7FFF>>MovingBit));if(MovingBit==15)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論