2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《單片機原理與應用》</p><p>  2013年 6 月 </p><p> 課程論文題目基于單片機的智能落地電風扇的設計</p><p> 院系名稱計算機科學與技術(shù)</p><p> 專業(yè)(班級)計本(2)班</p><p> 學號</p><p> 姓名<

2、/p><p> 指導教師</p><p>  摘要:本設計主要介紹了一種智能電風扇的設計方案。該系統(tǒng)以AT89C51芯片的單片機為核心,應用通用的溫度傳感器來實現(xiàn)對環(huán)境溫度的監(jiān)控,同時系統(tǒng)跟隨環(huán)境溫度的變化來改變電機的運行狀態(tài)。</p><p>  本設計采用的溫度智能控制,使風扇可以感知環(huán)境的溫度,以調(diào)節(jié)風扇的轉(zhuǎn)速,達到更好的工作效果。用戶可以選擇這種智能調(diào)速的方式,

3、也可以選擇手動設定方式來控制轉(zhuǎn)速;同時用戶也可以使用遙控器來控制風扇的運行狀態(tài)。當選擇手動設定方式時,該功能不發(fā)揮作用。而定時工作功能可以讓用戶自己定制風扇工作時間的長短,以提供更人性化的服務。LED顯示功能使用液晶屏顯示當前室溫度,風扇的轉(zhuǎn)速,風扇的工作模式。</p><p>  關(guān)鍵詞:AT89C51 智能電風扇 溫度傳感器 無極調(diào)速 </p><p><b>  1

4、 緒言</b></p><p>  本章主要闡述了智能電風扇的研究背景,現(xiàn)狀,發(fā)展方向,明確的指出了制作智能電風扇所用到的元器件,以及各個元器件的功能描述。</p><p><b>  1.1.課題背景</b></p><p>  我們常見的電風扇一般只有四、五個風速檔,用的是人工開關(guān),不知道室內(nèi)溫度,只是人為的調(diào)節(jié)鈣用哪個檔。而自

5、動調(diào)溫調(diào)溫電風扇這個設計師一個新領(lǐng)域,它用的是在帶你走行業(yè)中應用廣泛的AT89C51單片機。通過單片機與溫度探測器結(jié)合,將其應用于家用電風扇等轉(zhuǎn)速精確控制,能夠有良好的性能。</p><p> ?。?) 自動調(diào)溫電風扇簡介</p><p>  它使用直流電動機的控制以模擬電路為基礎(chǔ),運算放大器、非線性集成電路以及數(shù)字電路組成,使得對電風扇各檔風量大調(diào)節(jié)更加細化,使得電風扇等控制更加人性化

6、,同時它也具有全自動、控制簡單、智能化,制作容易,使用溫度傳感器、專用控制集成電路和單片機,實現(xiàn)當室溫達到最佳所設定開啟的溫度是,電風扇自動開啟,并且可以根據(jù)室溫變化換風速;檔室溫低于這一設定溫度時,電風扇自動關(guān)閉。同時顯示當前室內(nèi)溫度,和自己所設定的溫度,提醒人們合理使用電風扇。</p><p> ?。?) 自動調(diào)溫電風扇設計目的</p><p>  在這種情況下,自動調(diào)溫電風扇應運而

7、生。我們的生活加快,人數(shù)需要處理的事情越來越多,在炎熱的夏天,回到家更想好好休息,消除自己一天的工作疲勞,而自動調(diào)溫電風扇等設計就解決了這些問題。</p><p>  自動調(diào)溫電風扇是通過單片機控制來實現(xiàn)直流電動機運轉(zhuǎn)頻率的自動調(diào)節(jié),從而達到改變風速的目的。此設計用到AT89C51單片機,它是把微處理器,存儲器(RAM和ROM),輸入/輸出接口以及定時器/計數(shù)器集成在一起的集成電路芯片。他與集成電路相結(jié)合,組成一

8、個設定溫度,感溫,控制和輸出與一身的模塊。利用單片機AT89C51和一些電路對室溫進行探測,從而對電風扇進行開和關(guān)斷一系列控制。</p><p>  1.2 . 系統(tǒng)的控制特點與性能要求</p><p>  本設計主要目的是使普通的電風扇的功能更加強大,使操作簡單化,智能化,主要實現(xiàn)以下幾個部分的功能:</p><p>  a.溫度控制功能:電風扇可以感知環(huán)境溫度,

9、以調(diào)節(jié)風扇的轉(zhuǎn)速,達到更好的工作效果。</p><p>  b.定時工作功能:該定時功能可以讓自己制定風扇工作時間的長短,以提供更人性化的服務。</p><p>  c、無級調(diào)風功能:該功能可解決普通電風扇檔位風速變化過大的缺點,可實現(xiàn)任意風速。</p><p>  d、遙控控制:該功能可以讓用戶遠距離控制電風扇,并選擇電風扇等運作狀態(tài)。</p>&l

10、t;p>  e、實時溫度顯示:該功能方便用戶根據(jù)室溫調(diào)節(jié)電機的啟動溫度點,達到節(jié)能目的。</p><p>  2 本設計用到的元器件簡介 </p><p>  2.1 Inter公司AT89C51單片機簡介</p><p>  AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C5

11、1單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示</p><p><b>  主要特性:</b></p><p>  ·與MCS-51 兼容</p><p>  ·4K字節(jié)可編程閃爍存儲器</p><p>  ·壽命:1000寫/擦循環(huán)</p>

12、<p>  ·數(shù)據(jù)保留時間:10年</p><p>  ·全靜態(tài)工作:0Hz-24MHz</p><p>  ·三級程序存儲器鎖定</p><p>  ·128×8位內(nèi)部RAM</p><p>  2.2、AT89C2051芯片簡介</p><p>  AT

13、89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。</p><p>  2.3 DS18B20溫度傳感器</p><p>  DS18B20內(nèi)部結(jié)構(gòu)如圖3.2.1所示,主要由4部分組成:64位ROM、溫度傳感器、非揮發(fā)的溫度報

14、警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖3.5.2所示,DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端(在寄生電源接線方式時接地,見圖3.8.2)。</p><p>  ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。64位ROM的排的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。ROM的作

15、用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。</p><p>  圖3.2.1 DS18B20的內(nèi)部結(jié)構(gòu)</p><p><b>  3 硬件設計</b></p><p>  3.1 總體硬件設計</p><p>  系統(tǒng)總體設計框圖如下4-1所示: </p>

16、<p>  圖4-1系統(tǒng)總體設計框圖</p><p>  對于單片機中央處理器的方案設計,根據(jù)要求,我們可以選用具有4KB片內(nèi)EPPROM的AT89C51單片機作為中央處理器。作為整個控制系統(tǒng)的核心,AT89C51內(nèi)部已包含了定時器、程序存儲器、數(shù)據(jù)存儲器等硬件,其硬件能符合整個控制系統(tǒng)的要求,不需要外接其他存儲器芯片和定時器件,方便地構(gòu)成一個最小系統(tǒng)。整個系統(tǒng)結(jié)構(gòu)緊湊,抗干擾能力強,競價比高。是比

17、較合適的方案。</p><p>  3.2 直流穩(wěn)壓電源的設計</p><p>  直流穩(wěn)壓電源主要功能是為后兩個部分提供電壓的輸出。在設計中分出了2個支路,分別輸出5V電壓。</p><p>  直流穩(wěn)壓電源主要由電源變壓器、整流電路、濾波電路和穩(wěn)壓電路四部分組成。</p><p>  3.2.1 單相橋式整流電路</p>

18、<p>  整流電路主要實現(xiàn)將交流電轉(zhuǎn)換成直流電。實現(xiàn)這以目標主要是靠二極管的單向?qū)щ娮饔?,因此二極管是構(gòu)成整流電路的關(guān)鍵元件。我采用的是單相橋式整流電路。</p><p>  3.3 電機調(diào)速模塊</p><p>  3.3.1 電機調(diào)速原理</p><p>  通過單片機控制可控硅的導通角,從而改變加在電機兩端的有效電壓來調(diào)節(jié)電動機的運轉(zhuǎn)。<

19、;/p><p>  可控硅導通條件如下:</p><p>  1)陽—陰極間加正向電壓;·</p><p>  2)控制極—陰極間加正向觸發(fā)電壓;</p><p>  3)陽極電流IA大于可控硅的最小維持電流IS。</p><p>  3.4 溫度顯示與控制模塊設計</p><p> 

20、 3.4.1 溫度檢測硬件模塊設計</p><p>  圖4-4-1以MCS-51系列單片機為例,畫出了DS18B20與微處理器的典型連接。圖4-4-1(a)中DS18B20采用寄生電源方式,其VDD和GND端均接地,圖4-4-1(b)中DS18B20采用外接電源方式,其VDD端用3V~5.5V電源供電。</p><p>  假設單片機系統(tǒng)所用的晶振頻率為12MHz,根據(jù)DS18B20的

21、初始化時序、寫時序和讀時序,分別編寫了3個子程序:INIT為初始化子程序,WRITE為寫(命令或數(shù)據(jù))子程序,READ為讀數(shù)據(jù)子程序,所有的數(shù)據(jù)讀寫均由最低位開始。</p><p> ?。╝)寄生電源工作方式</p><p>  (b)外接電源工作方式</p><p>  圖4-4-1 DS18B20與微處理器的連接圖</p><p>  主

22、機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:初始化、ROM操作指令、存儲器操作指令。必須先啟動DS18B20開始轉(zhuǎn)換,再讀出溫度轉(zhuǎn)換值。假設接一單元,再按照溫度值字節(jié)的表示格式及其符號位,經(jīng)過簡單的變換即可得到實際溫度探測電路。單線數(shù)字溫度傳感器DS18B20 采用一線總線接口,大大節(jié)省了系統(tǒng)的I/O 資源。如圖4-4-2所示。</p><p>  圖4-4-2 溫度傳感器DS18B20 電路</p&

23、gt;<p>  3.4.2 溫度顯示硬件模塊設計</p><p>  溫度傳感器可以選用LM324A的運算放大器,將其設計成比例控制調(diào)節(jié)器,輸出電壓與熱敏電阻的阻值成正比,但這種方案需要多次檢查后方可使采樣精確,過于繁瑣。所以我采用老性能更為優(yōu)越的DS18B20數(shù)字溫度傳感器,它可以直接將模擬溫度信號轉(zhuǎn)化為數(shù)字信號,降低了電路的復雜程度,提高了電路的運行質(zhì)量。</p><p&

24、gt;  本模塊以DS18B20作為溫度傳感器,AT89C51作為處理器,配以溫度顯示作為溫度控制輸出單元。整個系統(tǒng)力求結(jié)構(gòu)簡單,功能完善。電路圖如圖4-4-3所示。系統(tǒng)工作原理如下:DS18B20進行現(xiàn)場溫度測量,將測量數(shù)據(jù)送入AT89C51的P3.7口,經(jīng)過單片機處理后顯示溫度值,并與設定溫度值的上下限值比較,若高于設定值或低于設定下限值則控制電機轉(zhuǎn)速進行調(diào)整。</p><p>  圖4-4-3 DS18B

25、20溫度計原理圖</p><p>  3.5紅外收/發(fā)電路</p><p>  紅外收/發(fā)工作原理圖如下:</p><p>  圖4-5紅外收/發(fā)工作原理圖</p><p>  3.5.1 紅外線遙控器發(fā)射電路</p><p>  紅外遙控是目前家用電器中用得較多的遙控方式。在了解紅外線遙控之前,先得了解什么是紅外線

26、。我們知道,人的眼睛能看到的可見光按波長從長到短排列,依次為紅、橙、黃、綠、青、藍、紫。其中紅光的波長范圍是0.62~0.76m的波長范圍為0.38~0.6m。比紫光波長還短的光叫紫外線,比紅光波長還長的光叫紅外線。</p><p><b>  紅外線主要優(yōu)點是:</b></p><p> ?。?)具有較高的傳播速度,不會產(chǎn)生因干涉、空間反射以及雙折射等作用而出現(xiàn)的干

27、擾;</p><p> ?。?)傳播中不會產(chǎn)生畸變噪音;</p><p> ?。?)在高峰值功率情況下所需的功率較??;</p><p> ?。?)采用一定的調(diào)制方法可以有高的干擾性;</p><p> ?。?)在僅有一個載波頻率的情況下可以有高的穩(wěn)定性。</p><p>  正因為紅外線傳輸有上述一系列優(yōu)點,因此獲得了

28、很大的發(fā)展。借助于紅外線具有直線傳播的特性,利用紅外傳感器具有靈敏度高、響應速度快和光譜范圍窄的性能,同時利用單片機具有結(jié)構(gòu)緊湊、可靠性高、數(shù)據(jù)處理能力強、速度快、功耗小、成本低的特點,可以制作靈敏度高、抗干擾性能優(yōu)良的紅外遙控裝置。由于紅外線遙控器具有體積小、功耗低、功能強、成本低等特點,因而,繼彩電、錄音機、音響設備、空調(diào)機以及玩具等其他小型電器裝置也紛紛采用紅外線遙控。工業(yè)設備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙

29、控不僅安全可靠,而且能有效地隔離電氣干擾。下面就紅外遙控技術(shù)的特點做下簡單的介紹。</p><p>  紅外線遙控器發(fā)射原理圖如下: </p><p>  圖4-5-1 遙控器原理框圖</p><p><b>  1 遙控器</b></p><p><b>  (1)、系統(tǒng)功能</b></

30、p><p>  該系統(tǒng)具有如下幾個功能:</p><p>  1)、通過遙控器控制電機的啟動、停止;</p><p>  2)、通過遙控器控制電機的加速、減速運行;</p><p>  3)、通過遙控器控制電機的全自動與手動切換;</p><p>  4)、通過遙控器控制電機的運轉(zhuǎn)時間;</p><p&

31、gt;  5)、通過遙控器控制電機的搖頭與不搖頭切換;</p><p>  6)、手動狀態(tài)下風型的選擇。</p><p><b> ?。?)、按鍵功能</b></p><p>  K1:低檔、中檔、高檔,鍵值為01H</p><p>  K2:彩燈,鍵值為 02H</p><p>  K3:自然風

32、、睡眠風、正常風鍵,值為03H</p><p>  K4:定時 ,鍵值為04H</p><p>  K5:開/關(guān)機,鍵值為05H</p><p><b>  K6:搖頭/固定</b></p><p>  (3)、當無按鍵按下時,延時30秒后進入待機狀態(tài),系統(tǒng)處于低功耗模式。當有按鍵按下時,INT0中斷產(chǎn)生,同時喚醒CPU

33、進入工作狀態(tài)。</p><p>  3.5.2紅外接收電路</p><p><b>  1、接收解碼方式</b></p><p>  解碼的關(guān)鍵是如何識別“0”,和“1”,從位 的定義我們可以發(fā)現(xiàn)“0”,“1”均以0.56的低電平開始,不同的是高電平的寬度不同區(qū)別“0”和“1”,如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的

34、電平為低,說明該位位“0”,反之則為“1”,未來可靠其間,壓縮必須比0.56ms長些,但又不能超過0.12ms,否則如果該位位“0”,讀到的意思下一位的高電平,因此?。?.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84左右均可。根據(jù)碼的格式,應該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。中斷接收時子程序首先讀取T0定時器的長度,如果是0.56ms就認為是“0”,將其存入緩沖區(qū)并且計數(shù)器加一,如果是1.68

35、ms就認為是“1”,將其存入緩沖區(qū)并且計時器加一。如果計時器值為32時,就接收結(jié)束標志位并且計數(shù)器清0,如果計時器值不為32時,就認為接收誤碼,計時器也將清0,傳輸重新等待讀取紅外信號。</p><p><b>  2、紅外接收電路</b></p><p>  接收電路可以使用一種集成紅外線接收和放大于一體的一體化紅外線接收器,不需要任何外接元件,就能完成從紅外線接收

36、到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸,這里使用HS0038接收器,它對外只有3個引腳:Out、GND、Vcc與單片機接口非常方便,接收電路圖如圖4-5-1所示。</p><p>  圖4-5-1紅外接收電路圖</p><p>  HS0038接收原理:紅外線接收是把遙控器發(fā)送的數(shù)據(jù)(已調(diào)信號)轉(zhuǎn)換成一定格式的控制指令

37、脈沖(調(diào)制信號?;鶐盘枺?,是完成紅外線的接收、放大、解調(diào),還原成發(fā)射格式(高、低電位剛好相反)的脈沖信號。這些工作通常有一體化的接收頭來完成,輸出TTL兼容電平。最后通過解碼脈沖信號轉(zhuǎn)換成數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的傳輸。如果相鄰的兩個中斷間隔的數(shù)據(jù)長度0. 56ms,說明接收到的是“0”;時間長度是1.12ms則為“1”。因此,脈沖電平的每一次挑撥都會形成一次中斷,在中斷服務子程序中即可實現(xiàn)一次性兌一連串連續(xù)波形的測量,在測量后對0和1的歌

38、數(shù)據(jù)統(tǒng)計從而測出控制指令的功能。</p><p><b>  4 軟件設計</b></p><p><b>  軟件總體流程描述</b></p><p>  在主程序初始化之后,開始反復檢測各模塊相關(guān)部分的緩沖區(qū)標志,如果緩沖區(qū)標志置位,說明有相應的數(shù)據(jù)需要處理,然后主程序調(diào)用響應的處理子模塊,對于溫度傳感器,我們采用定

39、時采集數(shù)據(jù)的方法,在定時中斷子程序中,采集相應的數(shù)據(jù),并進行判斷,如果是異常數(shù)據(jù),則將數(shù)據(jù)保存在系統(tǒng)緩沖區(qū),同時置對應的緩沖區(qū)標志。然后主程序?qū){(diào)用相應的子程序進行處理。軟件主流程圖見下頁圖5-2所示。</p><p>  當有按鍵按下的時候,采用鍵盤中斷子程序掃描相應的鍵盤碼,然后發(fā)給主程序,置對應的鍵盤按鍵標志位。在主程序中,當有鍵盤按下的時候,調(diào)用對應的鍵盤處理子程序。</p><p&

40、gt;  圖4-2 軟件主流程</p><p>  4.1 數(shù)字溫度傳感器模塊程序流程圖</p><p>  圖5-2-1 數(shù)字溫度傳感器模塊程序流程圖</p><p>  4.2 電機控制模塊</p><p>  電機涉及到轉(zhuǎn)速和擺頭兩個方面。風扇的轉(zhuǎn)速由光耦合器觸發(fā)導通角控制,搖頭部分可以使用普通電風扇蝸桿部分搖頭調(diào)速,只是把它用一

41、個電磁閥來控制其導通與斷開來實現(xiàn)搖頭控制。在此基礎(chǔ)上我們通過軟件對風扇的轉(zhuǎn)動進行精細的控制,以實現(xiàn)多種風類型。對于各種風類型我們依照如下定義:正常的芯片,使用默認的12位轉(zhuǎn)換精度,外接供電電源,子程序GETWD讀取的溫度值高位字節(jié)送WDMSB單元,低位字節(jié)送WDLSB風:風扇按設定之強,中,弱風互速運轉(zhuǎn)。</p><p>  圖4-2-2 電機控制模塊</p><p>  自然風:風扇馬

42、達按預編電腦程序作不規(guī)則運轉(zhuǎn),配合風速鍵之設定,可分強自然風,中自然風,弱自然風,模仿大自然之風吹效果,令風量更柔和更舒服。</p><p>  睡眠風:風扇馬達進入自然風電腦程序控制,其原理是人體的體溫會在睡眠后慢慢下降。風扇的風量亦會慢慢減弱,以免入睡后著涼,其減弱規(guī)律如下:</p><p>  當最初設定為強風時,風扇按強自然風運轉(zhuǎn)半小時,后轉(zhuǎn)為中自然風,半小時后再變?yōu)槿踝匀伙L,直至

43、預置時間結(jié)束,或被關(guān)掉為止;當最初設定為中時,風扇按中自然風運轉(zhuǎn)半小時,轉(zhuǎn)為弱自然風,直至預置時間結(jié)束,或被關(guān)掉為止;當最初設定為弱自然風時,風扇按弱自然風運轉(zhuǎn),直至預置時間結(jié)束,或被關(guān)點為止。如圖5-2-2所示。</p><p>  從軟件層角度來說,就是根據(jù)前一刻的風扇狀態(tài)以及用戶的輸入來確定當前時刻所要輸出的風類型和風速。</p><p>  從軟件驅(qū)動層角度來說,就是根據(jù)軟件層確定

44、的當前時刻風類型和風速量化所要輸出的風速值。</p><p>  從硬件驅(qū)動層角度來說,對于風速轉(zhuǎn)速的控制,最終是1根線的選通以線上可控硅導通時間的控制,也就是說,將軟件驅(qū)動層量化出的風速值。轉(zhuǎn)換成1根線的選通以及選通的線上可控硅的導通時間。</p><p><b>  4.3 人機接口</b></p><p>  本部分功能主要便于用戶使用

45、電風扇,使用戶只要簡單的操作,就能實現(xiàn)需要的全部功能,主要有以下幾個方面組成:</p><p><b>  鍵盤操作模塊</b></p><p>  在電風扇底座部分也有一個2*3小鍵盤,按鍵功能分配如圖4.3.5所示:</p><p>  圖5-2-3 風扇控制面板示意圖</p><p>  可以進行風的強度,類型,

46、定時等系統(tǒng)設置。與之對應的是鍵盤掃描處理模塊?;舅枷肴缦拢?lt;/p><p>  如果有按鍵按下,中斷處理子程序首先進行掃描按鍵,得到對應的正確的鍵盤掃描碼,然后根據(jù)鍵盤掃描碼得到對應的按鍵號,置有按鍵標志,并將按鍵號保持在全局變量中。系統(tǒng)不停的判斷有按鍵標志,如果沒有則跳過,如果有按鍵按下,則進行響應的按鍵處理,同時實時的在LED上顯示,并將最終結(jié)果反饋到系統(tǒng)各部分。對應的鍵盤處理過程的軟件流程圖如圖4-2-4

47、所示。</p><p>  圖4-2-4 鍵盤處理過程的軟件流程圖</p><p>  4.4 紅外收/發(fā)模塊</p><p>  紅外發(fā)射程序流程圖如圖5-2-4所示。</p><p>  圖4-2-4 紅外發(fā)射程序流程圖</p><p>  紅外接收軟件使用輸入捕捉中斷處理紅外遙控信號,根據(jù)不同的紅外編碼,可以

48、完成調(diào)節(jié)風速,風型,時間,照明等功能。紅外中斷服務程序流程圖如圖4-2-5所示。</p><p>  圖4-2-5紅外中斷服務程序流程圖</p><p><b>  附錄:程序清單</b></p><p>  typedef unsigned char byte; </p><p>  typedef unsigned

49、int word;</p><p><b>  //以下管腳配置</b></p><p>  //ds18b20部分</p><p>  sbit DQ =P3^4; </p><p><b>  //顯示部分</b></p><p>  sbit DB=P2^0;</

50、p><p>  sbit CP=P2^1;</p><p><b>  //發(fā)光顯示部分</b></p><p>  sbit LED_dingshi=P0^0;</p><p>  sbit LED_shoudong =P0^1;</p><p>  sbit LED_zidong=P0^2;&l

51、t;/p><p>  sbit LED_kuai =P0^3;</p><p>  sbit LED_zhong =P0^4;</p><p>  sbit LED_man =P0^5;</p><p><b>  //鍵盤定義部分</b></p><p>  #define wujian 0x3

52、f</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><p>  sbit KEY4=P1^3 ; // 3</p><p>  

53、sbit KEY5=P1^4 ; // 0確定</p><p><b>  //繼電器控制部分</b></p><p>  sbit JDQ1=P2^4; //0表示開通,1表示關(guān)斷</p><p>  sbit JDQ2=P2^5;</p><p>  sbit JDQ3=P2^6;</p>&l

54、t;p><b>  //蜂鳴器部分</b></p><p>  sbit call=P2^7; //低電平鳴叫</p><p>  #include <REGX51.H></p><p>  #include"touwenjian.h"</p><p>  extern void

55、 delay(word useconds) </p><p><b>  { </b></p><p>  for(;useconds>0;useconds--); </p><p><b>  } </b></p><p>  static byte ow_reset(void) </

56、p><p><b>  { </b></p><p>  byte presence;</p><p><b>  EA=0; </b></p><p>  DQ = 0; // pull DQ line low </p><p>  delay(45); // leave

57、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; // get presence signal </p>&l

58、t;p>  delay(40); // wait for end of timeslot //491us</p><p><b>  EA=1;</b></p><p>  return(presence); // presence signal returned </p><p>  } // 0=presence, 1 =

59、no part </p><p>  static byte read_byte(void) </p><p><b>  { </b></p><p><b>  byte i; </b></p><p>  byte value = 0;</p><p><b>

60、;  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 start timeslot </p>

61、;<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>  delay(6);// wait for re

62、st of timeslot </p><p><b>  } </b></p><p><b>  EA=1;</b></p><p>  return(value); </p><p><b>  } </b></p><p>  static vo

63、id 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--) // write

64、s 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&0x0

65、1; //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>  }</b>

66、;</p><p><b>  EA=1; </b></p><p>  delay(5); </p><p><b>  } </b></p><p>  word Read_Temperature(void) </p><p><b>  { </b>

67、;</p><p><b>  union{ </b></p><p>  byte c[2]; </p><p><b>  word x; </b></p><p><b>  }temp; </b></p><p>  ow_reset(); &l

68、t;/p><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><

69、p>  ow_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&

70、gt;<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>

71、>4)&0x00ff);</p><p><b>  }</b></p><p>  #include <REGX51.H></p><p>  #include"touwenjian.h"</p><p><b>  //數(shù)據(jù)區(qū)</b></p&g

72、t;<p>  #define time_default 41</p><p>  byte dingshi_time=time_default;//存放定時時間''''''</p><p>  bit flag_dingshi=0; //0表示沒有定時</p><p>  word dingshi_j

73、ishu3=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></p&

74、gt;<p>  #define hwx_delay_const 3 //人體感應延時時間</p><p>  byte hwx_delay=hwx_delay_const;//用于保存紅外線觸發(fā)延長時間</p><p>  word hwx_jishu1=0;</p><p><b>  //</b></p>&l

75、t;p>  byte wendu=0;//用于存放溫度值''''''</p><p><b>  //</b></p><p>  #define low_wen 18</p><p>  #define mid_wen 20</p><p>  #define hi

76、g_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ā)顯示</p>

77、;<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 );</p>&

78、lt;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>  void weak_

79、default(void);</p><p>  void main()</p><p><b>  {</b></p><p>  //定時器0用于鍵盤掃描</p><p>  TMOD=0x01|TMOD;//定時器0的1方式</p><p>  TH0=0xd8;TL0=0xf0; //定

80、時器0初始化10ms掃描一次</p><p>  //定時器1用于顯示</p><p>  TMOD=0x10|TMOD;//定時器1的1方式</p><p>  TH1=0x15;TL1=0xA0; //定時器1初始化60ms中斷一次</p><p><b>  //外部中斷</b></p><p&

81、gt;  TCON=TCON|0x01;//外部中斷0都下降沿觸發(fā)</p><p><b>  //以下為開啟部分</b></p><p>  IP=0X01; //兩個定時器同等優(yōu)先級</p><p>  IE=0x8b; //開啟定時器0,1,外部中斷0中斷</p><p><b>  //<

82、/b></p><p>  while(Real_Tem()==85);</p><p>  auto_speed();</p><p>  LED_zidong=0; //剛開始為自動方式 </p><p>  P1=P1|0X7C; //拉高五個鍵盤 </p><p>  wendu_stor=100;

83、 //兩個不可能值//用于啟動顯示</p><p>  time_stor=100; //兩個不可能值//用于啟動顯示</p><p><b>  //</b></p><p>  TR0=1; //開啟定時器0</p><p><b>  TR1=1;</b></p><p&

84、gt;<b>  while(1)</b></p><p><b>  {</b></p><p>  wendu=Real_Tem();</p><p><b>  } </b></p><p><b>  }</b></p><p

85、>  void time0(void) interrupt 1</p><p><b>  {</b></p><p>  byte jianpan; </p><p>  TH0=0xd8;TL0=0xf0;</p><p>  jianpan = P1 & wujian;</p>

86、<p>  if(jianpan != wujian) //如果還有鍵盤值提取鍵盤值</p><p><b>  {</b></p><p>  delay(500);//延時消抖</p><p>  jianpan = P1 & wujian;</p><p>  if(jianpan==wujia

87、n)goto time_out;</p><p>  switch(state)</p><p><b>  {</b></p><p>  case dingshi: if(KEY1==0)//狀態(tài)轉(zhuǎn)換時做些相應的處理</p><p><b>  {</b></p><p&g

88、t;  state=shoudong;</p><p>  LED_shoudong=0;</p><p>  flag_dingshi_delay=0;dingshi_delay=100;</p><p>  time_stor=100;wendu_stor=100;//觸發(fā)</p><p>  mingjiao();</p>

89、<p>  while(KEY1==0);</p><p><b>  }</b></p><p>  else if(KEY2==0)//加分</p><p><b>  {</b></p><p>  if(dingshi_time<90)</p><p&g

90、t;  {dingshi_time+=10;}</p><p>  dingshi_delay=100;//</p><p>  mingjiao();</p><p>  while(KEY2==0);</p><p><b>  }</b></p><p>  else if(KEY3==0)

91、//減分</p><p><b>  {</b></p><p>  if(dingshi_time>10)</p><p>  {dingshi_time-=10;}</p><p>  dingshi_delay=100;//</p><p>  mingjiao();</p>

92、;<p>  while(KEY3==0);</p><p><b>  }</b></p><p>  else if(KEY4==0)//定時與否</p><p><b>  {</b></p><p>  flag_dingshi=~flag_dingshi;</p>

93、<p>  if(flag_dingshi==1){LED_dingshi=0;}</p><p>  else {LED_dingshi=1;dingshi_jishu3=1000;}</p><p>  dingshi_delay=100;//</p><p><b>  //</b></p><p>

94、  mingjiao();</p><p>  while(KEY4==0);</p><p><b>  }</b></p><p>  else if(KEY5==0)</p><p><b>  {</b></p><p>  weak_default();</p

95、><p>  mingjiao();</p><p>  while(KEY5==0);</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case shoudong:if(KEY1==0) //狀態(tài)轉(zhuǎn)換時做些相應的處理

96、</p><p><b>  {</b></p><p>  state=zidong;</p><p>  auto_speed();</p><p>  LED_shoudong=1;LED_zidong=0;</p><p>  mingjiao();</p><p>

97、;  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><p>  

98、LED_zhong=LED_man=1;LED_kuai=0;</p><p>  mingjiao();</p><p>  while(KEY2==0); </p><p><b>  }</b></p><p>  else if(KEY3==0)//中2</p><p>&l

99、t;b>  {</b></p><p>  JDQ1=1;JDQ3=1;JDQ2=0;//關(guān)斷其它</p><p>  LED_kuai=LED_man=1;LED_zhong=0;</p><p>  mingjiao();</p><p>  while(KEY3==0);</p><p

100、><b>  }</b></p><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;<

101、/p><p>  mingjiao();</p><p>  while(KEY4==0);</p><p><b>  }</b></p><p>  else if(KEY5==0)//停4</p><p><b>  {</b></p><

102、p>  weak_default();</p><p>  mingjiao();</p><p>  while(KEY5==0);</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case

103、zidong: if(KEY1==0) //狀態(tài)轉(zhuǎn)換時做些相應的處理</p><p><b>  {</b></p><p>  state=dingshi;</p><p>  LED_zidong=1;</p><p>  flag_dingshi_delay=1;dingshi_delay=100;//開始延時&l

104、t;/p><p>  time_stor=100;//</p><p>  mingjiao();</p><p>  while(KEY1==0);</p><p><b>  }</b></p><p>  else if(KEY2==0)//快1</p><p><

105、b>  {</b></p><p>  JDQ2=1;JDQ3=1;JDQ1=0;//關(guān)斷其它</p><p>  LED_zhong=LED_man=1;LED_kuai=0;</p><p>  state=shoudong;</p><p>  LED_zidong=1;LED_shoudong=0;&l

106、t;/p><p>  mingjiao();</p><p>  while(KEY2==0);</p><p><b>  }</b></p><p>  else if(KEY3==0)//中2</p><p><b>  {</b></p><p>

107、  JDQ1=1;JDQ3=1;JDQ2=0;//關(guān)斷其它</p><p>  LED_kuai=LED_man=1;LED_zhong=0;</p><p>  state=shoudong;</p><p>  LED_zidong=1;LED_shoudong=0;</p><p>  mingjiao();</p>&

108、lt;p>  while(KEY3==0);</p><p><b>  }</b></p><p>  else if(KEY4==0)//慢3</p><p><b>  {</b></p><p>  JDQ1=1;JDQ2=1;JDQ3=0;//關(guān)斷其它</p><

109、;p>  LED_zhong=LED_kuai=1;LED_man=0;</p><p>  state=shoudong;</p><p>  LED_zidong=1;LED_shoudong=0;</p><p>  mingjiao();</p><p>  while(KEY4==0);</p><

110、p><b>  }</b></p><p>  else if(KEY5==0)//停4</p><p><b>  {</b></p><p>  weak_default();</p><p>  mingjiao();</p><p>  while(KEY5==

111、0);</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case weak:</p><p>  if(KEY1==0)</p><p><b>  {</b></p>

112、<p>  state=zidong;LED_zidong=0;</p><p>  wendu_stor=100;//兩個不可能值</p><p>  time_stor=100;//兩個不可能值</p><p>  auto_speed();</p><p>  mingjiao();</p><p> 

113、 while(KEY1==0);</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  time

114、_out: ;</p><p><b>  }</b></p><p>  void timer1(void) interrupt 3 </p><p><b>  { </b></p><p>  TH1=0x15;TL1=0xa0;</p><p><b>  

115、//</b></p><p><b>  //紅外線到記時</b></p><p><b>  EX0=0;</b></p><p>  if(hwx_jishu1<999){ hwx_jishu1++; }</p><p><b>  else</b><

116、;/p><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>

117、  EX0=1;</b></p><p><b>  //1分鐘定時</b></p><p>  if(flag_dingshi==1)</p><p><b>  {</b></p><p>  if(dingshi_jishu3>0){dingshi_jishu3--;}<

118、;/p><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

119、>  }</b></p><p><b>  }</b></p><p><b>  //5秒延時</b></p><p>  if(flag_dingshi_delay==1)</p><p><b>  {</b></p><p>

120、  if(dingshi_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>&l

121、t;p>  LED_shoudong=0;</p><p>  time_stor=100;wendu_stor=100; //</p><p>  mingjiao();</p><p><b>  }</b></p><p><b>  }</b></p><p&g

122、t;<b>  //顯示和溫控</b></p><p>  switch(state){</p><p>  case dingshi://在定時的時候只顯示時間</p><p>  if(time_stor!=dingshi_time){display(dingshi_time,1);time_stor=dingshi_time;}</

123、p><p><b>  break;</b></p><p>  case shoudong:</p><p>  case zidong://是否有定時,有則交替顯示溫度和時間,沒有則只顯示溫度</p><p>  if(flag_dingshi!=0)//</p><p><b>  

124、{</b></p><p>  static byte jiaoti_jishu2=0;</p><p>  static bit flag_jiaoti=0;</p><p>  if(jiaoti_jishu2<49){jiaoti_jishu2++;}</p><p>  else {flag_jiaoti=~flag

125、_jiaoti;jiaoti_jishu2=0;}</p><p>  if(flag_jiaoti!=0){ </p><p>  if(time_stor!=dingshi_time) {display(dingshi_time,1);time_stor=dingshi_time;wendu_stor=100;}//顯示時間</p><p>

126、<b>  }</b></p><p><b>  else</b></p><p><b>  { </b></p><p>  if(wendu_stor!=wendu)</p><p>  {display(wendu,0);wendu_stor=wendu;time

127、_stor=100;}//顯示溫度</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(we

128、ndu_stor!=wendu){display(wendu,0);wendu_stor=wendu;}// 顯示溫度 </p><p><b>  }</b></p><p><b>  //溫度控制速度</b></p><p>  if(state==zidong)</p><p><b

129、>  {</b></p><p>  switch(wendu)</p><p><b>  {</b></p><p>  case low_wen:</p><p>  JDQ1=1;JDQ2=1;JDQ3=1; </p><p>  LED_zhong=LED_man=L

130、ED_kuai=1;//ting zhi</p><p><b>  break;</b></p><p>  case mid_wen:</p><p>  JDQ1=1;JDQ2=1;JDQ3=0; </p><p>  LED_zhong=LED_kuai=1;LED_man=0;//man</p>

131、<p><b>  break;</b></p><p>  case hig_wen:</p><p>  JDQ1=1;JDQ3=1;JDQ2=0; </p><p>  LED_kuai=LED_man=1;LED_zhong=0;//zhong</p><p><b>  break;&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論