基于AT89C51單片機(jī)溫度報(bào)警系統(tǒng)設(shè)計(jì)與制作_第1頁(yè)
基于AT89C51單片機(jī)溫度報(bào)警系統(tǒng)設(shè)計(jì)與制作_第2頁(yè)
基于AT89C51單片機(jī)溫度報(bào)警系統(tǒng)設(shè)計(jì)與制作_第3頁(yè)
基于AT89C51單片機(jī)溫度報(bào)警系統(tǒng)設(shè)計(jì)與制作_第4頁(yè)
基于AT89C51單片機(jī)溫度報(bào)警系統(tǒng)設(shè)計(jì)與制作_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、摘要我們介紹的是一種基于單片機(jī)控制的數(shù)字溫度報(bào)警,本溫度系統(tǒng)具有多功能性,即可以當(dāng)數(shù)字溫度計(jì)使用,顯示當(dāng)前環(huán)境溫度,又可以作為報(bào)警器使用,設(shè)置報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警,并采取措施使溫度下降。該溫度報(bào)警系統(tǒng)控制器使用單片機(jī)AT89C51,測(cè)溫傳感器使DS18B20,用2位共陽(yáng)極LED數(shù)碼管,實(shí)現(xiàn)溫度顯示,能準(zhǔn)確達(dá)到以上要求。二、設(shè)計(jì)方案1、方案一由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測(cè)溫度顯示出來(lái),這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,感溫電路

2、比較麻煩。2、 方案二進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測(cè)溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡(jiǎn)單,軟件設(shè)計(jì)也比較簡(jiǎn)單,故采用了方案二。溫度報(bào)警系統(tǒng)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖1所示1、單片機(jī)主板電路單片機(jī)AT89C51具有低電壓供電和體積小等特點(diǎn),該模塊包括中央處理CPU -AT89C51、時(shí)鐘電路及復(fù)位電路;圖2復(fù)位電路 圖3 時(shí)鐘電路2、DS18B20溫度傳感器與單片機(jī)的接口電路DS18B20溫度傳感器是美國(guó)DALL

3、AS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)位的數(shù)字值讀數(shù)方式。DS18B20是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。 該電路完成了信號(hào)的采集、轉(zhuǎn)換和傳輸。圖43、上下限報(bào)警調(diào)整電路分別調(diào)整溫度的上下限報(bào)警設(shè)置,有“+“、”“-”、“確定”等鍵圖5上下限報(bào)警調(diào)整電路4、溫度顯示電路顯示當(dāng)前測(cè)得的溫度,數(shù)碼管采用74LS247驅(qū)動(dòng)圖6溫度顯示電路5、報(bào)警電路當(dāng)環(huán)境溫度超過(guò)設(shè)定溫度時(shí),蜂鳴器鳴叫,紅燈點(diǎn)亮,發(fā)生報(bào)警;當(dāng)人員發(fā)現(xiàn)警報(bào)時(shí),可按圖8中的按鈕,暫時(shí)中斷蜂鳴器

4、的鳴叫。圖7 蜂鳴器、亮燈報(bào)警電路 圖8 中斷電路6、控制電路該電路的作用是:當(dāng)測(cè)量溫度超過(guò)設(shè)定溫度時(shí),小風(fēng)扇以下轉(zhuǎn)動(dòng),加快儀器散熱,使溫度保持在設(shè)定溫度以下。圖9控制電路四、整體構(gòu)造及功能整體電路圖如下:圖10整體電路圖實(shí)現(xiàn)的總體功能: 實(shí)現(xiàn)對(duì)環(huán)境溫度的測(cè)量和顯示 能通過(guò)按鍵設(shè)置報(bào)警溫度 溫度超過(guò)設(shè)置值時(shí),產(chǎn)生光聲報(bào)警 報(bào)警同時(shí)系統(tǒng)自帶小風(fēng)扇轉(zhuǎn)動(dòng)以降低溫度 主程序主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理DS18B20的測(cè)量的當(dāng)前溫度值,溫度測(cè)量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測(cè)量一次被測(cè)溫度,其程序流程見(jiàn)下圖所示附錄:源程序/*/ /*溫度報(bào)警器*/*/#include<re

5、g51.h>#include<intrins.h>#define uchar unsigned char#define Tube P0 /數(shù)碼管端口#define Key P1 /鍵盤(pán)端口sbit DQ = P14; /溫度傳感器DS18B20數(shù)據(jù)傳輸端 sbit BUZZER = P15; /蜂鳴器端口sbit RUN = P16; /運(yùn)行指示燈端口 sbit SET = P17; /設(shè)置指示燈端口 sbit Feng = P33; /風(fēng)扇端口bit Status; /設(shè)置狀態(tài)標(biāo)志位bit Warning; /警報(bào)標(biāo)志位bit Int; /外部中斷標(biāo)志位uchar OP1L

6、; /原P1端低4位狀態(tài) uchar NP1L; /現(xiàn)P1端低4位狀態(tài)uchar FinT; /最終測(cè)得溫度uchar LimT; /警報(bào)溫度下限uchar Count; /定時(shí)器計(jì)數(shù)/*/#include"Delay.h"#include"Display.h"#include"Initialize.h"#include"Error.h"#include"KeyScan.h"#include"Measure.h"#include"Interrupt.h"/

7、*/ /*主程序*/*/void main()Initialize(); /初始化do /開(kāi)機(jī)自檢,跳過(guò)默認(rèn)初始的85 Measure();while( FinT = 0X55 );while(1)KeyScan(); /鍵盤(pán)掃描Measure(); /獲取測(cè)量溫度Display(); /顯示/*/ /*初始化*/*/void Initialize()Status = 0; /初始化設(shè)置狀態(tài)標(biāo)志位Warning = 0; /初始化警報(bào)標(biāo)志位BUZZER = 1; /初始化蜂鳴器狀態(tài)RUN = 0; /初始化運(yùn)行指示燈SET = 1; /初始化設(shè)置指示燈Feng = 1; /初始化風(fēng)扇端口OP1

8、L = 0X00; /初始化原P1低4位NP1L = 0X00; /初始化新P1低4位LimT = 0X1B; /初始化警報(bào)溫度下限為27/*/*溫度測(cè)量*/*/void InitDS18B20(); /初始化DS18B20void WriteDS18B20( uchar ch ); /寫(xiě)DS18B20數(shù)據(jù)uchar ReadDS18B20(); /讀DS18B20數(shù)據(jù)void Measure()uchar TemH; /保存?zhèn)鞲衅靼l(fā)送數(shù)據(jù)高8位uchar TemL; /保存?zhèn)鞲衅靼l(fā)送數(shù)據(jù)低8位InitDS18B20();WriteDS18B20( 0XCC ); /跳過(guò)ROM_nop_();

9、InitDS18B20();WriteDS18B20( 0XCC ); /跳過(guò)ROM_nop_();WriteDS18B20( 0X44 ); /發(fā)送溫度轉(zhuǎn)換指令Delay1ms( 25 );Delay1ms( 25 );Delay1ms( 25 );Delay1ms( 25 ); /等待1s轉(zhuǎn)換InitDS18B20();WriteDS18B20( 0XCC ); /跳過(guò)ROMWriteDS18B20( 0XBE ); /發(fā)送溫度轉(zhuǎn)換指令TemL = ReadDS18B20(); /讀低位溫度值TemH = ReadDS18B20(); /讀高位溫度值 Delay1ms( 2 );TemH

10、= ( TemH<<4 )|( TemL>>4 ); /保留溫度值整數(shù)部分FinT = TemH;Count = 0X00; EA = 1; EX0 = 1; IT0 = 1; /初始化定時(shí)器計(jì)數(shù)單元 /開(kāi)總中斷 /開(kāi)外部中斷0中斷允許 /設(shè)置外部中斷0為邊沿觸發(fā)方式if( FinT > LimT ) Warning = 1;elseWarning = 0;uchar ReadDS18B20() uchar ch;uchar q ;for( q=0; q<8; q+ )ch = ch >> 1;DQ = 0;_nop_();DQ = 1;_nop

11、_();_nop_();_nop_();_nop_();if( DQ = 1 )ch = ch | 0X80; elsech = ch & 0X7f; Delay15us( 3 );DQ = 1;return( ch );void WriteDS18B20( uchar ch ) uchar i;for( i=0; i<8; i+ )DQ=0;Delay15us( 1 );DQ = ch & 0X01; /判斷是否警報(bào) /讀DS18B20數(shù)據(jù) /寫(xiě)DS18B20數(shù)據(jù)Delay15us( 3 );DQ = 1;ch = ch >> 1;_nop_();void

12、InitDS18B20() /初始化DS18B20DQ = 0;Delay15us( 33 ); /至少延時(shí)480us DQ = 1;Delay15us( 10 ); /至少延時(shí)100us /*/ /*顯示*/*/void Display()uchar T;if( Status = 1 ) /判斷狀態(tài)T = LimT;elseT = FinT;T = T % 10 + T / 10 * 16; /將2進(jìn)制碼轉(zhuǎn)化為BCD碼 Tube = T; /數(shù)碼管顯示RUN = Warning; /運(yùn)行指示燈顯示BUZZER = !Warning | Int; /蜂鳴器Feng = !Warning; /風(fēng)

13、扇SET = !Status; /設(shè)置指示燈顯示Delay1ms( 20 );/*/*鍵盤(pán)掃描*/*/void KeyScan() NP1L = Key; NP1L = NP1L & 0X0F; NP1L = NP1L 0X0F;if( NP1L != OP1L )switch(NP1L) case 0X01: Status = 1; break;case 0X02: if( Status = 1) LimT+; LimT = LimT % 100; Delay1ms(255); elseError(); break;case 0X04: if( Status = 1) LimT-;

14、if( LimT < 0 ) LimT = 0X63; Delay1ms(255); elseError(); break;case 0X08: Status = 0; break;default: /讀取按鍵狀態(tài) /判斷按鍵/按鍵為“設(shè)置” /進(jìn)入設(shè)置狀態(tài) /按鍵為“+1”/判斷是否為設(shè)置狀態(tài) /警報(bào)溫度下限+1 /超過(guò)99清零 /按鍵為“-1”/判斷是否為設(shè)置狀態(tài) /警報(bào)溫度下限-1/低于0變?yōu)?9 /按鍵為“確認(rèn)” /返回測(cè)溫狀態(tài) /多鍵按下Error(); /出錯(cuò)復(fù)位break;NP1L = 0X00; /重新初始化/*/ /*中斷服務(wù)*/*/void Int0( void )

15、interrupt 0Int = 1; /外部中斷標(biāo)志位置1 EX0 = 0; /關(guān)外部中斷0中斷允許TMOD = 0X01; /設(shè)置定時(shí)器0工作在模式1 TH0 = 0X3C;TL0 = 0XB0; /為T0賦初值,令其定時(shí)50ms Count = 0X3C; /設(shè)置計(jì)數(shù)次數(shù) ET0 = 1; /開(kāi)T0中斷允許TR0 = 1; /開(kāi)T0中斷/*/void Timer0( void ) interrupt 1if( Count = 0 ) /判斷定時(shí)計(jì)數(shù)是否結(jié)束 ET0 = 0; /關(guān)T0中斷允許TR0 = 0; /關(guān)T0中斷Int = 0; /外部中斷標(biāo)志位置0 EX0 = 1; /開(kāi)外部中斷0中斷允許 elseTL0 = 0XB0; /重新賦T0初值TH0 = 0X3C;Count -; /定時(shí)計(jì)數(shù)減1/*/*延遲函數(shù)*/*/void Delay15us( uchar n ) /延遲n*15usdo_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();_nop_();n-;while( n );void Delay1ms( uchar d

溫馨提示

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

評(píng)論

0/150

提交評(píng)論