標(biāo)題: 基于紅外遙控技術(shù)的智能電風(fēng)扇 [打印本頁]
作者: 謝謝謝 時(shí)間: 2017-5-15 14:09
標(biāo)題: 基于紅外遙控技術(shù)的智能電風(fēng)扇
本 科 生 畢 業(yè) 設(shè)計(jì)
(申請(qǐng)學(xué)士學(xué)位)
論文題目基于紅外遙控技術(shù)的智能電風(fēng)扇
作者姓名 謝志鵬
所學(xué)專業(yè)名稱 自動(dòng)化
指導(dǎo)教師 鄒國柱
2017年 4 月
學(xué) 生: (簽字)
學(xué) 號(hào):
答 辯 日 期: 年 月 日
指 導(dǎo) 教 師: (簽字)
目錄
摘要 1
1 緒論 2
1.1 選題意義 2
1.2 研究現(xiàn)狀 2
1.3 研究內(nèi)容 2
2 系統(tǒng)總體設(shè)計(jì)方案 3
2.1設(shè)計(jì)思路 3
2.2 系統(tǒng)實(shí)現(xiàn)的主要功能 3
3 系統(tǒng)硬件設(shè)計(jì) 4
3.1 STC89C52單片機(jī) 4
3.1.1 主要特效 4
3.2 STC89C52外圍基本電路設(shè)計(jì) 5
3.2.1 電源電路 5
3.2.2 晶振電路 5
3.2.3 復(fù)位電路 6
3.2.4 串口下載回路 6
3.2.5 LED數(shù)碼顯示電路 7
3.2.6 蜂鳴器報(bào)警電路 8
3.2.7 按鍵電路 9
3.2.8 DS18B20溫度采集電路 9
3.2.9 紅外收發(fā)控制電路 10
3.2.10 電風(fēng)扇電極驅(qū)動(dòng)電路 11
4 系統(tǒng)軟件設(shè)計(jì) 11
4.1 軟件程序設(shè)計(jì)概述 11
4.2 主流程圖 12
4.3 DS18B20溫度采集和設(shè)置流程圖 13
4.4 電機(jī)驅(qū)動(dòng)流程 13
5 系統(tǒng)的調(diào)試 14
5.1 硬件調(diào)試 14
5.1.1 調(diào)試步驟 14
5.2 系統(tǒng)的軟件調(diào)試 15
5.3 實(shí)物功能分析 15
結(jié)論 17
參考文獻(xiàn) 18
附錄 19
附錄1 19
附錄2 20
致謝 39
基于紅外遙控技術(shù)的智能電風(fēng)扇
摘要:本論文是基于STC89C52單片機(jī)為核心,設(shè)計(jì)了一種新型智能紅外遙控電風(fēng)扇控制系統(tǒng)。本系統(tǒng)由紅外發(fā)射接收模塊、液晶顯示模塊、按鍵控制模塊、聲音播報(bào)模塊、溫度檢測模塊以及電機(jī)控制模塊組成。該系統(tǒng)能夠利用遙控或者按鍵形式實(shí)現(xiàn)對(duì)電風(fēng)扇不同檔位的設(shè)置。電風(fēng)扇的控制是通過遙控實(shí)現(xiàn)的,它是基于紅外通信的原理,并且風(fēng)速高低是利用PWM信號(hào)進(jìn)行調(diào)節(jié)的。在按鍵控制下,系統(tǒng)能夠?qū)崿F(xiàn)聲音提示,液晶顯示單元能夠顯示系統(tǒng)運(yùn)行的狀態(tài)數(shù)據(jù),充分展示了良好的人機(jī)交互界面。本系統(tǒng)實(shí)現(xiàn)了電風(fēng)扇的自動(dòng)調(diào)速等智能化功能,讓使用者能夠依據(jù)實(shí)際使用情況對(duì)電風(fēng)扇的運(yùn)行方式進(jìn)行設(shè)置,同時(shí)能夠依據(jù)溫度變化進(jìn)行風(fēng)速的自動(dòng)調(diào)整。
1 緒論
1.1 選題意義
電風(fēng)扇是一種普及程度非常廣泛且年代較長的家用電器,由于空調(diào)的發(fā)展和普及,電風(fēng)扇越來越不受關(guān)注且市場越來越小。但是電風(fēng)扇的優(yōu)點(diǎn)仍然是空調(diào)目前所無法替代的。簡單的高中低速已經(jīng)無法滿足人們的生活需求了,操作方便,體積小巧再加上更多智能化人性化的功能相信是如今電風(fēng)扇的發(fā)展趨勢和出路,由于紅外線遠(yuǎn)程遙控的普及以及單片機(jī)技術(shù)的發(fā)展,電風(fēng)扇結(jié)合智能紅外線遠(yuǎn)程遙控系統(tǒng)必然會(huì)得到優(yōu)秀的產(chǎn)品為人們所喜愛。
1.2 研究現(xiàn)狀
科技日新月異,人們生活節(jié)奏也是越來越快來愈快,同時(shí)對(duì)生活用品的智能需求也在不斷的提高。無線通信其中之一的產(chǎn)品遙控器的問世,使得各種各樣的遙控設(shè)備一一出現(xiàn),比如各種各樣的空調(diào)、電視、功放、智能冰箱等。這些形形色色的設(shè)備一定程度上給予了人類不斷增長的各種需求。遙控器設(shè)備已經(jīng)出現(xiàn)了六七十年了,而現(xiàn)在普遍使用的紅外遙控則是在上個(gè)實(shí)際70年代逐漸發(fā)展起來的一種無線遠(yuǎn)程智能控制技術(shù),紅外線遙控的原理是通過紅外線來傳輸被控設(shè)備的邏輯信號(hào),以此來實(shí)現(xiàn)對(duì)被控對(duì)象的遠(yuǎn)距離操作。具體指的就是由紅外線遙控器的發(fā)射器發(fā)出紅外控制指令信息,之后被控設(shè)備的紅外線接收器件接收到相應(yīng)指令信息后對(duì)接收到的相應(yīng)信號(hào)進(jìn)行解碼計(jì)算和處理,從而實(shí)現(xiàn)紅外線遙控對(duì)相應(yīng)設(shè)備的各種各樣用途的遠(yuǎn)程操作和控制。紅外線智能遙控優(yōu)點(diǎn)很多,比如它的相對(duì)的獨(dú)立特性、物理學(xué)特性、可見光相似性和一定強(qiáng)度的隱蔽特性。目前,隨著紅外遙控?zé)o線技術(shù)的迅速發(fā)展,紅外遙控?zé)o線技術(shù)已經(jīng)十分廣泛地應(yīng)用在各種智能電氣設(shè)備上,并且具有不可或缺的最基本的作用,當(dāng)然本設(shè)計(jì)中要研究的紅外遙控智能控制電風(fēng)扇也是基于于此的。紅外遙控技術(shù)的迅速成熟和十分廣泛應(yīng)用,外加現(xiàn)在的51增強(qiáng)型單片機(jī)技術(shù)不斷擴(kuò)展成熟,也使得電風(fēng)扇的紅外遙控成為不久將來的發(fā)展大趨勢。實(shí)現(xiàn)紅外遙控技術(shù)的方法有很多種,如利用常用的51單片機(jī)實(shí)現(xiàn)、利用DSP實(shí)現(xiàn)等!本設(shè)計(jì)則著重考慮使用STC89C52單片機(jī)來實(shí)現(xiàn)。
1.3 研究內(nèi)容
本課題設(shè)計(jì)的是一款基于STC89C52單片機(jī)的智能化紅外遙控電風(fēng)扇。該設(shè)計(jì)最突出的特點(diǎn)就是更加人性化。具體功能如下:智能風(fēng)扇的檔位控制可通過兩種方式實(shí)現(xiàn),一是通過功能鍵來實(shí)現(xiàn)檔位的設(shè)置,通過設(shè)置風(fēng)扇座上的三個(gè)鍵,來調(diào)節(jié)不同的風(fēng)速。其次就是通過無線的方式來實(shí)現(xiàn)對(duì)檔位的設(shè)置,本設(shè)計(jì)中采用的是紅外通信的方式實(shí)現(xiàn)多檔位風(fēng)速的設(shè)置,使用者可以用遙控來控制風(fēng)扇的風(fēng)速。以往的電風(fēng)扇仍然以機(jī)械旋鈕或者簡單紅外遙控方式為主,無較好的人機(jī)界面。本次設(shè)計(jì)增加了顯示功能和聲音提示功能,LED數(shù)碼管可以將風(fēng)扇的各種運(yùn)行狀態(tài)顯示出來,在風(fēng)扇的控制過程有提示音,使用戶可以更加舒適、方便地使用?紤]到不同環(huán)境下的各種情況,本設(shè)計(jì)增加了自動(dòng)調(diào)速系統(tǒng),風(fēng)扇可以根據(jù)室內(nèi)的溫度變速運(yùn)行,當(dāng)溫度低于一定溫度時(shí),就自動(dòng)關(guān)閉,高于該溫度值就會(huì)繼續(xù)工作。
2 系統(tǒng)總體設(shè)計(jì)方案
2.1設(shè)計(jì)思路
基于宏晶公司生產(chǎn)的STC89C52系列單片機(jī)為控制核心的紅外智能遙控電風(fēng)扇系統(tǒng)最主要的功能是實(shí)現(xiàn)電風(fēng)扇風(fēng)速的調(diào)節(jié)控制,基于宏晶公司生產(chǎn)的STC89C52系列單片機(jī)為控制核心的紅外智能遙控電風(fēng)扇系統(tǒng)上電運(yùn)行后,如果調(diào)到自動(dòng)模式,系統(tǒng)會(huì)先判斷根據(jù)DS18B20溫度傳感器采集到的實(shí)際溫度值是否低于溫度低限值,如果低于溫度低限值,風(fēng)扇停止轉(zhuǎn)動(dòng);如果當(dāng)前環(huán)境溫度值處在溫度低限值和溫度高限值之間,風(fēng)速低速轉(zhuǎn)動(dòng);如果當(dāng)前環(huán)境溫度值高于溫度高限值,風(fēng)速高速轉(zhuǎn)動(dòng)。如果選擇的是手動(dòng)模式,則整個(gè)風(fēng)扇的轉(zhuǎn)速則有三檔風(fēng)速可供選擇。風(fēng)扇電機(jī)驅(qū)動(dòng)則都是依靠PWM信號(hào)來進(jìn)行控制,同時(shí)整個(gè)風(fēng)速自動(dòng)和手動(dòng)模式選擇、溫度高限值和低限值的設(shè)置和手動(dòng)模式下風(fēng)扇風(fēng)速的選擇都可以選擇本地按鍵方式或者紅外遙控方式進(jìn)行設(shè)置,且當(dāng)采集到的環(huán)境溫度高于溫度的設(shè)置高限值,蜂鳴器就會(huì)發(fā)出報(bào)警信號(hào)。設(shè)計(jì)出這樣的系統(tǒng)同時(shí)也具有低功耗、節(jié)約能源等特點(diǎn),也最大化的方便了用戶使用。綜上所述此系統(tǒng)主要包括單片機(jī)核心控制器、單片機(jī)電源電路、單片機(jī)晶振電路、單片機(jī)復(fù)位電路、單片機(jī)串口通信電路、DS18B20溫度采集電路、紅外收發(fā)控制部分、按鍵電路、蜂鳴器輸出電路、LED數(shù)碼管顯示電路、電風(fēng)扇電機(jī)驅(qū)動(dòng)電路等。其基本系統(tǒng)框圖如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsCFEF.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD000.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD001.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD002.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD003.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD004.tmp.png溫
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD014.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD015.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD016.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD017.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD018.tmp.png
圖2-1基本系統(tǒng)框圖
2.2 系統(tǒng)實(shí)現(xiàn)的主要功能
(1)通過DS18B20溫度傳感器采集溫度并在LED數(shù)碼管上予以顯示;
(2)通過按鍵或者紅外遙控器可以對(duì)溫度上下限值進(jìn)行設(shè)置;
(3)亦可通過按鍵或者紅外遙控器可以對(duì)系統(tǒng)工作模式進(jìn)行選擇;
(4)通過蜂鳴器輸出報(bào)警信號(hào);
(5)通過PWM信號(hào)對(duì)電風(fēng)扇電機(jī)進(jìn)行有效控制。
3 系統(tǒng)硬件設(shè)計(jì)
3.1 STC89C52單片機(jī)
STC89C52RC控制器是一個(gè)叫STC的公司制造的一種功耗低、性能好的CMOS8位微控制器, 8K字節(jié)的系統(tǒng)可以使用Flash存儲(chǔ)器。STC89C52應(yīng)用的是典型的MCS-51內(nèi)核,不過通過了很多的改善讓芯片擁有了傳統(tǒng)51單片機(jī)沒有的的功能和特性。單芯片上,擁有靈活的8 位數(shù)的CPU 和在系統(tǒng)可編程Flash,讓STC89C52給很多的嵌入式控制系統(tǒng)給予了靈活程度高,效果好的解決方案。
具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,總共有3個(gè)16 位數(shù)的定時(shí)器和計(jì)數(shù)器,一個(gè)7向量的4級(jí)中斷結(jié)構(gòu)(同時(shí)容納典型51的5向量2級(jí)中斷結(jié)構(gòu)),還有4個(gè)外部中斷,全雙工串行口。同時(shí) STC89C52 還可以降低到0Hz 的靜態(tài)邏輯操作,有2種軟件被支持可以選擇的模式是節(jié)電的模式。在空閑的模式時(shí),CPU 是不在運(yùn)行的,不過RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷依然在運(yùn)行。在選擇掉電保護(hù)這種模式時(shí),RAM內(nèi)容被保存,振蕩器被固定住了,單片機(jī)說有的運(yùn)行被截止,一直到下一個(gè)中斷或硬件層面的恢復(fù)。最高運(yùn)作頻率35MHz,6T/12T可選。
3.1.1 主要特效
(1)8K字節(jié)程序存儲(chǔ)空間;
(2)512字節(jié)數(shù)據(jù)存儲(chǔ)空間;
(3)內(nèi)帶4K字節(jié)EEPROM存儲(chǔ)空間;
(4)可直接使用串口下載。
PDIP封裝,其封裝圖如下圖所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD029.tmp.jpg
圖 3-1STC89C52RC引腳圖
3.2 STC89C52外圍基本電路設(shè)計(jì)
3.2.1 電源電路
電源電路也就是給耗電器件提供電力的電源部分的電路設(shè)計(jì),應(yīng)用的的電路特點(diǎn)以及方式。經(jīng)常碰到的電源電路有交流和直流電源電路等等。該STC89C52系列單片機(jī)電源采用直流5V供電,供電電源可采用USB供電或者外部電池盒供電,設(shè)計(jì)的電路如下圖所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD02A.tmp.jpg
圖3-2電源電路圖
3.2.2 晶振電路
單片機(jī)的系統(tǒng)里晶振是不可或缺的,晶體震蕩器是它的全稱,晶振的作用在單片機(jī)里非常大,他通過與內(nèi)部電路的配合,時(shí)鐘頻率在單片機(jī)系統(tǒng)里由此產(chǎn)生,在這個(gè)基礎(chǔ)之上,單片機(jī)的所有指令得以運(yùn)轉(zhuǎn),晶振的提供的時(shí)鐘頻率越高,要想單片機(jī)的運(yùn)轉(zhuǎn)速度快,那么晶振給予的時(shí)鐘頻率就有夠高。
晶振通過一類晶體,這種晶體能使機(jī)械能和電能互相轉(zhuǎn)化,并且在共振的狀態(tài)下運(yùn)行,由此保持穩(wěn)定,精準(zhǔn)的單頻振蕩。在一般的情況下,一般的晶振頻率可以達(dá)到百分之五十的絕對(duì)精度。高級(jí)的精度更高。還有的晶振能通過外加電壓調(diào)整頻率,不過要在一定的范圍內(nèi),名字就叫壓控振蕩器。
晶振的能力是給系統(tǒng)基礎(chǔ)的時(shí)鐘訊號(hào)。一個(gè)晶振一般情況下被一個(gè)系統(tǒng)共同使用,這樣各部分的同步能有所保障。但是有的通訊系統(tǒng)的射頻和基頻是被不同的晶振提供的時(shí)鐘信號(hào)的,電子調(diào)頻是用來保持同步的方式。鎖相環(huán)電路一般情況下與晶振結(jié)合應(yīng)用,系統(tǒng)需要的時(shí)鐘頻率由此提供。要是差異的子系統(tǒng)要用到不同頻率的時(shí)鐘信號(hào),能讓與同一個(gè)晶振相配合的不同鎖相環(huán)來供應(yīng)。
本系統(tǒng)中晶振電路設(shè)計(jì)如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD03B.tmp.jpg
圖3-3晶振電路圖
3.2.3 復(fù)位電路
復(fù)位電路,能讓電路回到到一開始的情況。猶如計(jì)算器的清零功能,方便回歸到起始狀況,重新進(jìn)行其他操作。但是與之不一樣的是,復(fù)位電路開啟的方式不太一樣。一種是在電路一通電就立即復(fù)位;二是在必要時(shí)可以由手動(dòng)操作;還有就是在系統(tǒng)需要的時(shí)候進(jìn)行。大多數(shù)的復(fù)位電路一般較為容易,很多電阻電容相結(jié)合就能做到,復(fù)雜一點(diǎn)的能就是用程序和三極管以及其他的器件來運(yùn)行。
為了能讓微機(jī)系統(tǒng)的電路不亂可靠的運(yùn)行,復(fù)位電路是必不可少的一方面,復(fù)位電路首先就是要能夠上電復(fù)位。普通的微機(jī)電路在一般情況下運(yùn)行用電電壓是5V±5%,也就是4.75~5.25V。因?yàn)槲C(jī)電路是一種時(shí)序電路,不亂的時(shí)鐘信號(hào)是必不可少的,所有打開電源的時(shí)候,只能在VCC低于5.25V高于4.75V并且晶體振蕩器也在正常運(yùn)行的時(shí)候,微機(jī)電路才能正常運(yùn)行,復(fù)位信號(hào)也撤銷了。
當(dāng)今,單片機(jī)的復(fù)位電路一般有四種:
(1)微分型復(fù)位電路;
(2)積分型復(fù)位電路;
(3)比較器型復(fù)位電路;
(4)看門狗型復(fù)位電路。
單片機(jī)系統(tǒng)的復(fù)位方式有:手動(dòng)按鈕復(fù)位和上電復(fù)位。
本系統(tǒng)設(shè)計(jì)的復(fù)位電路如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD03C.tmp.jpg
圖3-4復(fù)位電路圖
3.2.4 串口下載回路
STC89C52系列單片機(jī)可以直接通過串口或者使用USB轉(zhuǎn)TTL即可下載程序,優(yōu)點(diǎn)是省去購買通用編程器,單片機(jī)在用戶系統(tǒng)上就能下載或者燒錄用戶程序,并且還不要把單片機(jī)卸下來,直接就能把程序代碼燒錄進(jìn)單片機(jī)里面。從 RxD/P3.0 檢驗(yàn)到合理的下載指令流就下載用戶程序,如果檢驗(yàn)不到就自動(dòng)復(fù)位到用戶的程序區(qū)。設(shè)計(jì)的電路圖如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD03D.tmp.jpg
圖3-5串口下載電路圖
下載軟件則使用宏晶公司研發(fā)的STC-ISP軟件,軟件截圖如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD03E.tmp.jpg
圖3-7STC-ISP軟件界面
3.2.5 LED數(shù)碼顯示電路
LED數(shù)碼顯示電路用來顯示當(dāng)前環(huán)境實(shí)時(shí)溫度值,當(dāng)進(jìn)入設(shè)置界面時(shí),則用來顯示設(shè)置的溫度高限值和低限值以及手動(dòng)模式下的三檔風(fēng)速。該設(shè)計(jì)中的LED數(shù)碼管顯示電路使用的是4位8段共陽極數(shù)碼管,各位數(shù)碼管分別使用三極管9012進(jìn)行信號(hào)放大,其中段選信號(hào)的A、B、C、D、E、F、G、DP分別使用P1.2、P1.0、P1.4、P1.6、P1.7、P1.1、P1.3、P1.5,位選信號(hào)分別使用P3.4、P3.5、P3.6、P3.7口。設(shè)計(jì)的電路圖如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD04E.tmp.jpg
圖3-8 LED數(shù)碼管顯示電路
3.2.6 蜂鳴器報(bào)警電路
蜂鳴器簡單來說就是電子訊響器,結(jié)構(gòu)是一體化的,供電方式是直流電壓的供電方式,通常能在于各種生活中常見的電子物件中找到作發(fā)聲器件比如電視機(jī)洗衣機(jī)等等。蜂鳴器有兩種類型,電磁式蜂鳴器和壓電式蜂鳴器。
本設(shè)計(jì)中采用有緣蜂鳴器,采用三極管9012進(jìn)行驅(qū)動(dòng)放大,供電電源為直流5V,其設(shè)計(jì)電路如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD04F.tmp.jpg
圖3-9蜂鳴器報(bào)警電路圖
3.2.7 按鍵電路
按鍵在我們的生活中也非常常見,是一種控制用的元件,一般都是用來通斷‘控制電路’(一般電流都很。,然后使得電動(dòng)機(jī)等等各種各樣的設(shè)備根據(jù)人的命令運(yùn)行的器件?煞譃槌i_按鍵、常閉按鍵、常開常閉按鍵和動(dòng)作點(diǎn)擊按鍵等。按鍵這種器件在很多地方都能得到運(yùn)用,比如車床的停機(jī)與起動(dòng)、反轉(zhuǎn)與正轉(zhuǎn)等;塔吊的停止,啟動(dòng),還有下降,上升,以及速度的各種控制等等時(shí)代的進(jìn)步,社會(huì)的發(fā)展,創(chuàng)新水平的提升,按鍵一直都是大量產(chǎn)品的最基本人機(jī)接口工具,外形的也變的美觀個(gè)性化。本設(shè)計(jì)中采用的4腳常開直徑為6mm的按鍵,使用P2.0、P2.1、P2.2三個(gè)IO口,第一個(gè)按鍵用來切換模式,第二個(gè)按鍵和第三個(gè)按鍵用來設(shè)置溫度上下限時(shí)增加或減少,其設(shè)計(jì)的電路圖如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD050.tmp.jpg
圖3-10按鍵電路圖
3.2.8 DS18B20溫度采集電路
DS18B20是普遍的溫度傳感器,小巧輕便,價(jià)格便宜,抗干擾能力極強(qiáng),精度也很高!它的輸入輸出時(shí)序和測溫方法和DS18B20差不多,不過由此得到的溫度數(shù)值有幾位會(huì)被分辨率影響,而且溫度轉(zhuǎn)變的時(shí)間也減小了很多。
DS18B20數(shù)字溫度傳感器在安裝的時(shí)候也很容易,做好后能在很多地方用到,比如不銹鋼封裝式,磁鐵吸附式等等等等型號(hào)很多,有LTM8874,LTM8877等。主要根據(jù)應(yīng)用場合的不同而改變其外觀。裝好的DS18B20能被應(yīng)用在高爐水循環(huán)測溫,機(jī)房測溫,鍋爐測溫,農(nóng)業(yè)大棚測溫,彈藥庫測溫等各種各樣的溫度差異不是非常大的地方。小巧輕便,非常耐用,用起來也很容易,封裝的方式也很多,適用于各種各樣的非常復(fù)雜的場合的空間設(shè)備數(shù)字測溫和控制場合。
DS18B20的控制方法如下所示:
(1)溫度轉(zhuǎn)換 44H 啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換
(2)讀暫存器 BEH 讀暫存器9字節(jié)二進(jìn)制數(shù)字
(3)寫暫存器 4EH 將數(shù)據(jù)寫入暫存器的TH、TL字節(jié)
(4)復(fù)制暫存器 48H 把暫存器的TH、TL字節(jié)寫到E2PROM中
(5)重新調(diào)E2PROM B8H 把E2PROM中的TH、TL字節(jié)寫到暫存器TH、TL字節(jié)
(6)讀電源供電方式 B4H 啟動(dòng)DS18B20發(fā)送電源供電方式的信號(hào)給主CPU
設(shè)計(jì)的電路中使用P2.4口,電路設(shè)計(jì)如下:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD061.tmp.jpg
圖3-11溫度采集電路圖
3.2.9 紅外收發(fā)控制電路
紅外線編碼是傳導(dǎo)信號(hào)還有日常使用的電器遠(yuǎn)程控制的典型的一種控制操作方法,它實(shí)際上就是一種脈寬調(diào)制的串行通訊。常用的家用遠(yuǎn)程控制一般用的紅外編碼電路是μPD6121G型7461型和HT622型。本設(shè)計(jì)就是通過這些電路相應(yīng)的編碼格式太探討如何運(yùn)用單片機(jī)來讓它解碼的,其中用到了單片機(jī)的捕獲中斷功能。
紅外信號(hào)的發(fā)送方面大部分是通過讓待發(fā)送的信號(hào)轉(zhuǎn)變成一種脈沖,之后控制紅外發(fā)光管發(fā)送信號(hào)。收到信號(hào)的方面就是實(shí)現(xiàn)紅外的放大、接受然后解調(diào),再變回同步發(fā)射格式相同(但高、低電位剛好相反的脈沖信號(hào)。這些操作一般都是通過接收頭來實(shí)現(xiàn),這種接收頭是一體化的。一般放出TTL兼容電平。之后經(jīng)由解碼使脈沖信號(hào)變成數(shù)據(jù),然后就使得數(shù)據(jù)的傳送。如圖所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD062.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD063.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD064.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD065.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD066.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD076.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD077.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD078.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD079.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD07A.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD07B.tmp.png
圖3-12紅外收發(fā)系統(tǒng)框圖
本設(shè)計(jì)中使用的IO口為P3.2口,設(shè)計(jì)的電路如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD07C.tmp.jpg
圖3-13紅外收發(fā)控制電路圖
3.2.10 電風(fēng)扇電極驅(qū)動(dòng)電路
使用三極管9012進(jìn)行信號(hào)放大,所用IO口P2.3用來輸出PWM信號(hào),根據(jù)信號(hào)最后控制電風(fēng)扇完成各個(gè)檔位風(fēng)速的運(yùn)行。設(shè)計(jì)的電路如下所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD07D.tmp.jpg
圖3-14電風(fēng)扇電機(jī)驅(qū)動(dòng)電路圖
4 系統(tǒng)軟件設(shè)計(jì)
4.1 軟件程序設(shè)計(jì)概述
在單片機(jī)系統(tǒng)程序的設(shè)計(jì)開發(fā)中,單片機(jī)是整個(gè)系統(tǒng)的核心部分,各個(gè)部分模塊化的程序就是整個(gè)系統(tǒng)的組成成份。軟件編寫的好不好,運(yùn)用的語句有沒有簡單明了會(huì)影響單片機(jī)的運(yùn)行效果。在每一個(gè)模塊化的運(yùn)行程序里面一定要用簡潔少的語句做盡量多的任務(wù),不要使語句表達(dá)出有問題的意思,如此這般就能讓整個(gè)系統(tǒng)更好的運(yùn)轉(zhuǎn),讓單片機(jī)工作能力很大的提升,F(xiàn)在就對(duì)這次的畢業(yè)設(shè)計(jì)的軟件方面作些闡述。
4.2 主流程圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD08E.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD08F.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD090.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD091.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD092.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD093.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD094.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0A5.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0A6.tmp.png 是
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0A7.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0A8.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0A9.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0AA.tmp.png 是
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0AB.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0AC.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0AD.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0AE.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0BE.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0BF.tmp.png 是
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C0.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C1.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C2.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C3.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C4.tmp.png
圖4-1主流程框圖
4.3 DS18B20溫度采集和設(shè)置流程圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C5.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0C6.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0D7.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0D8.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0D9.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DA.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DB.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DC.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DD.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DE.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0DF.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0E0.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F1.tmp.png 異常
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F2.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F3.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F4.tmp.png 正常
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F5.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F6.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F7.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F8.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0F9.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD0FA.tmp.png
圖4-2 DS18B20溫度采集和設(shè)置流程圖
4.4 電機(jī)驅(qū)動(dòng)流程
邏輯判斷十分簡單,當(dāng)前溫度低于溫度下限值時(shí),風(fēng)速停止運(yùn)轉(zhuǎn);當(dāng)前溫度值處于溫度低限值和溫度高限值之間時(shí),風(fēng)扇低速運(yùn)轉(zhuǎn);當(dāng)前溫度值高于溫度高限值時(shí),風(fēng)速高速運(yùn)轉(zhuǎn),其設(shè)計(jì)的電機(jī)驅(qū)動(dòng)程序如下所示:
void fengshan_kz()
{
if(temperature >= t_high) //風(fēng)扇全開
{
TR1 = 0;
pwm = 0;
}
else if((temperature < t_high) && (temperature >= t_low)) //風(fēng)扇緩慢
{
f_pwm_l = 60;
TR1 = 1;
}
else if(temperature < t_low) //關(guān)閉風(fēng)扇
{
TR1 = 0;
pwm = 1;
}
}
5 系統(tǒng)的調(diào)試
電路板的焊接安裝以及調(diào)試在整個(gè)硬件制作里面是非常重要的,其是從理論上向?qū)嶋H邁步的關(guān)鍵,也是把理論變?yōu)閷?shí)際所必不可少的。對(duì)于初步的電路板的制作主要是兩種方法:焊接或者面包板焊接。面包板焊接相對(duì)要更加的簡易一些,方便替換一些器件,并且能多次使用。這次設(shè)計(jì)主要要用到的設(shè)備有:信號(hào)發(fā)生器、萬用表、示波器等。
5.1 硬件調(diào)試
5.1.1 調(diào)試步驟
(1)不加電源的檢查
首先對(duì)應(yīng)電路圖,電路的連線有沒有錯(cuò)誤的地方,有沒有多余接線、錯(cuò)誤接線、應(yīng)該接卻沒有接線的情況等。用萬用表檢查接線的優(yōu)良程度,各個(gè)器件的連接有沒有問題。通過細(xì)心的檢查,發(fā)現(xiàn)并且解決了很多的問題,避免了很多的麻煩。
(2)靜態(tài)檢測與調(diào)試
將信號(hào)源斷開,把正確的電源接入電路,將萬用表調(diào)到電壓檔,來監(jiān)測電源電壓,看是否有異,F(xiàn)象,如:手摸元器件發(fā)燙、異常氣味、電源短路、冒煙等,如果發(fā)現(xiàn)有異常狀況,應(yīng)立即切斷電源,然后排除故障。如果電路在測試后無上述異常情況,然后測量關(guān)鍵處的直流電壓,如:放大電路輸入、輸出端直流電壓、靜態(tài)工作點(diǎn)等,看是否在正常工作狀態(tài)下,如果有個(gè)別電路不符,經(jīng)過調(diào)整電路元器件參數(shù)、更換元器件,使電路最終工作在合適的工作狀態(tài)。 對(duì)于放大電路我們還用示波器觀察是否有自激發(fā)生。結(jié)果一切正常。
(3)動(dòng)態(tài)檢測與調(diào)試
動(dòng)態(tài)調(diào)試是在靜態(tài)調(diào)試的基礎(chǔ)上進(jìn)行的,調(diào)試的方法地在電路的輸入端加上所需的信號(hào)源,并循著信號(hào)的注射逐級(jí)檢測各有關(guān)點(diǎn)的波形、參數(shù)和性能指標(biāo)是滿足設(shè)計(jì)要求,如必要,要對(duì)電路參數(shù)作進(jìn)一步調(diào)整。發(fā)現(xiàn)問題,要設(shè)法找出原因,排除故障,繼續(xù)進(jìn)行。我們所設(shè)計(jì)的遙控器電路是采用碼分制遙控方式,我們用示波器對(duì)發(fā)射電路輸出端及接收電路輸入端的信號(hào)波型的進(jìn)行了檢查,發(fā)現(xiàn)當(dāng)按下不同的開關(guān)按鈕時(shí)所顯示的波型是不同的。這說明了此電路是工作在正常狀態(tài)的。
5.2 系統(tǒng)的軟件調(diào)試
在完成系統(tǒng)硬件的檢查后主要是對(duì)軟件進(jìn)行調(diào)試,對(duì)遙控器的調(diào)試主要是用示波器觀察能否在遙控接收器中輸出相應(yīng)的波形,調(diào)整發(fā)射電阻的大小可以改變紅外線發(fā)射的作用距離。其性能指標(biāo)調(diào)試后系統(tǒng)性能指標(biāo)測試如下:最大遙控距離:10m 發(fā)射接收角:水平最大90度 硬件電路制作完成并調(diào)試好后,便可將程序編譯好下載到單片機(jī)試運(yùn)行。
5.3 實(shí)物功能分析
如圖所示,按下電源鍵后,智能電風(fēng)扇啟動(dòng),如下圖為初始化界面,數(shù)碼管顯示當(dāng)前環(huán)境溫度,且為自動(dòng)調(diào)速模式。當(dāng)溫度低于最小值是風(fēng)扇不轉(zhuǎn),當(dāng)溫度高于最小值且低于最大值時(shí)風(fēng)扇低速轉(zhuǎn)速運(yùn)轉(zhuǎn),當(dāng)溫度高于最大值時(shí)高速運(yùn)轉(zhuǎn)。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD10A.tmp.jpg
圖5-1智能溫控模式工作圖
按下設(shè)置鍵,電風(fēng)扇處于最大值的設(shè)定界面如圖,此時(shí)可以用加減鍵設(shè)定最大溫度設(shè)定值。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD10B.tmp.jpg
圖5-2最大溫度值設(shè)置圖
再次按下設(shè)置鍵,電風(fēng)扇處于最小值的設(shè)定界面如圖,此時(shí)可以用加減鍵設(shè)定最小溫度設(shè)定值。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD10C.tmp.jpg
5-3最小溫度值設(shè)置圖
再次按下設(shè)置鍵,電風(fēng)扇切換為手動(dòng)擋時(shí),界面如下,此時(shí)可以通過加減鍵選擇三個(gè)風(fēng)速的檔位。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD11D.tmp.jpg
圖5-4手動(dòng)擋工作圖
以上所有的功能選擇或設(shè)置都可以用按鍵或者紅外遙控器完成。
結(jié)論
本文章主要設(shè)計(jì)了一種智能的紅外線遙控電風(fēng)扇,整個(gè)系統(tǒng)通過紅外線接收發(fā)射模塊、電機(jī)控制模塊、溫度檢測模塊、按鍵操作控制模塊、還有液晶屏幕顯示模塊組成。整個(gè)電風(fēng)扇系統(tǒng)是通過STC12系列單片機(jī)形成了用三個(gè)按鍵操控多種工作模式的切換以及風(fēng)速的切換,三個(gè)按鍵分別為增加鍵,功能鍵和減小鍵,能夠由需要配置電風(fēng)扇的工作模式。而且,在設(shè)置的時(shí)候,在電風(fēng)扇基礎(chǔ)功能的前提下,還配置了聲音提醒等功能。本文還描述了用紅外線遠(yuǎn)程操控檔位,如此這般就能夠?qū)崿F(xiàn)舒適地用遙控器來操控風(fēng)扇的啟動(dòng)與停止了,操作使用非常方便。電風(fēng)扇的操控是經(jīng)由遙控器實(shí)現(xiàn)的,它的基礎(chǔ)是紅外線通信的原理,且風(fēng)速的大小也是通過PWM信號(hào)來調(diào)節(jié)控制的。電風(fēng)扇還有良好的顯示界面,電風(fēng)扇和人的交互方面也非常好。本設(shè)計(jì)通過對(duì)智能電風(fēng)扇的簡單的功能增加,例如風(fēng)速自動(dòng)控制等,讓電風(fēng)扇更加的齊全可靠,使用更加舒適。
參考文獻(xiàn)
[1]陳靜, 史雪飛. “模擬電子技術(shù)”課程中若干關(guān)鍵問題的探討[J]. 電氣電子教學(xué)學(xué)報(bào),2014, 36(1):59-60.
[2]張毅剛 王少軍 付寧. 單片機(jī)原理及接口技術(shù)[M]. 人民郵電出版社, 2015.
[3]波形發(fā)生器.歷屆全國大學(xué)生電子競賽SPCE061A實(shí)現(xiàn)方案.北京北陽電子技術(shù)有限公司,2014
[4]吳凌鸝. 微機(jī)備用電源自動(dòng)投入裝置現(xiàn)場運(yùn)行分析[J]. 中國電子商務(wù),2014(22):269-270.
[5] Vajpayee P. An ultra-high gain low power two stage CMOS op-amp based on inverse aspect ratio self cascode structures[J]. Analog Integrated Circuits & Signal Processing, 2014, 81(2):349-359.
[6]Marchisio M A. In silico, design and in vivo, implementation of yeast gene Boolean gates[J]. Journal of Biological Engineering, 2014, 8(1):6-6.
[7]劉慧勇 .楊虹,基于STM32的智能電風(fēng)扇設(shè)計(jì)[M].2014
[8]佚名. 電子線路設(shè)計(jì)·實(shí)驗(yàn)·測試[M]. 電子工業(yè)出版社, 2014.
[9]王爽.英飛凌XE166/XC2000單片機(jī)開發(fā)與應(yīng)用實(shí)例[M].電子工業(yè)出版社,2014.6.
[10]陸超逸 石杰元 基于MSP430和Android溫控距控智能電風(fēng)扇設(shè)計(jì).電子世界.2016.10.
[11]唐曉珊.管瓊.李運(yùn)彪.王歡 電風(fēng)扇自動(dòng)溫控裝置設(shè)計(jì).電子設(shè)計(jì)工程.2016.12
[12]蔣小軍.基于單片機(jī)的智能溫控風(fēng)扇.科技展望.2016.13
[13王文江.]基于物聯(lián)網(wǎng)技術(shù)的教室智能用電系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).中國科技信息.2016.2.
附錄
附錄1
系統(tǒng)總電路圖:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsD11E.tmp.jpg
附錄2
完整的程序:
#include <reg52.h> //調(diào)用單片機(jī)頭文件
#define uchar unsigned char //無符號(hào)字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號(hào)整型 宏定義 變量范圍0~65535
//數(shù)碼管段選定義 0 1 2 3 4 5 6 7 8 9
uchar code smg_du[]={0x28,0xee,0x32,0xa7,0xe4,0xa1,0x51,0xea,0x80,0xa0,
0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //斷碼
//數(shù)碼管位選定義
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8] = {0x28,0xee,0x32,0xa2,0xe4,0x92,0x82,0xf8};
uchar smg_i = 3; //顯示數(shù)碼管的個(gè)位數(shù)
sbit dq = P2^4; //18b20 IO口的定義
sbit beep = P3^3;
bit flag_lj_en; //按鍵連加使能
bit flag_lj_3_en; //按鍵連3次連加后使能 加的數(shù)就越大了
uchar key_time,key_value; //用做連加的中間變量
bit key_500ms ;
sbit pwm = P2^3;
uchar f_pwm_l ; //越小越暗
uint temperature ; //
bit flag_300ms ;
uchar menu_1; //菜單設(shè)計(jì)的變量
uint t_high = 300,t_low = 100; //溫度上下限報(bào)警值
//數(shù)碼管位選定義
sbit smg_we1 = P3^7; //數(shù)碼管位選定義
sbit smg_we2 = P3^6;
sbit smg_we3 = P3^5;
sbit smg_we4 = P3^4;
uchar danwei;
/***********************1ms延時(shí)函數(shù)*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/***********************小延時(shí)函數(shù)*****************************/
void delay_uint(uint q)
{
while(q--);
}
/***********************數(shù)碼位選函數(shù)*****************************/
void smg_we_switch(uchar i)
{
switch(i)
{
case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 0; break;
case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
}
}
/***********100us的延時(shí)函數(shù)***12M晶振**************/
void delay_100us(uchar z)
{ //12M
uchar x,y;
for(x=0;x<z;x++)
for(y=0;y<20;y++);
}
uchar flag_moshi;
sbit hw_P32=P3^2; //紅外遙控IO口的定義
bit flag_jiema_en = 0; //紅外解碼成功標(biāo)志位
uchar hw_table[4]; //紅外解碼數(shù)據(jù)緩沖區(qū)
/***********************數(shù)碼顯示函數(shù)*****************************/
void display()
{
static uchar i;
i++;
if(i >= smg_i)
i = 0;
P1 = 0xff; //消隱
smg_we_switch(i); //位選
P1 = dis_smg; //段選
}
/***********************18b20初始化函數(shù)*****************************/
void init_18b20()
{
bit q;
dq = 1; //把總線拿高
delay_uint(1); //15us
dq = 0; //給復(fù)位脈沖
delay_uint(80); //750us
dq = 1; //把總線拿高 等待
delay_uint(10); //110us
q = dq; //讀取18b20初始化信號(hào)
delay_uint(20); //200us
dq = 1; //把總線拿高 釋放總線
}
/*************寫18b20內(nèi)的數(shù)據(jù)***************/
void write_18b20(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{ //寫數(shù)據(jù)是低位開始
dq = 0; //把總線拿低寫時(shí)間隙開始
dq = dat & 0x01; //向18b20總線寫數(shù)據(jù)了
delay_uint(5); // 60us
dq = 1; //釋放總線
dat >>= 1;
}
}
/*************讀取18b20內(nèi)的數(shù)據(jù)***************/
uchar read_18b20()
{
uchar i,value;
for(i=0;i<8;i++)
{
dq = 0; //把總線拿低讀時(shí)間隙開始
value >>= 1; //讀數(shù)據(jù)是低位開始
dq = 1; //釋放總線
if(dq == 1) //開始讀寫數(shù)據(jù)
value |= 0x80;
delay_uint(5); //60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間
}
return value; //返回?cái)?shù)據(jù)
}
/*************讀取溫度的值 讀出來的是小數(shù)***************/
uint read_temp()
{
uint value;
uchar low; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳過64位ROM
write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令
delay_uint(50); //500us
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳過64位ROM
write_18b20(0xbe); //發(fā)出讀取暫存器命令
low = read_18b20(); //讀溫度低字節(jié)
value = read_18b20(); //讀溫度高字節(jié)
value <<= 8; //把溫度的高位左移8位
value |= low; //把讀出的溫度低位放到value的低八位中
value *= 0.625; //轉(zhuǎn)換到溫度值 小數(shù)
return value; //返回讀出的溫度 帶小數(shù)
}
/*************定時(shí)器0初始化程序***************/
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X11; //定時(shí)器0、定時(shí)器1工作方式1
ET0 = 1; //開定時(shí)器0中斷
TR0 = 1; //允許定時(shí)器0定時(shí)
ET1 = 1; //開定時(shí)器0中斷
}
/********************獨(dú)立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨(dú)立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P2 |= 0x07;
if((P2 & 0x07) != 0x07) //按鍵按下
{
if(key_500ms == 1) //連加
{
key_500ms = 0;
key_new = 1;
}
delay_1ms(1); //按鍵消抖動(dòng)
if(((P2 & 0x07) != 0x07) && (key_new == 1))
{ //確認(rèn)是按鍵按下
key_new = 0;
switch(P2 & 0x07)
{
case 0x06: key_can = 1; break; //得到k2鍵值
case 0x05: key_can = 2; break; //得到k3鍵值
case 0x01: key_can = 3; break; //得到k4鍵值
}
flag_lj_en = 1; //連加使能
}
}
else
{
if(key_new == 0)
{
key_new = 1;
flag_lj_en = 0; //關(guān)閉連加使能
flag_lj_3_en = 0; //關(guān)閉3秒后使能
key_value = 0; //清零
key_500ms = 0;
}
}
}
/****************按鍵處理數(shù)碼管顯示函數(shù)***************/
void key_with()
{
if(key_can == 1) //設(shè)置鍵
{
f_pwm_l = 30;
menu_1 ++;
flag_moshi = 0; //自動(dòng)模式
if(menu_1 >= 4)
{
menu_1 = 0;
smg_i = 3; //數(shù)碼管顯示3位
}
}
if(menu_1 == 1) //設(shè)置高溫報(bào)警
{
smg_i = 4; //數(shù)碼管顯示4位
if(key_can == 2)
{
if(flag_lj_3_en == 0)
t_high ++ ; //按鍵按下未松開自動(dòng)加三次
else
t_high += 10; //按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10
if(t_high > 990)
t_high = 990;
}
if(key_can == 3)
{
if(flag_lj_3_en == 0)
t_high -- ; //按鍵按下未松開自動(dòng)減三次
else
t_high -= 10; //按鍵按下未松開自動(dòng)減三次之后每次自動(dòng)減10
if(t_high <= t_low)
t_high = t_low + 1;
}
dis_smg[0] = smg_du[t_high % 10]; //取小數(shù)顯示
dis_smg[1] = smg_du[t_high / 10 % 10] & 0xdf; //取個(gè)位顯示
dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位顯示
dis_smg[3] = 0x64; //H
}
if(menu_1 == 2) //設(shè)置低溫報(bào)警
{
smg_i = 4; //數(shù)碼管顯示4位
if(key_can == 2)
{
if(flag_lj_3_en == 0)
t_low ++ ; //按鍵按下未松開自動(dòng)加三次
else
t_low += 10; //按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10
if(t_low >= t_high)
t_low = t_high - 1;
}
if(key_can == 3)
{
if(flag_lj_3_en == 0)
t_low -- ; //按鍵按下未松開自動(dòng)減三次
else
t_low -= 10; //按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10
if(t_low <= 10)
t_low = 10;
}
dis_smg[0] = smg_du[t_low % 10]; //取小數(shù)顯示
dis_smg[1] = smg_du[t_low / 10 % 10] & 0xdf; //取個(gè)位顯示
dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位顯示
dis_smg[3] = 0x3D; //L
}
if(menu_1 == 3)
{
flag_moshi = 1; //手動(dòng)模式
smg_i = 4; //數(shù)碼管顯示4位
if(key_can == 2) //加檔
{
danwei ++;
if(danwei >= 4)
danwei = 0;
}
if(key_can == 3) //減檔
{
if(danwei == 0)
danwei = 4;
danwei --;
}
if(danwei == 0) //風(fēng)扇停止
{
TR1 = 0;
pwm = 1;
}
if(danwei == 1) //1檔
{
TR1 = 1;
f_pwm_l = 69;
}
if(danwei == 2) //2檔
{
TR1 = 1;
f_pwm_l = 30;
}
if(danwei == 3) //3檔
{
TR1 = 0;
pwm = 0;
}
dis_smg[0] = smg_du[temperature / 10 % 10]; //取小數(shù)顯示
dis_smg[1] = smg_du[temperature / 100 % 10]; //取個(gè)位顯示
dis_smg[2] = 0xf7;
dis_smg[3] = smg_du[danwei];
}
}
/****************風(fēng)扇控制函數(shù)***************/
void fengshan_kz()
{
if(temperature >= t_high) //風(fēng)扇全開
{
TR1 = 0;
pwm = 0;
}
else if((temperature < t_high) && (temperature >= t_low)) //風(fēng)扇緩慢
{
f_pwm_l = 60;
TR1 = 1;
}
else if(temperature < t_low) //關(guān)閉風(fēng)扇
{
TR1 = 0;
pwm = 1;
}
}
/***********外部中斷0初始化程序****************/
void init_int0() //外部中斷0初始化程序
{
EX0=1; //允許外部中斷0中斷
EA=1; //開總中斷
IT0 = 1; //外部中斷0負(fù)跳變中斷
}
/***********紅外遙控程序**************/
void hongwai_dis()
{
if(flag_jiema_en == 1)
{
flag_jiema_en = 0;
beep = 0 ;
delay_1ms(100);
beep = 1;
if(hw_table[2] == 0x47) //設(shè)置鍵
{
key_can = 1;
}
if(hw_table[2] == 0x40) //加鍵
{
key_can = 2;
}
if(hw_table[2] == 0x19) //減鍵
{
key_can = 3;
}
if(hw_table[2] == 0x16) //0檔
{
TR1 = 0;
pwm = 1;
danwei = 0;
}
if(hw_table[2] == 0x0c) //1檔
{
TR1 = 1;
f_pwm_l = 69;
danwei = 1;
}
if(hw_table[2] == 0x18) //2檔
{
TR1 = 1;
f_pwm_l = 30;
danwei = 2;
}
if(hw_table[2] == 0x5e) //3檔
{
TR1 = 0;
pwm = 0;
danwei = 3;
}
hw_table[2] = 0; //把數(shù)據(jù)清零
}
}
/****************主函數(shù)***************/
void main()
{
uchar value;
time_init(); f_pwm_l = 50;
init_int0(); //外部中斷0初始化程序
while(1)
{
key(); //按鍵程序
hongwai_dis(); //紅外遙控程序
if(key_can < 10)
{
key_with(); //設(shè)置報(bào)警溫度
}
if(flag_300ms == 1) //300ms 處理一次溫度程序
{
flag_300ms = 0;
temperature = read_temp(); //先讀出溫度的值
if(temperature >= t_high)
{
value ++;
if(value >= 2)
beep = ~beep; //報(bào)警
}
else
{
beep = 1;
value = 0;
}
if(menu_1 == 0)
{
smg_i = 3;
dis_smg[0] = smg_du[temperature % 10]; //取溫度的小數(shù)顯示
dis_smg[1] = smg_du[temperature / 10 % 10] & 0xdf; //取溫度的個(gè)位顯示
dis_smg[2] = smg_du[temperature / 100 % 10] ; //取溫度的十位顯示
}
if(menu_1 == 3)
{
dis_smg[0] = smg_du[temperature / 10 % 10]; //取小數(shù)顯示
dis_smg[1] = smg_du[temperature / 100 % 10]; //取個(gè)位顯示
dis_smg[2] = 0xf7;
dis_smg[3] = smg_du[danwei];
}
}
if(flag_moshi == 0)
fengshan_kz(); //風(fēng)扇控制函數(shù)
}
}
/*****************紅外解碼程序********************/
void int0() interrupt 0
{
unsigned char i,j;
delay_100us(40); //防止干擾
if(hw_P32 == 0)
{ //引導(dǎo)碼9+4.5=13.5ms
while(hw_P32 == 0); //等待9ms的低電平過完
delay_100us(27); //2.7ms
if(hw_P32 == 1) //引碼結(jié)束
{
delay_100us(20); //2.7ms+2.0ms=4.7ms 說明4.5ms的高電平已經(jīng)過完 引導(dǎo)碼已經(jīng)結(jié)束
for(i=0;i<4;i++)
for(j=0;j<8;j++)
{
while(hw_P32 == 0); //等待過完0.56ms
delay_100us(9);
if(hw_P32 == 0) //數(shù)據(jù)0的時(shí)間=0.56+0.565=1.125ms
{ //數(shù)據(jù)1的時(shí)間=0.56+1.685=2.245ms
hw_table >>= 1; //低位在前
}
else
{
delay_100us(10); //0.9+1.0=1.9ms 延時(shí)讓1.685高電平的時(shí)間過完
hw_table >>= 1; //低位在前
hw_table |= 0x80; //1.9ms過完后 數(shù)據(jù)線已經(jīng)是低電平了
}
}
flag_jiema_en = 1; //紅外解碼成功
}
}
}
/*************定時(shí)器0中斷服務(wù)程序***************/
void time0_int() interrupt 1
{
static uchar value; //定時(shí)2ms中斷一次
TH0 = 0xf8;
TL0 = 0x30; //2ms
display(); //數(shù)碼管顯示函數(shù)
value++;
if(value >= 150)
{
value = 0;
flag_300ms = 1;
}
if(flag_lj_en == 1) //按下按鍵使能
{
key_time ++;
if(key_time >= 250) //500ms
{
key_time = 0;
key_500ms = 1; //500ms
key_value ++;
if(key_value > 3)
{
key_value = 10;
flag_lj_3_en = 1; //3次后1.5秒連加大些
}
}
}
}
/*******************定時(shí)器1用做單片機(jī)模擬PWM 調(diào)節(jié)***********************/
void Timer1() interrupt 3 //調(diào)用定時(shí)器1
{
static uchar value_l;
TH1=0xbe; // 定時(shí)10ms中斷一次
TL1=0x0c; //500us
if(pwm==1)
{
value_l+=1;
if(value_l > f_pwm_l) //高電平
{
value_l=0;
if(f_pwm_l != 0)
pwm=0;
}
}
else
{
value_l+=1;
if(value_l > 100 - f_pwm_l)
{
value_l=0;
pwm=1;
}
}
}
致謝
在寫作本畢業(yè)設(shè)計(jì)的期間,遇到了非常多的沒有預(yù)料到的各種問題,不過在鄒國柱老師的不厭其煩的指導(dǎo)和監(jiān)督下,并且經(jīng)由我個(gè)人的勤奮努力下,做出了這篇畢業(yè)設(shè)計(jì)。這篇論文的完成不僅僅是我自己個(gè)人的,還有很多幫助我的人,我要感謝他們。假如得不到指導(dǎo)老師的指引,假如得不到父母和同學(xué)們的解惑和提示,這篇畢業(yè)設(shè)計(jì)根本沒有辦法做出來。我要對(duì)我的指導(dǎo)老師師致深深的鞠躬,感謝老師在這段時(shí)間的幫助和引領(lǐng)!由于這次畢業(yè)設(shè)計(jì),我使用和學(xué)習(xí)了非常多的知識(shí)和工具,而且經(jīng)過查看一定的資料文獻(xiàn),學(xué)到了大量的課本上不能得到的的知識(shí)和能力,從里面取得了很大的收獲。還要感謝的就是我即將要離開的母校,就是因?yàn)橛辛四感=o我提供的條件和環(huán)境,我才會(huì)有機(jī)會(huì)鍛煉和展示的平臺(tái);最后要感謝的就是身邊的同學(xué)們,是你們?cè)谖矣龅絾栴}百思不得其解的時(shí)候在我身邊幫助我一起攻克難題。
作者: 1824380946 時(shí)間: 2017-7-20 17:27
能 發(fā)個(gè)電子文檔么 發(fā)個(gè)原理圖嘛
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |