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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、; /原P1端低4位狀態(tài) uchar NP1L; /現(xiàn)P1端低4位狀態(tài)uchar FinT; /最終測得溫度uchar LimT; /警報溫度下限uchar Count; /定時器計數(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 /開機自檢,跳過默認初始的85 Measure();while( FinT = 0X55 );while(1)KeyScan(); /鍵盤掃描Measure(); /獲取測量溫度Display(); /顯示/*/ /*初始化*/*/void Initialize()Status = 0; /初始化設(shè)置狀態(tài)標志位Warning = 0; /初始化警報標志位BUZZER = 1; /初始化蜂鳴器狀態(tài)RUN = 0; /初始化運行指示燈SET = 1; /初始化設(shè)置指示燈Feng = 1; /初始化風扇端口OP1

8、L = 0X00; /初始化原P1低4位NP1L = 0X00; /初始化新P1低4位LimT = 0X1B; /初始化警報溫度下限為27/*/*溫度測量*/*/void InitDS18B20(); /初始化DS18B20void WriteDS18B20( uchar ch ); /寫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 ); /跳過ROM_nop_();

9、InitDS18B20();WriteDS18B20( 0XCC ); /跳過ROM_nop_();WriteDS18B20( 0X44 ); /發(fā)送溫度轉(zhuǎn)換指令Delay1ms( 25 );Delay1ms( 25 );Delay1ms( 25 );Delay1ms( 25 ); /等待1s轉(zhuǎn)換InitDS18B20();WriteDS18B20( 0XCC ); /跳過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ù)單元 /開總中斷 /開外部中斷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; /判斷是否警報 /讀DS18B20數(shù)據(jù) /寫DS18B20數(shù)據(jù)Delay15us( 3 );DQ = 1;ch = ch >> 1;_nop_();void

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

13、扇SET = !Status; /設(shè)置指示燈顯示Delay1ms( 20 );/*/*鍵盤掃描*/*/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è)置” /進入設(shè)置狀態(tài) /按鍵為“+1”/判斷是否為設(shè)置狀態(tài) /警報溫度下限+1 /超過99清零 /按鍵為“-1”/判斷是否為設(shè)置狀態(tài) /警報溫度下限-1/低于0變?yōu)?9 /按鍵為“確認” /返回測溫狀態(tài) /多鍵按下Error(); /出錯復(fù)位break;NP1L = 0X00; /重新初始化/*/ /*中斷服務(wù)*/*/void Int0( void )

15、interrupt 0Int = 1; /外部中斷標志位置1 EX0 = 0; /關(guān)外部中斷0中斷允許TMOD = 0X01; /設(shè)置定時器0工作在模式1 TH0 = 0X3C;TL0 = 0XB0; /為T0賦初值,令其定時50ms Count = 0X3C; /設(shè)置計數(shù)次數(shù) ET0 = 1; /開T0中斷允許TR0 = 1; /開T0中斷/*/void Timer0( void ) interrupt 1if( Count = 0 ) /判斷定時計數(shù)是否結(jié)束 ET0 = 0; /關(guān)T0中斷允許TR0 = 0; /關(guān)T0中斷Int = 0; /外部中斷標志位置0 EX0 = 1; /開外部中斷0中斷允許 elseTL0 = 0XB0; /重新賦T0初值TH0 = 0X3C;Count -; /定時計數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論