久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10693|回復(fù): 2
收起左側(cè)

基于單片機(jī)的智能風(fēng)扇設(shè)計(jì) 帶驅(qū)蚊與調(diào)速電路+源程序

  [復(fù)制鏈接]
ID:441411 發(fā)表于 2018-12-7 09:18 | 顯示全部樓層 |閱讀模式
目   錄

1 緒   論1
11 智能風(fēng)扇發(fā)展史1
12 智能風(fēng)扇的工作原理2
13 本次設(shè)計(jì)的主要任務(wù)和內(nèi)容2
2 方案論證3
21 控制核心的選擇3
22 顯示電路的選擇3
23 調(diào)速方式的選擇4
24 溫度傳感器的選擇5
25 超聲波發(fā)生器的選擇5
3 系統(tǒng)主要硬件電路設(shè)計(jì)7
31 系統(tǒng)總體設(shè)計(jì)7
32 電源電路設(shè)計(jì)7
33 單片機(jī)最小系統(tǒng)電路設(shè)計(jì)8
331 AT89C51單片機(jī)簡(jiǎn)介8
332 單片機(jī)最小系統(tǒng)電路10
34 溫度采集電路設(shè)計(jì)11
341 DS18B20溫度傳感器簡(jiǎn)介11
342 溫度采集電路13
35 溫度顯示電路設(shè)計(jì)14
351 LED數(shù)碼管簡(jiǎn)介14
352 溫度顯示電路15
36 驅(qū)蚊電路設(shè)計(jì)15
361 TCT40-16T超聲波發(fā)射器簡(jiǎn)介15
362 驅(qū)蚊電路16
37 驅(qū)動(dòng)與調(diào)速電路設(shè)計(jì)17
371 達(dá)林頓反相器ULN2803簡(jiǎn)介17
372 驅(qū)動(dòng)與調(diào)速電路18
38 獨(dú)立按鍵電路設(shè)計(jì)18
4 軟件設(shè)計(jì)20
41 系統(tǒng)總體軟件設(shè)計(jì)流程圖20
42 用Keil C51進(jìn)行程序編輯21
5 系統(tǒng)調(diào)試與仿真22
51 系統(tǒng)軟件調(diào)試22
52 程序下載22
53 系統(tǒng)仿真22         
6 結(jié)   論26
致   謝27
參考文獻(xiàn)28
附   錄29

1 緒   論

在現(xiàn)實(shí)生活中,我們要經(jīng)常使用一些降溫設(shè)備。雖然現(xiàn)在不少城市家庭都用空調(diào)設(shè)備作為降溫工具,但在大部分農(nóng)村家庭風(fēng)扇仍然是作為夏季降溫的主要工具。春夏或者夏秋交替季節(jié),早晚溫差比較大,白天溫度很高,風(fēng)扇應(yīng)該轉(zhuǎn)動(dòng)的比較快,這樣才能給人帶來(lái)涼爽。到了晚上,氣溫下降的很多,當(dāng)人們?nèi)胨螅L(fēng)扇的轉(zhuǎn)動(dòng)速度應(yīng)慢慢減下來(lái),防止感冒。雖然現(xiàn)在的風(fēng)扇有不同的檔位可以調(diào)節(jié),但都必須人工來(lái)?yè)Q擋,當(dāng)人們熟睡時(shí)就無(wú)能為力了。盡管現(xiàn)在普遍采用定時(shí)的方式解決這個(gè)問(wèn)題,但定時(shí)時(shí)間有限,一般最多只有兩個(gè)小時(shí),在這兩個(gè)小時(shí)內(nèi)溫度并不一定就會(huì)下降的很多,風(fēng)扇關(guān)閉后,人們可能就會(huì)因?yàn)檠谉嵩俅涡褋?lái)開啟電扇,這樣會(huì)使人的睡眠質(zhì)量大大降低。從以上的分析可知,需要設(shè)計(jì)出一種很智能化的電風(fēng)扇來(lái)解決。本設(shè)計(jì)用單片機(jī)作為控制核心,用溫度傳感器采集當(dāng)前溫度,LED數(shù)碼管顯示實(shí)時(shí)溫度,并根據(jù)當(dāng)前檢測(cè)到的溫度,輸出不同占空比的PWM脈沖信號(hào),從而風(fēng)扇實(shí)現(xiàn)了不同的轉(zhuǎn)速。

1.1 電風(fēng)扇的發(fā)展史

  電風(fēng)扇簡(jiǎn)稱電扇,香港稱為風(fēng)扇,日本及韓國(guó)稱為扇風(fēng)機(jī),從發(fā)明到現(xiàn)在已經(jīng)經(jīng)過(guò)了一百多年,是炎熱夏季的寵物。電風(fēng)扇起源于1830年,是叫詹姆斯的一個(gè)美國(guó)人發(fā)明了一種用發(fā)條來(lái)驅(qū)動(dòng)的,可以固定在天花板上的電風(fēng)扇。1880年,一個(gè)叫舒樂(lè)的美國(guó)人第一次將葉片直接裝到電動(dòng)機(jī)上,再接上電源,葉片便很快速旋轉(zhuǎn)起來(lái)。1882年,一個(gè)叫休伊?斯卡茨?霍伊拉的紐約人最早發(fā)明了商品化的電風(fēng)扇。

   中國(guó)生產(chǎn)的第一臺(tái)風(fēng)扇起于1916年,直到1925年華生電器制造廠才正式生產(chǎn)電風(fēng)扇,并很快贏得市場(chǎng)好評(píng)。

   一開始電風(fēng)扇不能很好的控制時(shí)間,過(guò)了一段時(shí)間,便出現(xiàn)了一種可以設(shè)置風(fēng)扇轉(zhuǎn)動(dòng)時(shí)間,及可以根據(jù)設(shè)定的時(shí)間來(lái)開啟或者關(guān)閉的電風(fēng)扇,這種風(fēng)扇在當(dāng)時(shí)相當(dāng)受好評(píng),也受到廣大人民的喜愛(ài)。電風(fēng)扇的操作方式從一原先的旋鈕,到按鍵,再到現(xiàn)在的觸摸式操作[1]。

1.2 電風(fēng)扇的工作原理

電風(fēng)扇的主要功能器件是交流電機(jī),通電后線圈在磁場(chǎng)中因受力而轉(zhuǎn)動(dòng),能量的轉(zhuǎn)化形式是這樣的:電能主要是轉(zhuǎn)化為機(jī)械能,同時(shí)由于電阻問(wèn)題,電能還有一部分轉(zhuǎn)化成內(nèi)能。電風(fēng)扇工作時(shí),因?yàn)橛须娏髁鬟^(guò)電風(fēng)扇的線圈,而線圈是有電阻的,所以會(huì)產(chǎn)生部分熱量向外擴(kuò)散,因此電風(fēng)扇的溫度會(huì)增高。但人們?yōu)槭裁磿?huì)感覺(jué)到?jīng)鏊兀恳驗(yàn)槿梭w的表面在夏天有大量的汗液,當(dāng)電風(fēng)扇工作后,室內(nèi)的空氣會(huì)隨著電風(fēng)扇流動(dòng),所以就能夠蒸發(fā)人體表面的汗液,由物理學(xué)原理蒸發(fā)需要吸熱,故人們會(huì)感覺(jué)到非常涼爽[2] 。

1.3 本次設(shè)計(jì)的主要任務(wù)和內(nèi)容

    本設(shè)計(jì)是以AT8951單片機(jī)為主要控制核心,利用51單片機(jī)對(duì)溫度傳感器采集到的數(shù)據(jù)進(jìn)行處理,并且通過(guò)各種電子元器件對(duì)電風(fēng)扇各種工作狀態(tài)進(jìn)行實(shí)時(shí)控制,從而可以達(dá)到用戶的要求。

本次設(shè)計(jì)主要完成以下內(nèi)容:

(1) 能夠檢測(cè)當(dāng)前溫度并顯示,可根據(jù)預(yù)設(shè)溫度自動(dòng)開啟關(guān)閉,當(dāng)當(dāng)前溫度大于預(yù)設(shè)溫度,自動(dòng)開啟,小于預(yù)設(shè)溫度自動(dòng)關(guān)閉。

    (2) 預(yù)設(shè)溫度可通過(guò)按鍵增加或減少。

    (3) 可隨著外界溫度的增加風(fēng)扇可自行調(diào)速,主要分為五個(gè)檔位,溫度每升高五度風(fēng)扇自動(dòng)增加一檔。

    (4) 具有驅(qū)蚊功能。


2 方案論證

2.1 控制核心的選擇

方案一:采用單片機(jī)作為主要控制芯片。在本設(shè)計(jì)中采用AT89C51單片機(jī),通過(guò)軟件編程的方法來(lái)實(shí)現(xiàn)對(duì)溫度的實(shí)時(shí)采集和控制,在其I/O口輸出相應(yīng)的控制信號(hào)。單片機(jī)AT89C51工作電壓相對(duì)比較低,單片內(nèi)含有4k字節(jié)的ROM和256字節(jié)的RAM,并且價(jià)格也相對(duì)較便宜。

方案二:采用電壓比較電路作為控制執(zhí)行部件。將采集到的溫度信號(hào)轉(zhuǎn)換為電信號(hào)并經(jīng)放大電路放大,集成運(yùn)算放大器組成的比較電路來(lái)判斷決定電風(fēng)扇的轉(zhuǎn)動(dòng)速度。

對(duì)于方案一,用單片機(jī)作為控制器件,通過(guò)簡(jiǎn)單的程序編寫可以將溫度傳感器DS18B20檢測(cè)的溫度通過(guò)LED數(shù)碼管顯示出來(lái),而且可以通過(guò)按鍵掃描程序通過(guò)單片機(jī)的外部按鍵對(duì)預(yù)設(shè)的初值進(jìn)行增加或者減少,同時(shí)對(duì)于驅(qū)蚊功能采用單片機(jī)的軟件編程更易實(shí)現(xiàn),成本低,故以單片機(jī)AT89C51為控制核心,適合本次設(shè)計(jì)。對(duì)于AT89C51的具體參數(shù)參見下面“硬件設(shè)計(jì)”中的各器件介紹。

對(duì)于方案二,采用電壓比較電路作為控制的核心,雖然電路比較簡(jiǎn)單、容易實(shí)現(xiàn),但不能對(duì)預(yù)設(shè)溫度的值進(jìn)行更改,無(wú)法滿足不同用戶的需求,故本次設(shè)計(jì)不采用。

2.2 顯示電路的選擇

方案一 :采用LCD液晶顯示器顯示。

方案二:采用數(shù)碼管做顯示器件,共陰極接法,動(dòng)態(tài)方式顯示[3]。

對(duì)于方案一,液晶顯示屏顯示的字符非常優(yōu)美,這一優(yōu)點(diǎn)LED數(shù)碼管是無(wú)法做到的,但是液晶顯示屏價(jià)格太過(guò)昂貴,驅(qū)動(dòng)程序編寫起來(lái)也是相當(dāng)復(fù)雜的,本次設(shè)計(jì)不采用。

對(duì)于方案二,用LED顯示,成本非常低,溫度顯示清晰可見,即使夜間也能看見,顯示程序的編寫也比較容易,因此這種顯示方式得到了廣泛的應(yīng)用。不足的地方是采用該方案可能會(huì)產(chǎn)生閃爍現(xiàn)象,因?yàn)檫@種動(dòng)態(tài)掃描方式五個(gè)LED數(shù)碼管是逐個(gè)點(diǎn)亮的,但由于人眼有個(gè)視覺(jué)暫留效應(yīng),為20MS,我們只要設(shè)定合適的掃面周期就可以避免閃爍現(xiàn)象,故這一方案可行。關(guān)于LED的詳細(xì)參數(shù)參看下面“硬件設(shè)計(jì)”中的各器件介紹。

2.3 調(diào)速方式的選擇

方案一:采用變壓器調(diào)節(jié)方式,運(yùn)用變壓器原理將市電220V交流電壓通過(guò)線圈降壓到不同的值,電風(fēng)扇電機(jī)接到不同電壓值的線圈上就可以來(lái)控制直流電機(jī)的轉(zhuǎn)速。

方案二:采用單片機(jī)的PWM軟件編程方式。PWM中文意思是脈沖寬度調(diào)制,英文意思是Pulse Width Modulation的簡(jiǎn)寫形式,它是一種按某種規(guī)律變化的脈沖方波,在PWM驅(qū)動(dòng)直流電機(jī)的調(diào)節(jié)控制系統(tǒng)當(dāng)中,最常用的是矩形PWM脈沖波信號(hào),也是編寫程序最簡(jiǎn)單的。在對(duì)直流電機(jī)的轉(zhuǎn)速進(jìn)行控制時(shí),需要根據(jù)當(dāng)前溫度來(lái)輸出不同占空比的PWM脈沖。PWM脈沖的占空比是指高電平的時(shí)間在一個(gè)周期時(shí)間內(nèi)的百分比,若全為低電平,占空比為零,風(fēng)扇不轉(zhuǎn);若全為高電平,占空比為100%時(shí),轉(zhuǎn)速達(dá)到最大 [4]。用單片機(jī)輸出PWM脈沖信號(hào)時(shí),有如下兩種方法:

(1) 利用軟件延時(shí)。可以利用單片機(jī)自帶的定時(shí)器編程實(shí)現(xiàn)不同占空比的PWM脈沖的輸出,利用中斷程序?qū)纹瑱C(jī)輸出的電平進(jìn)行高低轉(zhuǎn)換,從而實(shí)現(xiàn)風(fēng)扇的調(diào)速,本設(shè)計(jì)采用該方法。設(shè)計(jì)不同占空比的PWM脈沖的思路是:假設(shè)采用1S的周期方波,以50MS為基準(zhǔn),則20個(gè)基準(zhǔn)便就是一個(gè)1S,那么當(dāng)其中4個(gè)連續(xù)的50MS的高電平脈沖,然后16連續(xù)的50MS低電平脈沖,便得到了占空比為20%的PWM方波信號(hào)。

(2) 利用單片機(jī)自帶的PWM功能。但本次設(shè)計(jì)所用得AT89C51單片機(jī)沒(méi)有這種功能,只有STC系列的才有,故不可行。

對(duì)于方案一,該方案可以對(duì)直流風(fēng)扇進(jìn)行調(diào)速,但調(diào)節(jié)不是很方便,而且采用變壓器來(lái)改變電壓,不能適應(yīng)人性化要求。

對(duì)于方案二,采用PWM 脈沖調(diào)制的純軟件的方法來(lái)實(shí)現(xiàn)對(duì)直流電機(jī)的實(shí)時(shí)調(diào)速,具有很大的靈活性,而且可以更充分地發(fā)揮單片機(jī)的功能,綜合考慮選用方案二。

2.4 溫度傳感器的選擇

方案一:用熱電偶來(lái)作為檢測(cè)溫度的元器件,配合適當(dāng)?shù)耐鈬娐罚瑢z測(cè)到的溫度信號(hào)送入單片機(jī)AT89C51處理。

方案二:用熱敏電阻作為檢測(cè)溫度的元器件,經(jīng)過(guò)運(yùn)算放大器放大,由于溫度變化會(huì)引起熱敏電阻的電阻值發(fā)生相應(yīng)的變化、便可以得到輸出電壓變化的信號(hào)。

方案三:用高精度集成溫度傳感器DS18B20作為檢測(cè)溫度的元器件,直接輸出數(shù)字溫度信號(hào)給單片機(jī)處理[5]。

對(duì)于方案一,采用熱電偶作為檢測(cè)元器件,其檢測(cè)的溫度范圍非常寬,可檢測(cè)-50攝氏度到1600攝氏度,但是電路設(shè)計(jì)比較復(fù)雜,故本設(shè)計(jì)不采用該方案。

對(duì)于方案二,采用熱敏電阻價(jià)格相對(duì)便宜、元器件也很容易買到,但熱敏電阻對(duì)溫度的變化不是很敏感,在檢測(cè)溫度信號(hào)的時(shí)候,還有可能產(chǎn)生失真和誤差,故本設(shè)計(jì)不采用該方案。

對(duì)于方案三,由于溫度傳感器DS18B20的集成度很高,大大減少了外接電路,從而檢測(cè)誤差也會(huì)變小很多,DS18B20檢測(cè)溫度的原理與前面兩種方案的原理有著很大的不同。其檢測(cè)到的溫度值可以直接送入單片機(jī)處理,不用編寫更多的轉(zhuǎn)換程序,簡(jiǎn)化了程序的編寫,且只用一根線便可與單片機(jī)相連,接口相當(dāng)簡(jiǎn)單,本次設(shè)計(jì)采用該方案。關(guān)于DS18B20的詳細(xì)參數(shù)參看下面“硬件設(shè)計(jì)”中的器件介紹。

2.5 超聲波發(fā)射器的選擇

本設(shè)計(jì)的原理是根據(jù)蚊子的生理特性來(lái)的,主要靈感來(lái)源是現(xiàn)在的智能手機(jī)上帶有驅(qū)蚊的軟件。在夏天咬人的一般都是雌蚊,雄蚊幾乎是不咬人的,雌蚊在夏天大部分都是懷卵的且在懷卵期間又不喜歡與雄蚊接近,因此當(dāng)它們感覺(jué)到雄蚊發(fā)出頻率在22KHZ的超聲波信號(hào)時(shí),就會(huì)自動(dòng)離開,因此只需控制超聲波發(fā)射器發(fā)射出模擬雄蚊的超聲波就可達(dá)到驅(qū)蚊的目的。產(chǎn)生該頻率的超聲波有一下兩種方案:

方案一:可以通過(guò)軟件編寫,定時(shí)器T1產(chǎn)生頻率在22KHZ的方波信號(hào),并通過(guò)并聯(lián)的反相器用來(lái)增大驅(qū)動(dòng)能力,然后接入超聲波發(fā)射器,使超聲波發(fā)射器發(fā)出模擬雄蚊的超聲波,從而驅(qū)逐雌蚊,進(jìn)而可以避免蚊子的叮咬。

方案二:用NE555構(gòu)成多諧振蕩器產(chǎn)生可調(diào)頻率的方波,從而驅(qū)動(dòng)超聲波發(fā)射器,使其發(fā)射我們需要的超聲波信號(hào),達(dá)到驅(qū)蚊目的[6]。

對(duì)于方案一:AT89C51單片機(jī)定時(shí)器T1工作在方式1,可通過(guò)初值的設(shè)置,輸出22KHz的時(shí)鐘信號(hào)輸出,不用反復(fù)中斷,提高了系統(tǒng)的執(zhí)行效率。

超聲波發(fā)射器選擇的是TCT40-16T ,為了增大驅(qū)動(dòng)能力,單片機(jī)P3.5口產(chǎn)生的方波信號(hào)經(jīng)過(guò)并聯(lián)反相器后加在超聲波發(fā)射器的兩端,這樣超聲波發(fā)射器就可以發(fā)射22KHz的超聲波,本設(shè)計(jì)采用該方案。關(guān)于TCT40-16T的詳細(xì)參數(shù)參看下面“硬件設(shè)計(jì)”中的器件介紹。

對(duì)于方案二:由于NE555產(chǎn)生的超聲波頻率調(diào)節(jié)是依靠調(diào)節(jié)滑動(dòng)變阻器實(shí)現(xiàn)的,不好可視化的調(diào)節(jié)頻率,不方便用戶使用。


3 系統(tǒng)主要硬件電路設(shè)計(jì)

3.1 系統(tǒng)總體設(shè)計(jì)

本次設(shè)計(jì)的思路:本次設(shè)計(jì)主要利用AT89C51單片機(jī)為控制核心,利用溫度傳感器DS18B20采集當(dāng)前溫度送入單片機(jī)處理,單片機(jī)根據(jù)當(dāng)前溫度與預(yù)設(shè)溫度的比較決定是否開啟風(fēng)扇,并通過(guò)五段LED數(shù)碼管顯示當(dāng)前溫度和預(yù)設(shè)溫度。當(dāng)當(dāng)前溫度高于預(yù)設(shè)溫度,風(fēng)扇開啟,低預(yù)設(shè)溫度時(shí)風(fēng)扇關(guān)閉。單片機(jī)根據(jù)當(dāng)前的溫度輸出相應(yīng)占空比的PWM脈沖,并通過(guò)ULN2803增大驅(qū)動(dòng)后,送入12V的直流電機(jī),從而產(chǎn)生不同轉(zhuǎn)速。

本次設(shè)計(jì)的系統(tǒng)總框圖如圖3.1所示:

                    圖3.1系統(tǒng)總體框圖

3.2 電源電路設(shè)計(jì)

直流穩(wěn)壓電源作為直流能源的提供者,在電路中起到很關(guān)鍵的作用,因此對(duì)電源的要求比較高,尤其是對(duì)電源紋波系數(shù)和輸出電流能力的要求上,如果電源沒(méi)有達(dá)到設(shè)計(jì)所需電源的要求,將直接影響系統(tǒng)的正常工作。

常用的轉(zhuǎn)5V電源有線性型穩(wěn)壓芯片和開關(guān)型穩(wěn)壓芯片兩大類。線性型穩(wěn)壓芯片線性度高,紋波小,外圍電路簡(jiǎn)單。開關(guān)型穩(wěn)壓電路功耗小,轉(zhuǎn)換率高,但紋波大,受尖峰脈沖干擾嚴(yán)重。綜合考慮選用線性型三端穩(wěn)壓芯片LM7805。

本次設(shè)計(jì)需要兩個(gè)幅度不同的直流電壓5V和12V。其中5V電壓的產(chǎn)生是將市電~220V交流電經(jīng)過(guò)降壓器降壓,橋式整流濾波后送入穩(wěn)壓器件LM7805,輸出的電壓可能還含有紋波,在通過(guò)470uf帶極性的電容濾除低頻信號(hào),0.1uf不帶極性的電容濾除高頻信號(hào),進(jìn)而可以得到穩(wěn)定的5V電壓[7]。12V電壓只需將5V電壓經(jīng)過(guò)運(yùn)算放大器放大即可得到,5V和12V電壓產(chǎn)生電路如圖3.2(a)和3.2(b)所示:

3.2(a) 5V電壓產(chǎn)生電路


3.2(b) 12V電壓產(chǎn)生電路

3.3 單片機(jī)最小系統(tǒng)電路設(shè)計(jì)

3.3.1 AT89C51簡(jiǎn)介

AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓?jiǎn)纹瑱C(jī),其含有4K字節(jié)的ROM和256字節(jié)的RAM,兼容MCS-51指令。其中央處理器是8位的,且含有Flash存儲(chǔ)單元,功能非常強(qiáng)大。

AT89C51單片機(jī)具有以下標(biāo)準(zhǔn)的功能:一個(gè)8位CPU頻率范圍1.2-12MHZ,4K字節(jié)Flash閃存,256字節(jié)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM,4個(gè)8位并行I/O口,一個(gè)全雙工串行口,2個(gè)16位定時(shí)/計(jì)數(shù)器,5個(gè)中斷源的中斷控制系統(tǒng),片內(nèi)自帶振蕩器和時(shí)鐘電路。

AT89C51單片機(jī)管腳圖如3.3所示:

                  


3.3AT89C51單片機(jī)

各管腳功能如下[8]:

VCC:40引腳接5V供電電壓。

GND:20引腳接地。

XTAL1:19引腳為單片機(jī)提供外部時(shí)鐘信號(hào),外接石英晶體和微調(diào)電容。

XTAL2:18引腳為單片機(jī)提供外部時(shí)鐘信號(hào),外接石英晶體和微調(diào)電容。

P0口:P0.7~P0.0,這組引腳共8條,其中P0.7為最高位,P0.0為最低位。是漏極開路的8位準(zhǔn)雙向I/O口,有兩種功能。第一:做通用I/O口,無(wú)片外內(nèi)存時(shí),P0口可做通用I/O接口使用。第二:做地址/數(shù)據(jù)口,在訪問(wèn)外部?jī)?nèi)存時(shí),用作地址總線的低8位和數(shù)據(jù)總線。

P1口:P1.7~P1.0,其中P1.7為最高位,P1.0為最低位,僅用作I/O口。

P2口:P2.7~P2.0,其中P2.7為最高位,P2.0為最低位。P2口是帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O接口,具有兩種功能。第一:做通用I/O口,無(wú)片外內(nèi)存時(shí),P2口可用作通用I/O口。第二:做地址口,在訪問(wèn)外部?jī)?nèi)存時(shí),用作地址總線的高8位。

P3 口:P3.7~P3.0,其中P3.7為最高位,P3.0為最低位。P3口是雙功能口。具有兩種功能。第一:用作通用I/O口。第二功能:P3.0RXD串行口輸入;P3.1TXD串行口輸出;P3.2INTO外部中斷0輸入;P3.3INT1外部中斷1輸入;P3.4T0定時(shí)計(jì)數(shù)器的脈沖輸入;P3.5T1定時(shí)計(jì)數(shù)器的脈沖輸入;P3.6WR片外RAM寫信號(hào);P3.4RD片外RAM讀信號(hào)。

RST:9引腳復(fù)位輸入,高電平有效。

    :29引腳外部程序內(nèi)存讀信號(hào)。當(dāng)訪問(wèn)外部程序內(nèi)存時(shí),此腳定時(shí)輸出脈沖作為讀片外程序內(nèi)存的選通信號(hào),通常接EPROM的OE端。端在每個(gè)機(jī)器周期中兩次有效,但當(dāng)訪問(wèn)外部RAM時(shí),兩次負(fù)脈沖不出現(xiàn)。可驅(qū)動(dòng)8個(gè)LS型TTL。

ALE/:30引腳地址鎖存允許/編程線,當(dāng)訪問(wèn)片外存儲(chǔ)器時(shí),在P0.7~P0.0引腳線上輸出片外存儲(chǔ)器低8位地址的同時(shí)還在ALE/線上輸出一個(gè)高電位脈沖,其下降沿用于把這個(gè)片外存儲(chǔ)器低8位地址鎖存到外部專用地址鎖存器。

/VPP:31引腳內(nèi)外部程序內(nèi)存選擇輸入端。=1,CPU訪問(wèn)片外ROM,并執(zhí)行其指令。當(dāng)PC>0FFFH時(shí),自動(dòng)轉(zhuǎn)向片外ROM。=0,不論片內(nèi)是否含有內(nèi)存,只執(zhí)行片外ROM的指令。

3.3.2 單片機(jī)最小系統(tǒng)電路

單片機(jī)工作時(shí)需要時(shí)鐘信號(hào),時(shí)鐘信號(hào)通常可由外部方式或者單片機(jī)的內(nèi)部方式提供。本次設(shè)計(jì)采用內(nèi)部時(shí)鐘方式,利用單片機(jī)內(nèi)部自帶的反相放大器,XTAL2為放大器的輸出端,XTAL1為放大器的輸入端,這兩個(gè)引腳外接石英晶體振蕩器和微電容,構(gòu)成可以自激的振蕩器。本設(shè)計(jì)在XTAL1和XTAL2外接了一個(gè)12MHZ的晶振,30pf的電容[9]。

復(fù)位是使單片機(jī)回復(fù)到初使的狀態(tài),就跟計(jì)算機(jī)的重啟差不多,并從初始狀態(tài)從新工作。單片機(jī)是高電平復(fù)位,一般有兩種方式:按鍵復(fù)位和上電復(fù)位,兩種復(fù)位方式均可。本次設(shè)計(jì)采用按鍵復(fù)位,當(dāng)按下按鍵開關(guān)S1時(shí),系統(tǒng)復(fù)位一次,電阻R2、R3為10k。其時(shí)鐘電路與復(fù)位電路如圖3.4所示:














3.4最小系統(tǒng)電路

3.4 溫度采集電路設(shè)計(jì)

3.4.1 DS18B20簡(jiǎn)介

DS18B20內(nèi)部結(jié)構(gòu)主要有四個(gè)部分:64位的只讀程序存儲(chǔ)器ROM、溫度傳感器、非揮發(fā)的報(bào)警觸發(fā)器TH和TL、配置寄存器。總共有三個(gè)管腳,包含DQ,GND,VDD。其中DQ為數(shù)字信號(hào)端,GND為電源地,VDD為電源輸入端。

DS18B20的主要性能特點(diǎn)如下:

(1) 僅可用一個(gè)端口便可以通信;

(2) 無(wú)須外部器件;

(3) DS18B20支持多點(diǎn)組網(wǎng)功能;

(4) 適應(yīng)電壓范圍廣,電壓范圍為3.0~5.5V;

(5) 待機(jī)功耗為零;

(6) 溫度以9位或12位數(shù)字;

(7) 具有報(bào)警命令識(shí)別功能;

(8) 具有負(fù)電壓特性,電源接反時(shí),芯片不會(huì)燒壞;

DS18B20的管腳圖及部分溫度值與DS18B20輸出的數(shù)字量對(duì)照表見圖

3.5和表3-1所示:




3.5 DS18B20溫度傳感器






3-1 部分溫度值與DS18B20輸出的數(shù)字量對(duì)照

溫度值/℃              數(shù)字輸出(二進(jìn)制)         數(shù)字輸出(十六進(jìn)制)
    +125                     0000 0111 1101 0000                     07D0H            
+85                      0000 0101 0101 0000                     0550H
+25.625                  0000 0001 1001 0001                     0191H
+10.125                  0000 0000 1010 0010                     00A2H
+0.5                     0000 0000 0000 1000                     0008H
0                       0000 0000 0000 0000                     0000H
-0.5                     1111 1111 1111 1000                     FFF8H
-10.125                  1111 1111 0110 1110                     FF5EH
-25.625                  1111 1111 0110 1111                     FF6FH
-55                      1111 1100 1001 0000                     FC90H

3.4.3 溫度采集電路

DS18B20數(shù)字溫度傳感器檢測(cè)現(xiàn)場(chǎng)溫度,將檢測(cè)到的溫度值送入AT89C51單片機(jī)的P1.0口,經(jīng)過(guò)單片機(jī)處理后顯示此時(shí)溫度值,并與設(shè)定溫度值做比較,輸出相應(yīng)占空比的PWM脈沖信號(hào)。電路如圖3.6所示:








3.6 溫度采集電路

3.5 溫度顯示電路設(shè)計(jì)

3.5.1 LED數(shù)碼管簡(jiǎn)介

本設(shè)計(jì)選用五個(gè)LED數(shù)碼管來(lái)進(jìn)行溫度顯示。LED又稱為數(shù)碼管,主要是由8個(gè)發(fā)光二極管構(gòu)的。LED數(shù)碼管按結(jié)構(gòu)可以分為共陰極和共陽(yáng)極兩種結(jié)構(gòu),如圖3.7所示:共陰極把8個(gè)發(fā)光二極管陰極連接在一起,共陽(yáng)極把8個(gè)發(fā)光二極管陽(yáng)極連接在一起。通過(guò)編程的方式使單片機(jī)的引腳輸出不同的高低電平,便可以得到相應(yīng)的數(shù)字,這種數(shù)碼管的顯示方式就被稱做段選碼[10]。







  

3.7 七段LED數(shù)碼管


3-2 七段LED數(shù)碼管的段選碼

顯示字符
共陰極段碼
共陽(yáng)極段碼
顯示字符
共陰極段碼
共陽(yáng)極段碼
0
3fH
C0H
8
7fH
80H
1
06H
F9H
9
6fH
90H
2
5bH
A4H
A
77H
88H
3
4fH
B0H
B
7fH
83H
4
66H
99H
C
39H
C6H
5
6dH
92H
D
3fH
A1H
6
7dH
82H
E
79H
86H
7
07H
F8H
F
71H
8EH


假如一個(gè)數(shù)碼管采用共陰極接法接入單片機(jī)中,想要顯示數(shù)字“5”須使a、c﹑d﹑f﹑g這5個(gè)二極管同時(shí)發(fā)光 (即這5個(gè)二極管接入高電平),而其他二極管不發(fā)光。只要P0口輸入01101101(6dH)即可。字形與段選碼的對(duì)照見表3-2。

3.5.2 溫度顯示電路

本次設(shè)計(jì)主要顯示當(dāng)前溫度值和預(yù)設(shè)溫度值,其中前三個(gè)LED數(shù)碼管顯示當(dāng)前溫度值,可顯示0到99.9不同的溫度,后兩個(gè)LED數(shù)碼管顯示之前預(yù)設(shè)定的溫度值。數(shù)碼管顯示采用共陰極接法,其中a,b,c,d,e,f,g,dp分別與P0.0到P0.7相連,作為段選信號(hào),又因?yàn)镻0口輸出的是低電平,所以在P0口接了10K的上拉電阻,P2.0到P2.5分別接到1,2,3,4,5,6引腳作為位選信號(hào)。顯示電路如圖3.8所示:


                              圖3.8 溫度顯示電路

3.6 驅(qū)蚊電路設(shè)計(jì)

3.6.1 TCT40-16T超聲波發(fā)射器簡(jiǎn)介

TCT40-16T是一種較小的超聲波發(fā)射器,它能發(fā)射出不同頻率的超聲波,適用于家用電器及其他電子設(shè)備的超聲波遙控裝置。其器件外觀如圖3.9所示:











              3.9 超聲波發(fā)射器TCT40-16T

3.6.2 驅(qū)蚊電路

P3.5是單片機(jī)定時(shí)器T1的時(shí)鐘輸出端口,我們可以利用定時(shí)器T1輸出頻率為22KHZ的方波信號(hào),并通過(guò)并聯(lián)反相器增大驅(qū)動(dòng)后送入超聲波發(fā)射器TCT40-16T來(lái)模擬雄蚊發(fā)出的超聲波,進(jìn)而達(dá)到驅(qū)蚊目的[11]。驅(qū)蚊電路如圖3.10所示:










圖3.10 驅(qū)蚊電路

3.7 驅(qū)動(dòng)與調(diào)速電路設(shè)計(jì)

3.7.1 達(dá)林頓反相器ULN2803簡(jiǎn)介

因?yàn)橹绷麟姍C(jī)工作時(shí)需要較大的電流,而單片機(jī)I/O口輸出的電流都在幾十毫安級(jí)別,無(wú)法滿足直流電機(jī)的工作電流,所以必須要外加驅(qū)動(dòng)電路。在本設(shè)計(jì)驅(qū)動(dòng)電路中,選用達(dá)林頓反向驅(qū)動(dòng)器ULN2803來(lái)驅(qū)動(dòng)直流風(fēng)扇電機(jī)。ULN2803在使用時(shí)接口非常簡(jiǎn)單,并且操作很容易,可為電機(jī)提供幾百毫安的驅(qū)動(dòng)電流,它實(shí)際上是一個(gè)集成芯片,單塊芯片可同時(shí)驅(qū)動(dòng)8個(gè)直流電機(jī)。

ULN2803實(shí)際上是16個(gè)NPN晶體管組成,總共含有18個(gè)引腳。 ULN2803的管腳圖如下圖3.11所示:




                                  圖3.11 ULN2803管腳圖

各引腳簡(jiǎn)介如下:      

1-8引腳:8個(gè)輸入端口;

9引腳:接地端;

10引腳:為COM端,一般懸空或接電源,但與負(fù)載的電源共同接在一起,驅(qū)動(dòng)效果更好,本次設(shè)計(jì)接12電源。ULN2803可以輸出最大電流可達(dá)500毫安,最大電壓可達(dá)50V。本系統(tǒng)選用的電機(jī)為12V直流無(wú)刷電機(jī),所需電流為300毫安左右,因此可用ULN2803來(lái)驅(qū)動(dòng)。

11-18引腳:8個(gè)輸出端口;

3.7.2 驅(qū)動(dòng)與調(diào)速電路

本次設(shè)計(jì)利用PWM脈沖寬度調(diào)制技術(shù)對(duì)直流電機(jī)進(jìn)行實(shí)時(shí)調(diào)速,風(fēng)扇分為五檔,預(yù)設(shè)溫度t0為25度,溫度每增高5度,風(fēng)扇增加一檔。當(dāng)當(dāng)前溫度低于預(yù)設(shè)溫度時(shí),輸出占空比為0的PWM脈沖,風(fēng)扇不轉(zhuǎn)。當(dāng)當(dāng)前溫度大于預(yù)設(shè)溫度時(shí),風(fēng)扇轉(zhuǎn)動(dòng),并且可以根據(jù)當(dāng)前溫度輸出相應(yīng)占空比的PWM脈沖,進(jìn)而實(shí)現(xiàn)了對(duì)風(fēng)扇的自動(dòng)調(diào)速。

驅(qū)動(dòng)與調(diào)速電路如下圖3.12所示:直流風(fēng)扇電機(jī)與ULN2803的COM端供接12V電源,直流電機(jī)另一端接ULN2803的4C,單片機(jī)的P3.4口接4B,通過(guò)單片機(jī)的P3.4口輸出不同占空比的PWM脈沖信號(hào),便可以對(duì)直流電機(jī)進(jìn)行調(diào)速,系統(tǒng)選用的電機(jī)為12V直流無(wú)刷電機(jī)。

         
                               圖3.12驅(qū)動(dòng)與調(diào)速電路

3.8 獨(dú)立按鍵電路設(shè)計(jì)

本次設(shè)計(jì)需要兩個(gè)獨(dú)立按鍵S2和S3,主要是用來(lái)對(duì)預(yù)設(shè)溫度初值進(jìn)行調(diào)整。當(dāng)S2每按下一次,預(yù)設(shè)初值自動(dòng)加一,S3每按下一次預(yù)設(shè)溫度初值自動(dòng)減一。加減采用中斷方式實(shí)現(xiàn),將S2與P3.2相連,S3與P3.3相連。當(dāng)有鍵按下立刻執(zhí)行中斷程序,低電平有效。獨(dú)立按鍵電路如下圖3.13所示:

                              

















圖3.13 獨(dú)立按鍵電路


4 軟件設(shè)計(jì)

4.1 系統(tǒng)總體軟件設(shè)計(jì)流程圖

初始化程序后,傳感器采集溫度送入單片機(jī),通過(guò)LED顯示。當(dāng)有鍵按下時(shí)處理按鍵,無(wú)鍵按下,根據(jù)溫度得到不同的轉(zhuǎn)速,如圖4.1所示:

4.1 軟件總體設(shè)計(jì)流程圖

4.2 用Keil C51進(jìn)行程序編寫

Keil C51 軟件目的主要在于解決嵌入式軟件開發(fā)商面臨的問(wèn)題,當(dāng)有新項(xiàng)目的時(shí)候,只需要從設(shè)備數(shù)據(jù)庫(kù)選擇使用的設(shè)備,uVision IDE 將設(shè)置好所有的編譯器,鏈接器和存儲(chǔ)器選項(xiàng)[12]。Keil C51是美國(guó)Keil Software公司開發(fā)的51系列并且兼容單片機(jī)C語(yǔ)言的嵌入式開發(fā)軟件,與單片機(jī)匯編語(yǔ)言相比,C語(yǔ)言的靈活性更強(qiáng)一點(diǎn),程序編寫相比于匯編也更簡(jiǎn)單,很容易學(xué)習(xí)和使用,且編寫的函數(shù)模塊可移植性強(qiáng)[13]。一般創(chuàng)建一個(gè)Keil C51應(yīng)用程序需要按照下面的步驟:

   (1) 創(chuàng)建一個(gè)工程項(xiàng)目文件;

  (2) 為工程項(xiàng)目選擇目標(biāo)器件;

   (3) 為工程項(xiàng)目設(shè)置軟硬件調(diào)試環(huán)境;

  (4) 創(chuàng)建源程序項(xiàng)目文件;

   (5) 保存創(chuàng)建的源程序項(xiàng)目文件;

  (6) 把源程序文件添加到項(xiàng)目中;

Keil C51使用界面如圖4.2:


                     
4.2Keil C51使用界面


5 系統(tǒng)調(diào)試與仿真

5.1 系統(tǒng)軟件調(diào)試

源程序通過(guò)編譯,只能說(shuō)明源程序的語(yǔ)法沒(méi)有問(wèn)題,但不能保證程序的邏輯功能和需要的邏輯功能一致,所以還必須對(duì)程序進(jìn)行調(diào)試。程序調(diào)試時(shí)可以采用單步執(zhí)行或者連續(xù)執(zhí)行,連續(xù)執(zhí)行速度快,但當(dāng)出錯(cuò)時(shí)不易查出錯(cuò)誤的地方。單步執(zhí)行簡(jiǎn)單方便,可以檢查每條指令的正確性,但比較繁瑣,消耗大量時(shí)間。因此可先連續(xù)調(diào)試,對(duì)有問(wèn)題的地方在單步調(diào)試[14]。

5.2 程序下載

程序調(diào)試好以后,就可以下載了,將經(jīng)過(guò)編譯后生成的.HEX文件下載到單片機(jī)上,下載在單片機(jī)上的程序?qū)⒃诔绦虼鎯?chǔ)器儲(chǔ)存起來(lái),即使掉電后仍然保存,不會(huì)因此而丟失。本次設(shè)計(jì)的總程序清單見附錄2。

5.3 系統(tǒng)仿真

本次設(shè)計(jì)采用protues軟件進(jìn)行仿真,Proteus軟件是英國(guó)Labcenter electronics 公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。Proteus是世界上著名的EDA工具,從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)[15]。Proteus  ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面,其中包含標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇窗口、圖形編輯窗口。



(1) 本次設(shè)計(jì)的預(yù)設(shè)溫度值為25度,當(dāng)當(dāng)前溫度大于設(shè)定溫度時(shí)直流電機(jī)開始轉(zhuǎn)動(dòng)。當(dāng)當(dāng)前溫度為26度時(shí)直流電機(jī)轉(zhuǎn)動(dòng)情況如圖5.1所示:








                         圖5.1 當(dāng)前溫度為26度的轉(zhuǎn)速情況




(2) 當(dāng)當(dāng)前溫度值升高至31度時(shí),其電機(jī)轉(zhuǎn)速如圖5.2所示:顯然轉(zhuǎn)速較溫度為26的時(shí)候有了明顯的增加,表明單片機(jī)對(duì)電機(jī)的轉(zhuǎn)速控制功能能夠正常實(shí)現(xiàn)。

5.2 當(dāng)前溫度為31度的轉(zhuǎn)速情況


(3) 當(dāng)我們通過(guò)獨(dú)立按鍵S2將預(yù)設(shè)溫度增加到29大于當(dāng)前溫度26時(shí),輸出占空比為零的脈沖,直流電機(jī)將停止轉(zhuǎn)動(dòng),如圖5.3所示:

5.3 當(dāng)前溫度小于設(shè)定溫度的轉(zhuǎn)速情


6 結(jié)   論

本次設(shè)計(jì)以單片機(jī)AT89C51為主控芯片,硬件主要包含電源電路、單片機(jī)最小系統(tǒng)電路、溫度采集電路、溫度顯示電路、獨(dú)立按鍵電路、驅(qū)蚊電路、驅(qū)動(dòng)與調(diào)速電路。用DS18B20溫度傳感器采集當(dāng)前溫度送入單片機(jī)處理,LED數(shù)碼管能正常顯示當(dāng)前溫度和設(shè)定溫度,并能根據(jù)當(dāng)前溫度和設(shè)定溫度的差值調(diào)節(jié)風(fēng)扇轉(zhuǎn)速,在一定范圍內(nèi)實(shí)現(xiàn)了對(duì)風(fēng)扇的實(shí)時(shí)調(diào)速。獨(dú)立按鍵部分也能正常使用,可以調(diào)節(jié)預(yù)設(shè)溫度t0的值。同時(shí)超聲波發(fā)射器也能正常工作,達(dá)到了驅(qū)蚊目的。

本次設(shè)計(jì)對(duì)于現(xiàn)實(shí)生活具有積極的作用,可以用來(lái)作為降溫工具,環(huán)保且智能,能夠給人帶來(lái)很多方便,同時(shí)驅(qū)蚊的功能在夏季還是很有必要。



附錄一 電路總圖

單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DQ=P1^0;
  5. sbit key2=P3^2;
  6. sbit key3=P3^3;
  7. sbit P3_4=P3^4;
  8. sbitP3_5=P3^5;
  9. float ff;
  10. uint y3;
  11. uchar shi,ge,xiaoshu,yushe=25;
  12. uchar code dispcode[]={  
  13. 0x3f,0x06,0x5b,0x4f,
  14. 0x66,0x6d,0x7d,0x07,
  15. 0x7f,0x6f,0x77,0x7c,
  16. 0x39,0x5e,0x79,0x71};  //段碼
  17. uchar code tablel[]={
  18. 0xbf,0x86,0xdb,0xcf,
  19. 0xe6,0xed,0xfd,
  20. 0x87,0xff,0xef}; //帶小數(shù)點(diǎn)的段碼
  21. uchar dispbitcode[]={    //位選
  22. 0xfe,0xfd,0xfb,0xf7,
  23. 0xef,0xdf,0xbf,0x7f};  
  24. uchar dispbuf[8]={0,0,0,0,0,0,0,0};
  25. void Delay(uint num)// 延時(shí)函數(shù)
  26. {
  27.               while( --num );
  28. }
  29. void digitalshow(uchar a4,uchar a3,uchar a2,uchar a1,uchar a0)
  30. {
  31.               dispbuf[0]=a0;
  32.               dispbuf[1]=a1;
  33.               dispbuf[2]=a2;
  34.               dispbuf[3]=a3;
  35.               dispbuf[4]=a4;
  36.             
  37.               P2=0xff;
  38.               P0=dispcode[dispbuf[0]];
  39.               P2=dispbitcode[5];
  40.               Delay(1);

  41.               P2=0xff;
  42.               P0=dispcode[dispbuf[1]];
  43.               P2=dispbitcode[4];
  44.               Delay(1);

  45.               P2=0xff;
  46.               P0=dispcode[dispbuf[2]];
  47.               P2=dispbitcode[2];
  48.               Delay(1);

  49.               P2=0xff;
  50.               P0=tablel[dispbuf[3]];
  51.               P2=dispbitcode[1];
  52.               Delay(1);

  53.               P2=0xff;
  54.               P0=dispcode[dispbuf[4]];
  55.               P2=dispbitcode[0];
  56.               Delay(1);
  57. }
  58. void dmsec(uint count)
  59. {   
  60.               uint i;                                          // 1ms延時(shí)
  61.               while(count--)
  62.               {
  63.                             for(i=0;i<125;i++){}
  64.               }
  65. }

  66. void tmreset(void)
  67. {                 
  68.               DQ=0;
  69.               Delay(90);                                          // 精確延時(shí) 大于 480us
  70.               DQ=1;
  71.               Delay(4);                                          // 90,4 可以小范圍變化
  72. }

  73. void tmpre(void)
  74. {                  
  75.               while(DQ);
  76.               while(~DQ);
  77.               Delay(4);
  78. }

  79. bit tmrbit(void)
  80. {                  
  81.               uint i;
  82.               bit dat;
  83.               DQ=0;
  84.               i++;                                          // i++;大概1us
  85.               DQ=1;
  86.               i++;
  87.               i++;               
  88.               dat=DQ;
  89.               Delay(8);           
  90.               return(dat);
  91. }

  92. uchar tmrbyte(void)  //讀一個(gè)比特
  93. {        
  94.               uchar i,j,dat;
  95.               dat=0;
  96.               for(i=1;i<=8;i++)
  97.               {
  98.                             j=tmrbit();
  99.                             dat=(j<<7)|(dat>>1);
  100.               }
  101.               return(dat);
  102. }

  103. void tmwbyte(uchar dat)  //寫一個(gè)比特
  104. {            
  105.               uint i;
  106.               uchar j;
  107.               bit testb;
  108.               for(j=1;j<=8;j++)
  109.               {
  110.                             testb=dat&0x01;
  111.                             dat=dat>>1;                            // 從低位開始
  112.                             if(testb)       // Write 1
  113.                             {
  114.                                           DQ=0;                             // 先拉低
  115.                                           i++;
  116.                                           i++;                            // >1us                        
  117.                                           DQ=1;
  118.                                           Delay(4);           
  119.                             }
  120.                             else            // Write 0
  121.                             {
  122.                                           DQ=0;
  123.                                           Delay(4);                        
  124.                                           DQ=1;
  125.                                           i++;
  126.                                           i++;                             // 再拉高                        
  127.                             }
  128.               }
  129. }
  130. void tmstart(void)    //ds1820開始轉(zhuǎn)換
  131. {  
  132.               dmsec(1);            
  133.     tmreset();
  134.     tmpre();
  135.     dmsec(1);
  136.     tmwbyte(0xcc);                             // skip rom            
  137.     tmwbyte(0x44);                             // 轉(zhuǎn)換
  138. }
  139. uchar tmrtemp(void)     //讀取溫度
  140. {                 
  141.               uchar a,b;
  142.               tmreset();
  143.               tmpre();
  144.               dmsec(1);
  145.               tmwbyte(0xcc);                             // skip rom
  146.               tmwbyte(0xbe);                                          // 轉(zhuǎn)換
  147.               a=tmrbyte();                             // LSB低8位
  148.               b=tmrbyte();                            // MSB高8位
  149.               y3=b;
  150.               y3<<=8;
  151.               y3=y3|a;
  152.               ff=y3*0.0625;
  153.               y3=ff*10+0.5;
  154.               return(y3);
  155. }
  156. void keyscan(void)
  157. {
  158.               if(key2==0)
  159.               {
  160.                             dmsec(5);
  161.                             if(key2==0)
  162.                             {
  163.                                           yushe++;
  164.                                           if(yushe==100)
  165.                                                         yushe=25;            
  166.                             }
  167.                             while(!key2);
  168.               }
  169.               else if(key3==0)
  170.               {
  171.                             dmsec(5);
  172.                             if(key3==0)
  173.                             {
  174.                                           yushe--;
  175.                                           if(yushe==0)
  176.                                                         yushe=25;            
  177.                             }
  178.                             while(!key3);            
  179.               }
  180. }
  181. void time0_int(void) interrupt 1            //定時(shí)器T0產(chǎn)生不同占空比的PWM
  182. {  uint tmp;
  183.    static unsigned char j;
  184.    TH0=(65536-50000)/256;
  185.    TL0=(65536-50000)%256;
  186.    j=j+1;
  187.    if(tmp<=yushe)
  188.      {
  189.        P3_4=0;
  190.        j=0;                              //占空比00%
  191.      }
  192.    else if((tmp>yushe)&&(tmp<=(yushe+5)))
  193.        {
  194.             if(j==4)
  195.               P3_4=0;
  196.             else if(j==20)
  197.               P3_4=1;
  198.               j=0;
  199.         }                             //占空比為20%
  200.     else if((tmp>(yushe+5))&&(tmp<=(yushe+10)))
  201.        {
  202.             if(j==8)
  203.               P3_4=0;
  204.            else if(j==20)
  205.               P3_4=1;
  206.               j=0;
  207.         }                            //占空比為40%
  208.     else if((tmp>(yushe+10))&&(tmp<=(yushe+15)))
  209.        {
  210.               if(j==12)
  211.                 P3_4=0;
  212.               else if(j==20)
  213.                 P3_4=1;
  214.                 j=0;
  215.         }                         //占空比為60%
  216.     else if((tmp>(yushe+15))&&(tmp<=(yushe+20)))
  217.        {
  218.               if(j==16)
  219.                 P3_4=0;
  220.              else if(j==20)
  221.                 P3_4=1;
  222.                 j=0;
  223.         }                         //占空比為80%
  224.      else if(tmp>(yushe+20))
  225.             P3_4=1;
  226.              j=0;                       //占空比100%
  227. }
  228. void time1_int(void) interrupt 1     //定時(shí)器T1產(chǎn)生頻率為22KHz的驅(qū)蚊超聲波
  229. {
  230.    P_3.5=!P3_5;
  231.    TH0=(65536-2500)/256;
  232.    TL0=(65536-2500)%256;
  233. ……………………

  234. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
基于單片機(jī)的智能風(fēng)扇設(shè)計(jì).doc (1.66 MB, 下載次數(shù): 128)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1071489 發(fā)表于 2023-4-14 14:29 來(lái)自手機(jī) | 顯示全部樓層
您好,有源程序和仿真嗎
回復(fù)

使用道具 舉報(bào)

ID:1064915 發(fā)表于 2023-4-15 08:56 | 顯示全部樓層
完整的一篇文檔
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美色视频免费 | 色婷婷一区 | 91在线观看免费视频 | 色就干| 久久久久国产一区二区三区 | 成人免费一区二区三区牛牛 | 久久久久久综合 | 国产成人精品一区二区三区视频 | 视频二区 | 亚洲精品在线看 | 国产 欧美 日韩 一区 | 国产精品久久久久久亚洲调教 | 日韩精品在线免费 | 欧美精品在欧美一区二区 | 午夜色婷婷| 日韩网站免费观看 | va精品| 欧美在线亚洲 | 日韩精品在线一区二区 | 亚洲精品一区在线 | 国产激情在线观看视频 | 在线免费观看成年人视频 | 国产美女自拍视频 | 在线视频一区二区三区 | 亚洲一区二区三区视频在线 | 欧美福利视频一区 | 欧美一级在线视频 | 成人看片在线观看 | 久久国产视频播放 | 日日操操 | 日韩成人在线看 | 视频在线观看一区二区 | 福利视频亚洲 | 欧美性猛交 | 中文字幕国产精品 | 激情国产 | 黄色毛片在线看 | 成人亚洲性情网站www在线观看 | 久久影音先锋 | 日本人做爰大片免费观看一老师 | 看一级毛片 |