版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 智 能 電 風(fēng) 扇 的 設(shè)計</p><p> 學(xué) 院 計算機(jī)與控制工程學(xué)院 </p><p> 專業(yè)班級 自動化073班 </p><p> 學(xué)生姓名 </p><p&g
2、t; 指導(dǎo)教師 </p><p> 2010年6 月25 日</p><p><b> 引 言</b></p><p> 隨著人們生活水平及科技水平的不斷提高,現(xiàn)在家用電器在款式、功能等方面日益求精,并朝著健康、安全、多功能、節(jié)能等方向發(fā)展。過去的電器不斷的
3、顯露出其不足之處。電風(fēng)扇作為家用電器的一種,同樣存在類似的問題。</p><p> 現(xiàn)在電風(fēng)扇的現(xiàn)狀:大部分只有手動調(diào)速,再加上一個定時器,功能單一。</p><p> 存在的隱患或不足:比如說人們常常離開后忘記關(guān)閉電風(fēng)扇,浪費電且不說還容易引發(fā)火災(zāi),長時間工作還容易損壞電器。再比如說前半夜溫度高電風(fēng)扇調(diào)的風(fēng)速較高,但到了后半夜氣溫下降,風(fēng)速不會隨著氣溫變化,容易著涼。</p&g
4、t;<p> 之所以會產(chǎn)生這些隱患的根本原因是:缺乏對環(huán)境的檢測。</p><p> 如果能使電風(fēng)扇具有對環(huán)境進(jìn)行檢測的功能,當(dāng)房間里面沒有人時能自動的關(guān)閉電風(fēng)扇;當(dāng)溫度下降時能自動的減小風(fēng)速甚至關(guān)閉風(fēng)扇,這樣一來就避免了上述的不足。本次設(shè)計就是圍繞這兩點對現(xiàn)有電風(fēng)扇進(jìn)行改進(jìn)。</p><p> 1.總體方案設(shè)計及功能描述</p><p> 本
5、設(shè)計是以AT89C51單片機(jī)控制中心,主要通過提取熱釋電紅外傳感器感應(yīng)到的人體紅外線信息和溫度傳感器DS18B20得到的溫度以及內(nèi)部定時器設(shè)定時間長短來控制電風(fēng)扇的開關(guān)及轉(zhuǎn)速的變化。</p><p> 功能描述:電風(fēng)扇工作在四種狀態(tài):手動調(diào)速狀態(tài)、自動調(diào)速狀態(tài)、定時狀態(tài)、停止?fàn)顟B(tài)。</p><p> 手動狀態(tài)時可以手動調(diào)節(jié)速度;自動狀態(tài)時通過溫度高低自動調(diào)節(jié)速度,如果出現(xiàn)手動現(xiàn)象則變?yōu)?/p>
6、手動狀態(tài);定時狀態(tài)時可以調(diào)節(jié)定時時間,并設(shè)定是否啟動定時,之后可以手動退出,也可以在不操作6秒后自動退出進(jìn)入手動狀態(tài);停止?fàn)顟B(tài)時可以被喚醒并進(jìn)入自動狀態(tài)。</p><p> 當(dāng)沒有檢測到人體存在超過3分鐘或定時完畢時進(jìn)入停止?fàn)顟B(tài)。</p><p> 在數(shù)碼管顯示方面,當(dāng)沒有定時時,只顯示氣溫,當(dāng)定時啟動時氣溫和定時剩余時間以3秒的速度交替顯示。</p><p>
7、 系統(tǒng)方框圖如下圖所示,主要包括:輸入、控制、輸出三大部分8個功能模塊。</p><p><b> 圖1-1系統(tǒng)方框圖</b></p><p> 2.功能模塊硬件簡介與實現(xiàn)</p><p><b> 2.1鍵盤輸入電路</b></p><p> 由于設(shè)計中用到的按鍵數(shù)目不多,所以可以直接用
8、AT89C51的通用IO端口且選用AT89C51的P1口(內(nèi)部有上拉電阻)作為鍵盤接口。對于按鍵只需一端接地另一端接P1口即可。見下圖(2-1):</p><p><b> 圖 2-1</b></p><p> 2.2熱釋電紅外傳感器模塊</p><p> 2.2.1熱釋電紅外線傳感器原理簡介</p><p>
9、人體輻射的紅外線中心波長為 9~10um,而探測元件的波長靈敏度在 0.2~20um 范圍內(nèi)幾乎穩(wěn)定不變。在傳感器頂端開設(shè)了一個裝有濾光鏡片的窗口,這個濾光片可通過光的波長范圍為 7~10um,正好適合于人體紅外輻射的探測,而對其它波長的紅外線由濾光片予以吸收,這樣便形成了一種專門用作探測人體輻射的紅外線傳感器。 </p><p> 實質(zhì)上熱釋電傳感器是對溫度敏感的傳感器。它由陶瓷氧化物或壓電晶體元件組成,在
10、元件兩個表面做成電極,如圖2所示。在環(huán)境溫度有ΔT的變化時,由于有熱釋電效應(yīng),在兩個電極上會產(chǎn)生電荷ΔQ,即在兩電極之間產(chǎn)生一微弱的電壓ΔV。</p><p> 2.2.2熱釋電紅外線傳感器應(yīng)用</p><p> 熱釋電紅外線傳感器有三個端口,如圖2-2所示:一個接電源、一個接地、一個信號端口,當(dāng)有人進(jìn)入其檢測區(qū)域時,信號端口便產(chǎn)生一個電平跳變,并維持?jǐn)?shù)秒鐘,我們就是利用這個跳變來判斷
11、是否有人在這個檢測區(qū)域。</p><p><b> 圖2-2</b></p><p><b> 2.3溫度傳感器</b></p><p> 2.3.1溫度傳感器DS18B20簡介</p><p> 新型數(shù)字溫度傳感器DS18B20具有體積更小、精度更高、適用電壓更寬、采用一線總線,在實際應(yīng)用
12、中取得了良好的測溫效果。</p><p> DS18B20的主要特性:</p><p> (1)獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。</p><p> ?。?)測溫溫范圍-55℃~+125℃</p><p> (3)最高分辨率為0.0625℃。</p>
13、<p> 2.3.2 DS18B20的一般操作過程</p><p><b> (1)、初始化;</b></p><p> ?。?)、跳過ROM(命令:CCH);</p><p> ?。?)、溫度變換(命令:44H);</p><p> (4)、讀暫存存儲器(命令:BEH);</p>&l
14、t;p> 注:每次讀取溫度都要經(jīng)過上面四個過程。</p><p> 2.3.3 DS18B20的溫度存儲方式即溫度計算</p><p> DS18B20是用12位存儲溫度,最高位為符號位,下圖為它的溫度存儲方式:</p><p> 表2-1 DS18B20溫度存儲地址分配</p><p> 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存
15、儲在DS18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。</p><p> 2.4數(shù)碼管顯示電路</p><p> 2.4 174ls164簡介</p><p> 移位寄存器是一
16、類應(yīng)用很廣的時序邏輯電路,在時鐘脈沖的作用下,低位寄存器的數(shù)碼送給高位寄存器,作為高位寄存器的次態(tài)輸出。 在時鐘脈沖的作用下,高位寄存器的數(shù)碼送給低位寄存器,作為低位寄存器的次態(tài)輸出;移位寄存器:除具寄存器的功能外,所存儲的數(shù)碼在時鐘脈沖的作用下還可以移位。</p><p> 74ls164是八位串入并出移位寄存器,其工作電壓范圍4.75~5.25V,大于2V的高電平輸入、小于0.8V的低電平輸入,clock最
17、高響應(yīng)頻率為25MHZ,八位并行輸出可以直接驅(qū)動八段數(shù)碼管。74ls164的引腳圖及功能圖如下所示:</p><p> 圖2-3 74ls164的引腳圖及功能圖</p><p> 2.4.2共陰極八段數(shù)碼管簡介</p><p> 共陰極八段數(shù)碼管是將八段發(fā)光二極管封裝在一起且二極管的陰極連在一起,原理圖如下圖所示,公共端接低電平,其它八個端口高電平點亮相應(yīng)的二
18、極管,低電平相反。</p><p><b> 圖2-4</b></p><p> 2.4.3顯示電路設(shè)計</p><p> 此顯示電路采用兩位靜態(tài)數(shù)碼管顯示,用八位串入并出移位寄存器74LS164作為驅(qū)動電路,采用共陰極八段數(shù)碼管原理圖示意圖如下:</p><p><b> 圖 2-5</b>
19、;</p><p> 從圖中可以看出控制線只有兩條:1、數(shù)據(jù)線;2、移位脈沖線。它只占用很少的IO口。</p><p> 2.5發(fā)光二極管電路</p><p> 發(fā)光二極管簡稱為LED,它是半導(dǎo)體二極管的一種。發(fā)光二極管的反向擊穿電壓約5伏。它的正向伏安特性曲線很陡,使用時必須串聯(lián)限流電阻以控制通過管子的電流。限流電阻R可用下式計算:</p>&
20、lt;p> R=(E-Uf)/If</p><p> 式中E為電源電壓,Uf為LED的正向壓降,If為LED的一般工作電流。發(fā)光二極管的兩根引線中較長的一根為正極,應(yīng)按電源正極。</p><p> 與小白熾燈泡和氖燈相比,發(fā)光二極管的特點是:工作電壓很低(有的僅一點幾伏);工作電流很?。ㄓ械膬H零點幾毫安即可發(fā)光);抗沖擊和抗震性能好,可靠性高,壽命長;通過調(diào)制通過的電流強(qiáng)弱可以
21、方便地調(diào)制發(fā)光的強(qiáng)弱。由于有這些特點,發(fā)光二極管在一些光電控制設(shè)備中用作光源,在許多電子設(shè)備中用作信號顯示器。</p><p> 由于AT89C51的P0口是開漏輸出,所以此電路可以設(shè)計位如下簡單形式:</p><p><b> 圖2-6</b></p><p><b> 2.6蜂鳴器電路</b></p>
22、<p> 蜂鳴器工作原理簡介:當(dāng)控制端口通以不同頻率及不同占空比的信號時蜂鳴器將發(fā)出不同強(qiáng)度及不同頻率的聲音。由于其具有比傳統(tǒng)的喇叭體積小,價格低等優(yōu)點,所以此次提示音電路選用蜂鳴器。具體電路見下圖:</p><p><b> 圖2-7</b></p><p> 2.7繼電器控制電路</p><p> 2.7.1繼電器簡介
23、</p><p> 繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應(yīng)用于自動控制電路中,它實際上是用較小的電流去控制較大電流的一種“自動開關(guān)”。故在電路中起著自動調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。</p><p><b> 它有幾個重要指標(biāo):</b></p><p> 1、額定工作電壓:正常工作時
24、線圈所需要的電壓。</p><p> 2、直流電阻:繼電器中線圈的直流電阻。</p><p> 3、吸合電流:繼電器能夠產(chǎn)生吸合動作的最小電流。</p><p> 4、釋放電流:繼電器產(chǎn)生釋放動作的最大電流。</p><p> 5、觸點切換電壓和電流:繼電器允許加載的電壓和電流。</p><p> 2.7.2
25、繼電器驅(qū)動電路設(shè)計及工作原理簡介</p><p> 采用晶閘管也可以用于小電流控制大電流電路,但是其控制電路比較復(fù)雜,而采用繼電器其控制電路就比較簡單,且具有電氣隔離作用。雖然其響應(yīng)速度沒有晶閘管快但在低頻情況下采用繼電器控制電路較為方便。其電路圖如下所示:</p><p><b> 圖2-8</b></p><p> 電路工作原理簡介:
26、當(dāng)控制端口為低電平時,三極管導(dǎo)通繼電器吸合,常閉觸電斷開,常開觸點閉合。當(dāng)控制端口為高電平時三極管關(guān)斷,繼電器線圈通過二極管放電并斷開,常閉、常開觸電復(fù)位。</p><p><b> 3.軟件設(shè)計與實現(xiàn)</b></p><p> 3.1整體設(shè)計思路介紹</p><p> 軟件設(shè)計整體思路:主程序部分進(jìn)行一些初始化以及溫度的讀?。煌獠恐袛?
27、進(jìn)行紅外線感應(yīng)延時時間的重新加載;定時器0進(jìn)行鍵盤的掃描及相關(guān)操作;定時器1進(jìn)行顯示、溫控速度、以及相關(guān)需要延時(如倒計時等等)的操作。在顯示方面,進(jìn)行了一些改善----要顯示的值有變化才進(jìn)行重新刷新,否則不刷新。這樣就大大提高了效率及最終的顯示效果(不會出現(xiàn)不該亮的部分還有亮的現(xiàn)象)。</p><p> 3.2主要部分流程圖如下:</p><p> 3.2.1主程序流程圖</p
28、><p><b> 圖 3-1</b></p><p> 3.2.2外部中斷流程圖</p><p><b> 圖 3-2</b></p><p> 3.2.3定時器0中斷流程圖</p><p><b> 圖 3-3</b></p>&
29、lt;p> 3.2.4定時器1中斷流程圖</p><p><b> 圖 3-4</b></p><p><b> 結(jié)束語</b></p><p> 早在《單片機(jī)原理及接口技術(shù)》這門課還未結(jié)束的時候,陸仲達(dá)老師就給我們布置了基于51單片機(jī)的課程設(shè)計。我從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對思路逐漸的清晰,整個寫
30、作過程難以用語言來表達(dá)。</p><p> 關(guān)于51的應(yīng)用設(shè)計,從上課開始我就不滿足于那些諸如電子鐘、交通燈控制等司空見慣的設(shè)計,我希望能把主題定位得更新穎、更具挑戰(zhàn)性,正好夏天也到了,于是把題目定為:智能電風(fēng)扇的設(shè)計。</p><p> 題目確定下來,我便立刻著手資料的收集工作中,當(dāng)時面對浩瀚的書海真是有些茫然,不知如何下手。在導(dǎo)老師的指導(dǎo)及同學(xué)的幫助下,我終于對自己的工作方向和方法
31、有了初步掌握。資料已經(jīng)查找完畢,我開始著手論文的寫作。在寫作過程中遇到困難我就及時和導(dǎo)師聯(lián)系,并和同學(xué)互相交流,請教專業(yè)課老師。在大家的幫助下,困難一個一個解決掉,論文也慢慢成型。</p><p> 當(dāng)我終于完成了所有打字、繪圖、排版、校對的任務(wù)后整個人都很累,但同時看著電腦熒屏上的課程設(shè)計稿件我的心里是甜的,我覺得這一切都值了。這次課程設(shè)計論文的制作過程是我的一次再學(xué)習(xí),再提高的過程。在論文中我充分地運用了大
32、學(xué)期間所學(xué)到的知識。</p><p> 本設(shè)計最終實現(xiàn)了電風(fēng)扇的手動調(diào)速、溫控自動調(diào)速、定時、溫度顯示、人體檢測等預(yù)期功能,其中定時在1到99分鐘連續(xù)可調(diào),人體檢測范圍角度120度、距離6米,人體檢測延時時間3分鐘,定時器自動退出時間6秒。存在不足之處就是人體檢測抗干擾方面不夠好,需要提高。</p><p> 我不會忘記這難忘的半個月的時間。課程設(shè)計論文的制作給了我難忘的回憶。在我徜徉
33、書海查找資料的日子里,面對無數(shù)書本的羅列,最難忘的是每次找到資料時的激動和興奮;親手用protel 99 se設(shè)計電路圖的時間里,記憶最深的是每一步小小思路實現(xiàn)時那幸福的心情;為了論文我曾趕稿到深夜,但看著親手打出的一字一句,心里滿滿的只有喜悅毫無疲憊。這段旅程看似荊棘密布,實則蘊藏著無盡的寶藏。在今后的日子里,我仍然要不斷地充實自己,爭取在所學(xué)領(lǐng)域有所作為。</p><p> 在這次課程設(shè)計中也使我們的同學(xué)關(guān)
34、系更進(jìn)一步了,同學(xué)之間互相幫助,有什么不懂的大家在一起商量,聽聽不同的看法對我們更好的理解知識,所以在這里非常感謝幫助我的同學(xué)。</p><p> 在此更要感謝我的指導(dǎo)老師和專業(yè)老師,是你們的細(xì)心指導(dǎo)和關(guān)懷,使我能夠順利的完成課程設(shè)計。</p><p><b> 附錄:程序清單</b></p><p> /****************
35、*******************************************************</p><p> touwenjian.h</p><p> ***********************************************************************/</p><p> typedef unsi
36、gned char byte; </p><p> typedef unsigned int word;</p><p><b> //以下管腳配置</b></p><p> //ds18b20部分</p><p> sbit DQ =P3^4; </p><p><b> /
37、/顯示部分</b></p><p> sbit DB=P2^0;</p><p> sbit CP=P2^1;</p><p><b> //發(fā)光顯示部分</b></p><p> sbit LED_dingshi=P0^0;</p><p> sbit LED_shoudo
38、ng =P0^1;</p><p> sbit LED_zidong=P0^2;</p><p> sbit LED_kuai =P0^3;</p><p> sbit LED_zhong =P0^4;</p><p> sbit LED_man =P0^5;</p><p><b> //鍵
39、盤定義部分</b></p><p> #define wujian 0x3f</p><p> sbit KEY1=P1^0 ; //狀態(tài)轉(zhuǎn)換 /啟動</p><p> sbit KEY2=P1^1 ; //+10 / 1</p><p> sbit KEY3=P1^2 ; //-10/ 2</p>
40、<p> sbit KEY4=P1^3 ; // 3</p><p> sbit KEY5=P1^4 ; // 0確定</p><p><b> //繼電器控制部分</b></p><p> sbit JDQ1=P2^4; //0表示開通,1表示關(guān)斷</p><p> sbit JDQ2=P
41、2^5;</p><p> sbit JDQ3=P2^6;</p><p><b> //蜂鳴器部分</b></p><p> sbit call=P2^7; //低電平鳴叫</p><p> /*********************************************************
42、**************</p><p><b> ds18b20.c</b></p><p> ***********************************************************************/</p><p> #include <REGX51.H></p>
43、<p> #include"touwenjian.h"</p><p> /*****************************************************</p><p><b> 延時子程序</b></p><p> ******************************
44、***********************/</p><p> extern void delay(word useconds) </p><p><b> { </b></p><p> for(;useconds>0;useconds--); </p><p><b> } </b&
45、gt;</p><p> /*****************************************************</p><p><b> 復(fù)位子程序 </b></p><p> ******************************************************/</p>&l
46、t;p> static byte ow_reset(void) </p><p><b> { </b></p><p> byte presence;</p><p><b> EA=0; </b></p><p> DQ = 0; // pull DQ line low <
47、/p><p> delay(45); // leave it low for 480us //551us</p><p> DQ = 1; // allow line to return high </p><p> delay(4);// wait for presence //61us</p><p> presence = DQ
48、; // get presence signal </p><p> delay(40); // wait for end of timeslot //491us</p><p><b> EA=1;</b></p><p> return(presence); // presence signal returned </
49、p><p> } // 0=presence, 1 = no part </p><p> /*******************************************************</p><p> 從 1-wire 總線上讀取一個字節(jié)子程序</p><p> *************************
50、*******************************/ </p><p> static byte read_byte(void) </p><p><b> { </b></p><p><b> byte i; </b></p><p> byte value = 0;<
51、/p><p><b> EA=0; </b></p><p> for (i=8;i>0;i--) </p><p><b> { </b></p><p> value>>=1; </p><p> DQ = 0; // pull DQ low to
52、 start timeslot </p><p> DQ = 1; // then return high </p><p> {unsigned char i;</p><p> for(i=0;i<2;i++);}//11us</p><p> if(DQ)value|=0x80; </p><p>
53、 delay(6);// wait for rest of timeslot </p><p><b> } </b></p><p><b> EA=1;</b></p><p> return(value); </p><p><b> } </b></p&
54、gt;<p> /********************************************************</p><p> 向 1-WIRE 總線上寫一個字節(jié) </p><p> *********************************************************/</p><p> st
55、atic void write_byte(char val) </p><p><b> { </b></p><p><b> byte i; </b></p><p><b> EA=0;</b></p><p> for (i=8; i>0; i--) /
56、/ writes byte, one bit at a time </p><p><b> { </b></p><p> DQ = 0; // pull DQ low to start timeslot</p><p><b> DQ=0; </b></p><p> DQ = val&
57、amp;0x01; //6US</p><p> delay(5);// hold value for remainder of timeslot //74us</p><p><b> DQ = 1; </b></p><p> val=val>>1; </p><p><b> }&l
58、t;/b></p><p><b> EA=1; </b></p><p> delay(5); </p><p><b> } </b></p><p> /*******************************************************</p&g
59、t;<p><b> 讀取溫度 </b></p><p> *******************************************************/</p><p> word Read_Temperature(void) </p><p><b> { </b></p&
60、gt;<p><b> union{ </b></p><p> byte c[2]; </p><p><b> word x; </b></p><p><b> }temp; </b></p><p> ow_reset(); </p>
61、<p> write_byte(0xCC); // Skip ROM </p><p> write_byte(0xBE); // Read Scratch Pad </p><p> temp.c[1]=read_byte(); </p><p> temp.c[0]=read_byte(); </p><p> o
62、w_reset(); </p><p> write_byte(0xCC); //Skip ROM </p><p> write_byte(0x44); // Start Conversion </p><p> return temp.x; </p><p><b> }</b></p><
63、;p> /***************************************************************</p><p><b> 求解溫度</b></p><p> ***************************************************************/</p><
64、;p> extern byte Real_Tem(void)</p><p><b> {</b></p><p><b> word wen;</b></p><p> wen=Read_Temperature();</p><p> return((wen>>4)&a
65、mp;0x00ff);</p><p><b> }</b></p><p> /***********************************************************************</p><p><b> Main.c</b></p><p>
66、***********************************************************************/</p><p> #include <REGX51.H></p><p> #include"touwenjian.h"</p><p><b> //數(shù)據(jù)區(qū)</b&g
67、t;</p><p> #define time_default 41</p><p> byte dingshi_time=time_default;//存放定時時間''''''</p><p> bit flag_dingshi=0; //0表示沒有定時</p><p> word
68、 dingshi_jishu3=1000;//1000*60=1分鐘</p><p><b> //</b></p><p> bit flag_dingshi_delay=0;//1表示有</p><p> byte dingshi_delay=100;</p><p><b> //</b&
69、gt;</p><p> #define hwx_delay_const 3 //人體感應(yīng)延時時間</p><p> byte hwx_delay=hwx_delay_const;//用于保存紅外線觸發(fā)延長時間</p><p> word hwx_jishu1=0;</p><p><b> //</b><
70、/p><p> byte wendu=0;//用于存放溫度值''''''</p><p><b> //</b></p><p> #define low_wen 18</p><p> #define mid_wen 20</p><p>
71、#define hig_wen 24</p><p> #define vhi_wen 28</p><p><b> //</b></p><p> byte time_stor=100; //存儲主觀時間//觸發(fā)顯示</p><p> byte wendu_stor=low_wen;//存儲主觀溫度//觸發(fā)顯
72、示</p><p><b> //</b></p><p> enum station0{zidong,dingshi,shoudong,weak}state;</p><p><b> //函數(shù)說明區(qū)</b></p><p> extern byte Real_Tem(void );<
73、;/p><p> extern void delay(word useconds);</p><p> void mingjiao(void);</p><p> void display(byte input,bit kkl);</p><p> void auto_speed(void);</p><p>
74、void weak_default(void);</p><p> /*******************************************************************</p><p><b> 主程序</b></p><p> *************************************
75、******************************/</p><p> void main()</p><p><b> {</b></p><p> //定時器0用于鍵盤掃描</p><p> TMOD=0x01|TMOD;//定時器0的1方式</p><p> TH0=0
76、xd8;TL0=0xf0; //定時器0初始化10ms掃描一次</p><p> //定時器1用于顯示</p><p> TMOD=0x10|TMOD;//定時器1的1方式</p><p> TH1=0x15;TL1=0xA0; //定時器1初始化60ms中斷一次</p><p><b> //外部中斷</b>&
77、lt;/p><p> TCON=TCON|0x01;//外部中斷0都下降沿觸發(fā)</p><p><b> //以下為開啟部分</b></p><p> IP=0X01; //兩個定時器同等優(yōu)先級</p><p> IE=0x8b; //開啟定時器0,1,外部中斷0中斷</p><p>
78、<b> //</b></p><p> while(Real_Tem()==85);</p><p> auto_speed();</p><p> LED_zidong=0; //剛開始為自動方式 </p><p> P1=P1|0X7C; //拉高五個鍵盤 </p><p>
79、 wendu_stor=100; //兩個不可能值//用于啟動顯示</p><p> time_stor=100; //兩個不可能值//用于啟動顯示</p><p><b> //</b></p><p> TR0=1; //開啟定時器0</p><p><b> TR1=1;</b>&
80、lt;/p><p><b> while(1)</b></p><p><b> {</b></p><p> wendu=Real_Tem();</p><p><b> } </b></p><p><b> }</b>
81、</p><p> /***********************************************************************************</p><p> 定時器0中斷服務(wù)子程序</p><p><b> 功能:進(jìn)行鍵盤處理</b></p><p> 說明:鍵盤
82、輸入為P1.0到P1.4</p><p> ***********************************************************************************/ </p><p> void time0(void) interrupt 1</p><p><b> {</b></p
83、><p> byte jianpan; </p><p> TH0=0xd8;TL0=0xf0;</p><p> jianpan = P1 & wujian;</p><p> if(jianpan != wujian) //如果還有鍵盤值提取鍵盤值</p><p><b> {&l
84、t;/b></p><p> delay(500);//延時消抖</p><p> jianpan = P1 & wujian;</p><p> if(jianpan==wujian)goto time_out;</p><p> switch(state)</p><p><b>
85、 {</b></p><p> case dingshi: if(KEY1==0)//狀態(tài)轉(zhuǎn)換時做些相應(yīng)的處理</p><p><b> {</b></p><p> state=shoudong;</p><p> LED_shoudong=0;</p><p> fla
86、g_dingshi_delay=0;dingshi_delay=100;</p><p> time_stor=100;wendu_stor=100;//觸發(fā)</p><p> mingjiao();</p><p> while(KEY1==0);</p><p><b> }</b></p>&
87、lt;p> else if(KEY2==0)//加分</p><p><b> {</b></p><p> if(dingshi_time<90)</p><p> {dingshi_time+=10;}</p><p> dingshi_delay=100;//</p><p
88、> mingjiao();</p><p> while(KEY2==0);</p><p><b> }</b></p><p> else if(KEY3==0)//減分</p><p><b> {</b></p><p> if(dingshi_ti
89、me>10)</p><p> {dingshi_time-=10;}</p><p> dingshi_delay=100;//</p><p> mingjiao();</p><p> while(KEY3==0);</p><p><b> }</b></p>
90、<p> else if(KEY4==0)//定時與否</p><p><b> {</b></p><p> flag_dingshi=~flag_dingshi;</p><p> if(flag_dingshi==1){LED_dingshi=0;}</p><p> else {LED_di
91、ngshi=1;dingshi_jishu3=1000;}</p><p> dingshi_delay=100;//</p><p><b> //</b></p><p> mingjiao();</p><p> while(KEY4==0);</p><p><b>
92、}</b></p><p> else if(KEY5==0)</p><p><b> {</b></p><p> weak_default();</p><p> mingjiao();</p><p> while(KEY5==0);</p><p
93、><b> }</b></p><p><b> break;</b></p><p> case shoudong:if(KEY1==0) //狀態(tài)轉(zhuǎn)換時做些相應(yīng)的處理</p><p><b> {</b></p><p> state=zidong;<
94、/p><p> auto_speed();</p><p> LED_shoudong=1;LED_zidong=0;</p><p> mingjiao();</p><p> while(KEY1==0);</p><p><b> }</b></p><p>
95、 else if(KEY2==0)//快1</p><p><b> {</b></p><p> JDQ2=1;JDQ3=1;JDQ1=0;//關(guān)斷其它</p><p> LED_zhong=LED_man=1;LED_kuai=0;</p><p> mingjiao();</p><p
96、> while(KEY2==0); </p><p><b> }</b></p><p> else if(KEY3==0)//中2</p><p><b> {</b></p><p> JDQ1=1;JDQ3=1;JDQ2=0;//關(guān)斷其它</p>&
97、lt;p> LED_kuai=LED_man=1;LED_zhong=0;</p><p> mingjiao();</p><p> while(KEY3==0);</p><p><b> }</b></p><p> else if(KEY4==0)//慢3</p>&l
98、t;p><b> {</b></p><p> JDQ1=1;JDQ2=1;JDQ3=0;//關(guān)斷其它</p><p> LED_zhong=LED_kuai=1;LED_man=0;</p><p> mingjiao();</p><p> while(KEY4==0);</p&g
99、t;<p><b> }</b></p><p> else if(KEY5==0)//停4</p><p><b> {</b></p><p> weak_default();</p><p> mingjiao();</p><p> whi
100、le(KEY5==0);</p><p><b> }</b></p><p><b> break;</b></p><p> case zidong: if(KEY1==0) //狀態(tài)轉(zhuǎn)換時做些相應(yīng)的處理</p><p><b> {</b></p
101、><p> state=dingshi;</p><p> LED_zidong=1;</p><p> flag_dingshi_delay=1;dingshi_delay=100;//開始延時</p><p> time_stor=100;//</p><p> mingjiao();</p>
102、<p> while(KEY1==0);</p><p><b> }</b></p><p> else if(KEY2==0)//快1</p><p><b> {</b></p><p> JDQ2=1;JDQ3=1;JDQ1=0;//關(guān)斷其它</p><
103、;p> LED_zhong=LED_man=1;LED_kuai=0;</p><p> state=shoudong;</p><p> LED_zidong=1;LED_shoudong=0;</p><p> mingjiao();</p><p> while(KEY2==0);</p>&
104、lt;p><b> }</b></p><p> else if(KEY3==0)//中2</p><p><b> {</b></p><p> JDQ1=1;JDQ3=1;JDQ2=0;//關(guān)斷其它</p><p> LED_kuai=LED_man=1;LED_zhong=0;
105、</p><p> state=shoudong;</p><p> LED_zidong=1;LED_shoudong=0;</p><p> mingjiao();</p><p> while(KEY3==0);</p><p><b> }</b></p>&l
106、t;p> else if(KEY4==0)//慢3</p><p><b> {</b></p><p> JDQ1=1;JDQ2=1;JDQ3=0;//關(guān)斷其它</p><p> LED_zhong=LED_kuai=1;LED_man=0;</p><p> state=shoudong;</p
107、><p> LED_zidong=1;LED_shoudong=0;</p><p> mingjiao();</p><p> while(KEY4==0);</p><p><b> }</b></p><p> else if(KEY5==0)//停4</p>&
108、lt;p><b> {</b></p><p> weak_default();</p><p> mingjiao();</p><p> while(KEY5==0);</p><p><b> }</b></p><p><b> b
109、reak;</b></p><p> case weak:</p><p> if(KEY1==0)</p><p><b> {</b></p><p> state=zidong;LED_zidong=0;</p><p> wendu_stor=100;//兩個不可能值
110、</p><p> time_stor=100;//兩個不可能值</p><p> auto_speed();</p><p> mingjiao();</p><p> while(KEY1==0);</p><p><b> }</b></p><p><
111、;b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> time_out: ;</p><p><b> }</b></p><p> /*********
112、****************************************************************************</p><p> 定時器1中斷服務(wù)子程序</p><p> 功能: 用于定時 0.060s</p><p> ***********************************************
113、**************************************/</p><p> void timer1(void) interrupt 3 </p><p><b> { </b></p><p> TH1=0x15;TL1=0xa0;</p><p><b> //</b>
114、;</p><p><b> //紅外線到記時</b></p><p><b> EX0=0;</b></p><p> if(hwx_jishu1<999){ hwx_jishu1++; }</p><p><b> else</b></p>&l
115、t;p><b> { </b></p><p> hwx_jishu1=0; hwx_delay--;</p><p> if(hwx_delay==0){ weak_default();}</p><p><b> }</b></p><p><b> EX0=1;<
116、;/b></p><p><b> //1分鐘定時</b></p><p> if(flag_dingshi==1)</p><p><b> {</b></p><p> if(dingshi_jishu3>0){dingshi_jishu3--;}</p>&l
117、t;p><b> else</b></p><p> { dingshi_jishu3=1000;</p><p> if(dingshi_time>1){dingshi_time--;}</p><p> else{weak_default();}</p><p><b> }<
118、/b></p><p><b> }</b></p><p><b> //5秒延時</b></p><p> if(flag_dingshi_delay==1)</p><p><b> {</b></p><p> if(dingsh
119、i_delay>1)dingshi_delay--;</p><p><b> else</b></p><p><b> {</b></p><p> state=shoudong;flag_dingshi_delay=0;dingshi_delay=100;</p><p> LE
120、D_shoudong=0;</p><p> time_stor=100;wendu_stor=100; //</p><p> mingjiao();</p><p><b> }</b></p><p><b> }</b></p><p><b>
121、 //顯示和溫控</b></p><p> switch(state)</p><p><b> {</b></p><p> case dingshi://在定時的時候只顯示時間</p><p> if(time_stor!=dingshi_time){display(dingshi_time,1
122、);time_stor=dingshi_time;}</p><p><b> //</b></p><p><b> break;</b></p><p> case shoudong:</p><p> case zidong://是否有定時,有則交替顯示溫度和時間,沒有則只顯示溫度&
123、lt;/p><p> if(flag_dingshi!=0)//</p><p><b> {</b></p><p> static byte jiaoti_jishu2=0;</p><p> static bit flag_jiaoti=0;</p><p> if(jiaoti_ji
124、shu2<49){jiaoti_jishu2++;}</p><p> else {flag_jiaoti=~flag_jiaoti;jiaoti_jishu2=0;}</p><p> if(flag_jiaoti!=0)</p><p><b> { </b></p><p> if(time_st
125、or!=dingshi_time)</p><p> {display(dingshi_time,1);time_stor=dingshi_time;wendu_stor=100;}//顯示時間</p><p><b> }</b></p><p><b> else</b></p><p>
126、<b> { </b></p><p> if(wendu_stor!=wendu)</p><p> {display(wendu,0);wendu_stor=wendu;time_stor=100;}//顯示溫度</p><p><b> }</b></p><p><b>
127、; }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;}// 顯示溫度 </p><p><b&g
128、t; }</b></p><p><b> //溫度控制速度</b></p><p> if(state==zidong)</p><p><b> {</b></p><p> switch(wendu)</p><p><b> {<
129、;/b></p><p> case low_wen:</p><p> JDQ1=1;JDQ2=1;JDQ3=1; </p><p> LED_zhong=LED_man=LED_kuai=1;//ting zhi</p><p><b> break;</b></p><p>
130、 case mid_wen:</p><p> JDQ1=1;JDQ2=1;JDQ3=0; </p><p> LED_zhong=LED_kuai=1;LED_man=0;//man</p><p><b> break;</b></p><p> case hig_wen:</p><
131、p> JDQ1=1;JDQ3=1;JDQ2=0; </p><p> LED_kuai=LED_man=1;LED_zhong=0;//zhong</p><p><b> break;</b></p><p> case vhi_wen:</p><p> JDQ2=1;JDQ3=1;JDQ1=0;
132、 </p><p> LED_zhong=LED_man=1;LED_kuai=0;//kuai</p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p> ca
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能聲控電風(fēng)扇--單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)的溫度控制智能電風(fēng)扇
- 課程設(shè)計——基于單片機(jī)的智能電風(fēng)扇控制系統(tǒng)
- 單片機(jī)紅外遙控系統(tǒng)課程設(shè)計---電風(fēng)扇
- 課程設(shè)計——基于單片機(jī)的智能電風(fēng)扇控制系統(tǒng)
- 51單片機(jī)課程設(shè)計
- 智能電風(fēng)扇畢業(yè)論文--基于單片機(jī)的智能落地電風(fēng)扇的設(shè)計
- 基于51單片機(jī)課程設(shè)計
- 51單片機(jī)課程設(shè)計題目
- 51單片機(jī)課程設(shè)計報告
- 畢業(yè)論文--基于單片機(jī)的智能電風(fēng)扇的設(shè)計
- 51單片機(jī)多機(jī)通信課程設(shè)計
- c51單片機(jī)課程設(shè)計
- 基于51單片機(jī)課程設(shè)計報告
- 基于51單片機(jī)的課程設(shè)計
- 單片機(jī)課程設(shè)計--基于51單片機(jī)的定時鬧鐘設(shè)計
- c51單片機(jī)課程設(shè)計
- 基于51單片機(jī)課程設(shè)計--基于51單片機(jī)的紅外線設(shè)計
- 基于51單片機(jī)的智能交通燈課程設(shè)計
- 基于51單片機(jī)的智能交通燈課程設(shè)計
評論
0/150
提交評論