




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
word文檔可自由復(fù)制編輯n單片機(jī)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告紅外探測姓名:學(xué)號(hào):班級(jí):指導(dǎo)老師:實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)8051定時(shí)器時(shí)間計(jì)時(shí)處理、按鍵掃描及LED數(shù)碼管顯示的設(shè)計(jì)方法。設(shè)計(jì)描述利用實(shí)驗(yàn)平臺(tái)上4個(gè)LED數(shù)碼管、蜂鳴器、LED燈及外加的紅外探測模塊,設(shè)計(jì)帶有時(shí)間顯示功能的紅外探測模塊,要求:在4位數(shù)碼管上顯示當(dāng)前時(shí)間。擁有三個(gè)模式:1、監(jiān)控模式:按key1進(jìn)入監(jiān)控模式,當(dāng)監(jiān)測到有人經(jīng)過時(shí)觸發(fā)5s倒計(jì)時(shí),在倒計(jì)時(shí)結(jié)束前按key3鍵可以退出,如果沒有按鍵則倒計(jì)時(shí)結(jié)束后開始報(bào)警,按key3鍵結(jié)束報(bào)警;2、歡迎模式:按key2進(jìn)入歡迎模式,當(dāng)監(jiān)測到有人經(jīng)過時(shí)播放音樂,按key2停止播放;3、計(jì)數(shù)模式:按key3進(jìn)入計(jì)數(shù)模式,當(dāng)監(jiān)測到有人經(jīng)過時(shí)計(jì)數(shù)加一,按key2鍵退出計(jì)數(shù)。按鍵4可以調(diào)整當(dāng)前的時(shí)間。硬件設(shè)計(jì)顯示模塊為了將時(shí)間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動(dòng)態(tài)顯示法,由于靜態(tài)顯示法需要數(shù)據(jù)鎖存器等較多硬件,可采用動(dòng)態(tài)顯示法實(shí)現(xiàn)LED顯示。方法是將所有位的段選線相應(yīng)并聯(lián),由一個(gè)8位I/O口控制,從而形成段選線的多路復(fù)用,同時(shí)各位的公共端分別由相應(yīng)的I/O線控制,實(shí)現(xiàn)分時(shí)選通。硬件電路圖如下,圖中10k電阻起到限流作用;三極管起到驅(qū)動(dòng)數(shù)碼管的作用。若不使用三極管,數(shù)碼管發(fā)光微弱。蜂鳴器模塊鬧鈴聲由交流蜂鳴器產(chǎn)生,電路圖如下。當(dāng)P1.7輸出不同頻率的方波,.蜂鳴器便會(huì)發(fā)出不同的聲音。整體硬件電路圖軟件設(shè)計(jì)計(jì)時(shí)模塊利用單片機(jī)定時(shí)器0完成計(jì)時(shí)功能。定時(shí)器0計(jì)時(shí)中斷程序每隔1ms中斷一次并當(dāng)作一個(gè)計(jì)數(shù),每中斷一次計(jì)數(shù)加1,當(dāng)計(jì)數(shù)1000次時(shí),則表示1s到了,秒變量加1。當(dāng)秒變量達(dá)到60時(shí),秒變量清零同時(shí)分變量加1。分變量達(dá)到60時(shí),分變量清零同時(shí)時(shí)變量加1。當(dāng)時(shí)變量達(dá)到24時(shí),時(shí)變量清零。由于實(shí)驗(yàn)要求由LED閃動(dòng)做秒顯示,因此每隔0.5s即計(jì)數(shù)500次時(shí),P1^1(驅(qū)動(dòng)LED燈)取反一次,從而實(shí)現(xiàn)LED燈閃動(dòng)一次為1s,秒變量加1。該模塊流程圖如下:顯示模塊為在各位LED上分別顯示不同的字符,需要采用循環(huán)掃描顯示的方法,即在某一時(shí)刻只選通一條位選線,并輸出該位的字段碼,其余位則處于關(guān)閉狀態(tài)??梢姡魑籐ED顯示的字符并不是同時(shí)出現(xiàn)的,但由于人眼的視覺暫留及LED的余輝,可以達(dá)到同時(shí)顯示的效果。程序流程圖如下:采用動(dòng)態(tài)顯示時(shí),需要確定LED各位顯示的保持時(shí)間。由于LED從導(dǎo)通到發(fā)光有延時(shí),時(shí)間太短會(huì)造成發(fā)光微弱,顯示不清晰;如果顯示時(shí)間太長,則會(huì)占用較多的CPU時(shí)間。按鍵判斷及處理程序按鍵的閉合與否,反映在電壓上就是呈現(xiàn)出高電平或低電平。由于機(jī)械觸點(diǎn)的彈性作用,在閉合及斷開的瞬間,電壓信號(hào)伴隨有一定時(shí)間的抖動(dòng),抖動(dòng)時(shí)間與按鍵的機(jī)械特性有關(guān),一般是5~10ms。為了保證CPU確認(rèn)一次按鍵動(dòng)作,既不重復(fù)也不遺漏,必須消除抖動(dòng)的影響。通過軟件消除抖動(dòng)的方法為:在程序執(zhí)行過程中檢測到有按鍵按下時(shí),調(diào)用一段延時(shí)(約10ms)子程序,然后判斷該按鍵的電平是否仍然保持在閉合狀態(tài),如果是,則確認(rèn)有鍵按下。按鍵判斷流程圖如下:音樂響鈴模塊音樂鬧鈴程序:單片機(jī)演奏一個(gè)音符,是通過引腳,周期性的輸出一個(gè)特定頻率的方波。這就需要單片機(jī),在半個(gè)周期內(nèi)輸出低電平、另外半個(gè)周期輸出高電平,周而復(fù)始。眾所周知,周期為頻率的倒數(shù),可以通過音符的頻率計(jì)算出周期;演奏時(shí),要根據(jù)音符的不同,把對(duì)應(yīng)的半個(gè)周期的定時(shí)時(shí)間初始值,送入定時(shí)器,再由定時(shí)器按時(shí)輸出高低電平。另外,音樂的節(jié)拍是由延時(shí)實(shí)現(xiàn)的。我所使用的單片機(jī)音樂演奏程序中,包括了兩個(gè)數(shù)據(jù)表,其中存放了事先算好的各種音符頻率所對(duì)應(yīng)的半周期的定時(shí)時(shí)間初始值。有了這些數(shù)據(jù),單片機(jī)就可以演奏低音、中音、高音,三個(gè)八度共21個(gè)音符。演奏樂曲時(shí),就根據(jù)音符的不同數(shù)值,從表中找到定時(shí)時(shí)間初始值,送入定時(shí)器即可控制音調(diào)。通過調(diào)用延遲來實(shí)現(xiàn)節(jié)拍數(shù)。樂曲的數(shù)據(jù),也要寫個(gè)數(shù)據(jù)表:表中每三個(gè)數(shù)字,說明了一個(gè)音符,它們分別代表:第一個(gè)數(shù)字是音符的數(shù)值;第二個(gè)數(shù)字是123之一,代表低音、中音、高音;第三個(gè)數(shù)字是時(shí)間長度,以半拍為單位。樂曲數(shù)據(jù)表的結(jié)尾是三個(gè)0。音節(jié)與頻率的關(guān)系如下表所示音調(diào)X音調(diào)X音調(diào)X低音1F921中音1FC8F高音1FE47低音2F9E1中音2FCEE高音2FE77低音3FA8C中音3FD44高音3FEA2低音4FAD8中音4FD6B高音4FEB6低音5FB68中音5FDB4高音5FEDA低音6FBE9中音6FDF4高音6FEFA低音7FC5B中音7FE2D高音7FF16程序流程圖如下:程序清單/*---------------------------------------------------------------------------------------------------------------------=======================================基于JD51開發(fā)板的紅外探測程序=======================================************************************程序功能說明************************************************************************ 1、基礎(chǔ)功能為顯示當(dāng)前時(shí)間。 2、監(jiān)控功能,按下key1鍵進(jìn)入監(jiān)控模式,有人時(shí)燈閃動(dòng)提示輸入密碼,輸入三次錯(cuò)誤或超過10秒開始報(bào)警。 3、歡迎功能,按下key2進(jìn)入歡迎模式,有人時(shí)自動(dòng)播放音樂,key2退出。 4、計(jì)數(shù)功能,按下key3進(jìn)入計(jì)數(shù)模式,有人經(jīng)過時(shí)計(jì)數(shù)一人,key2退出。 5、調(diào)整時(shí)間,按key4進(jìn)入,按key3調(diào)整小時(shí),按key4調(diào)整分鐘,key2退出。************************************************************************************************************************/#include"reg52.h"http://#include"delay.c"#defineucharunsignedcharsbitCE573=P2^5;sbitBUZZER=P2^4;sbitKEY1=P3^2;sbitKEY2=P3^3;sbitKEY3=P3^4;sbitKEY4=P3^5;sbitKEY5=P2^7;codeunsignedchardigseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//0123456789AbCdEFuchardigseg_d[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};/*帶點(diǎn)數(shù)碼管的段碼編碼(0-9)*/codeunsignedcharsegsel[]={0xfe,0xfd,0xfb,0xf7};//數(shù)碼管段選intsum=0;ints=30; //當(dāng)前時(shí)間秒intmi=0; //當(dāng)前時(shí)間分inth=8; //當(dāng)前時(shí)間時(shí)inta;intb;intchance;intk;intx,y,z,x1,x2;intswt=1;intswt2=1;intge=0; //人數(shù)后兩位intshi=0; //人數(shù)前兩位intm=1; //設(shè)定初始參數(shù)unsignedcharbeat;codeunsignedsong[]={0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4, 0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94, 0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x00};codeintnote[]={0x0000,0xFB03,0xFB8E,0xFC0B,0xFC43,0xFCAB,0xFD08,0xFD32,0xFD81,0xFDC7,0xFE05,0xFE21,0xFE55,0xFE83,0xFE99,0xFEC0};unsignedcharhi_note,low_note;voiddelay();voidinitmpu(void)//初始化程序,確定計(jì)數(shù)器工作方式,裝填工作數(shù),確定確定終端模式。{ TMOD=0x11; //定時(shí)器0和1都以方式一計(jì)數(shù) TL0=0xff; TH0=0xdb; TL1=0xFF; TH1=0xDB; PCON=0x00; IE=0x8f; //開放所有中斷}voidDelay(intm)//延時(shí)程序{ while(--m);}voidDelay1(intm)//延時(shí)程序用來播放音樂{intkk,jj;for(;m>0;m--){for(kk=180;kk>0;kk--) for(jj=125;jj>0;jj--);}}voidtest_led(void)//測試led燈{ inti; P1=0x7F; Delay(40000); for(i=0;i<7;i++) { P1=P1>>1; Delay(40000); } P1=0xFF; Delay(40000); P1=0x00; Delay(40000); P1=0xFF; Delay(40000); P1=0x00; Delay(40000); P1=0xFF;}voidbaojing(void)//LED燈報(bào)警程序{ P1=0x00; Delay(40000); P1=0xFF; Delay(40000);}voidprt(inthour,intmin)//數(shù)碼管顯示子程序{ inta,b,c,d; a=hour/10; b=hour%10; c=min/10; d=min%10; {//P2=0xfe; P2=segsel[0]; P0=digseg[a]; Delay(100); if(P1==0xfe){ P2=segsel[1]; P0=digseg_d[b]; Delay(100);} else{ P2=segsel[1]; P0=digseg[b]; Delay(100); } P2=segsel[2]; P0=digseg[c]; Delay(100); P2=segsel[3]; P0=digseg[d]; Delay(100); }}voidtest_digseg(void)//測試數(shù)碼管{ CE573=1; P2=segsel[0]; P0=digseg[2]; Delay(40000); P2=segsel[1]; P0=digseg[0]; Delay(40000); P2=segsel[2]; P0=digseg[7]; Delay(40000); P2=segsel[3]; P0=digseg[5]; Delay(40000); P2=0xF0;//4只數(shù)碼管同時(shí)開啟 P0=0xFF; Delay(40000); P0=0x00; Delay(40000); P0=0xFF; Delay(40000); P0=0x00; Delay(40000); P0=0xFF;}voidtest_beep(charn)//測試蜂鳴器{chari; for(i=0;i<n;i++){ BUZZER=0; Delay(9000); BUZZER=1; Delay(9000); } }charcheck_K3(void)//按鍵去抖{ if(KEY3==0) { Delay(2000); { if(KEY3==0) { return1; } } } return0; }charcheck_K4(void)//按鍵去抖{ if(KEY4==0) { Delay(2000); { if(KEY4==0) { return1; } } } return0; }charkey1_flag=0;charkey2_flag=0;voidext_int0()interrupt0//外部中斷0服務(wù)程序{ EA=0; Delay(4000); key1_flag=1; EA=1;}voidext_int1()interrupt2//外部中斷1服務(wù)程序{ EA=0; Delay(4000); key2_flag=1; EA=1;}voidtime()interrupt1//計(jì)時(shí)器0計(jì)數(shù)器中斷程序,用于確定當(dāng)前時(shí)間{ EA=0; x1++; TR0=0; swt=1; TL0=0xff; //計(jì)數(shù)一百就是一秒 TH0=0xdb; TR0=1; if(x1==100) {x1=0; s++; if(P1==0xfe) //LED閃爍表示一秒 P1=0xff; else P1=0xfe; } if(s==60) { s=0; m=1; mi++; } if(mi==60) { mi=0; h++; } if(h==24) h=0; EA=1; }voidtime2()interrupt3//計(jì)數(shù)器1中斷程序,用于播放音樂{ TR1=0; TL1=low_note; TH1=hi_note; TR1=1; BUZZER=~BUZZER; }voidsinging() { // unsignedcharbeat,temp; unsignedchartemp; intii=0; while(1) { prt(h,mi); //顯示當(dāng)前時(shí)間 temp=song[ii];//讀出樂譜的一個(gè)byte if(temp==0) { //如果是0就表示音樂結(jié)束 TR1=0;//停止計(jì)時(shí)計(jì)數(shù)器1 return;//返回 } beat=temp&0x0f;//取出低階的4位,這是拍子 temp=(temp>>4)&0x0f;//取出高階4位當(dāng)成音符的頻率 if(temp==0) TR1=0; //如果拍子是0就表示休止符 else{ hi_note=note[temp]>>8;//根據(jù)音符的頻率得到Timer1計(jì)數(shù)值 low_note=note[temp]&0x00FF; TR1=1;//啟動(dòng)計(jì)時(shí)計(jì)數(shù)器1 } Delay1(beat);//延遲拍子的時(shí)間 TR1=0; //計(jì)時(shí)器1停止計(jì)數(shù) BUZZER=1; ii++; if(key2_flag) //按2鍵退出播放 { key2_flag=0; P2=0xff; m=0; TR1=0; BUZZER=1; break; } } }main()//主程序{ initmpu(); test_beep(1); test_led(); test_digseg(); P0=0XBF; TR0=1; //計(jì)時(shí)器0開始工作 while(1)//不斷刷新程序 { prt(h,mi); //顯示當(dāng)前時(shí)間 if(key1_flag)//以中斷方式響應(yīng)按鍵,監(jiān)控模式 { key1_flag=0;//去除外部中斷1標(biāo)志位 P2=0xff; test_beep(1);//驅(qū)動(dòng)蜂鳴器 while(1) //不斷刷新程序 { P1=0x7f; if(check_K4()) { s=0; while(check_K3()==0) { if(s>=0&&s<=5) { P2=segsel[3]; P0=digseg[5-s]; Delay(100); } if(s>5) { test_beep(10); baojing(); } } Delay(16000); Delay(10000); break; } if(key2_flag) //按2鍵退出 { key2_flag=0; P2=0xff; test_beep(5); Delay(10000); break; } } } elseif(key2_flag)//歡迎模式 { P2=0xff; key2_flag=0; test_beep(1); while(1) { P1=0xbf; prt(h,mi); if(check_K4()) //播放音樂 { singing(); } if(key2_flag) //再按2鍵退出模 { P2=0xff; key2_flag=0; test_beep(5); Delay(10000); break; } } } elseif(check_K3())//數(shù)人數(shù)模式 { P2=0xff; test_beep(1); while(1) { P1=0xdf; prt(shi,ge); //顯示當(dāng)前人數(shù) if(check_K4()) { P2=0xff; ge++; test_beep(1); if(ge==100) shi=1; if(shi==100) { shi=0; ge=0; } Delay(10000); } if(check_K3()) //按3鍵清零 { P2=0xff; ge=0; shi=0; test_beep(1); Delay(10000); } if(key2_flag) //按2鍵退出 { key2_flag=0; P2=0xff; test_beep(5); Delay(10000); break; } } } elseif(check_K4())//調(diào)整當(dāng)前時(shí)間 { P2=0xff; key2_flag=0; test_beep(1); while(1) { prt(h,mi); if(check_K3()) //調(diào)時(shí) { h++; P2=0xff; test_beep(1); if(h==24) h=0; Delay(10000); } if(check_K4()) //調(diào)分 { mi++; P2=0xff; test_beep(1); if(mi==60) { mi=0; h++; } if(h==24) h=0; Delay(10000); } if(key2_flag) //
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)議總結(jié)分享計(jì)劃合同
- 重慶市2025年物業(yè)管理合同協(xié)議樣本
- 2025年畜牧服務(wù)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告
- 公司保密和競業(yè)禁止合同范本8篇
- 商場商戶租賃合同6篇
- 成都房屋租賃合同
- 咖啡廳合伙合同范本
- 深水井承包合同范本
- GB/T 45241-2025公務(wù)用車管理平臺(tái)數(shù)據(jù)規(guī)范
- 新能源用地居間服務(wù)合同
- 中班美工區(qū)角活動(dòng)教案10篇
- 304不銹鋼管材質(zhì)證明書
- DBJ 46-027-2013 海南省建筑塔式起重機(jī)安裝使用安全評(píng)定規(guī)程
- SJG 103-2021 無障礙設(shè)計(jì)標(biāo)準(zhǔn)-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺(tái)課件
- 合肥市城市大腦·數(shù)字底座白皮書2020
- 杭州灣跨海大橋項(xiàng)目案例ppt課件
- (完整版)光榮榜25張模板
- 工業(yè)催化劑作用原理—金屬氧化物催化劑
- 優(yōu)秀教材推薦意見(真實(shí)的專家意見)
評(píng)論
0/150
提交評(píng)論