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

下載本文檔

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

文檔簡介

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

2、電路比較麻煩。2、 方案二 進而考慮到用溫度傳感器,在單片機電路設計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,就可以滿足設計要求。從以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設計也比較簡單,故采用了方案二。溫度報警系統(tǒng)電路設計總體設計方框圖如圖1所示 主 控 制 器單片機復位時鐘振蕩報警點按鍵調(diào)整 LED顯示溫 度 傳 感器 器蜂鳴器報警小風扇轉(zhuǎn)動圖1總體設計方框圖三、模塊功能分析1、單片機主板電路單片機AT89C51具有低電壓供電和體積小等特點,該模塊包括中央處理CPU -AT89

3、C51、時鐘電路及復位電路; 圖2復位電路 圖3 時鐘電路2、DS18B20溫度傳感器與單片機的接口電路DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)位的數(shù)字值讀數(shù)方式。DS18B20是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。該電路完成了信號的采集、轉(zhuǎn)換和傳輸。圖43、上下限報警調(diào)整電路 分別調(diào)整溫度的上下限報警設置,有“+“、”“-”、“確定”等鍵圖5上下限報警調(diào)整電路4、溫度顯示電路顯示當前測得的溫度,數(shù)碼管采用74LS24

4、7驅(qū)動圖6溫度顯示電路5、報警電路 當環(huán)境溫度超過設定溫度時,蜂鳴器鳴叫,紅燈點亮,發(fā)生報警;當人員發(fā)現(xiàn)警報時,可按圖8中的按鈕,暫時中斷蜂鳴器的鳴叫。 圖7 蜂鳴器、亮燈報警電路 圖8 中斷電路6、控制電路 該電路的作用是:當測量溫度超過設定溫度時,小風扇以下轉(zhuǎn)動,加快儀器散熱,使溫度保持在設定溫度以下。圖9控制電路四、整體構造及功能整體電路圖如下:圖10整體電路圖實現(xiàn)的總體功能:l 實現(xiàn)對環(huán)境溫度的測量和顯示l 能通過按鍵設置報警溫度l 溫度超過設置值時,產(chǎn)生光聲報警l 報警同時系統(tǒng)自帶小風扇轉(zhuǎn)動以降低溫度主程序主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度

5、值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見下圖所示NY開始達到上限?DS18B20初始化初始化DS18B20存在嗎?對DS18B20寫指令讀DS18B20轉(zhuǎn)換溫度小風扇轉(zhuǎn)動顯示溫度NY報警附錄:源程序/*/*溫度報警器*/*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define Tube P0/數(shù)碼管端口#define Key P1/鍵盤端口sbit DQ = P14;/溫度傳感器DS18B20數(shù)據(jù)傳輸端sbit BUZZER = P15;/蜂鳴器端

6、口sbit RUN = P16;/運行指示燈端口sbit SET = P17;/設置指示燈端口sbit Feng = P33;/風扇端口bit Status;/設置狀態(tài)標志位bit Warning;/警報標志位bit Int;/外部中斷標志位uchar OP1L;/原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

7、.h"#include"Error.h"#include"KeyScan.h"#include"Measure.h"#include"Interrupt.h"/*/*主程序*/*/void main()Initialize();/初始化do/開機自檢,跳過默認初始的85Measure();while( FinT = 0X55 );while(1)KeyScan();/鍵盤掃描Measure();/獲取測量溫度 Display();/顯示/*/*初始化*/*/void Initialize()Status

8、= 0;/初始化設置狀態(tài)標志位Warning = 0;/初始化警報標志位BUZZER = 1;/初始化蜂鳴器狀態(tài)RUN = 0;/初始化運行指示燈SET = 1;/初始化設置指示燈Feng = 1;/初始化風扇端口OP1L = 0X00;/初始化原P1低4位NP1L = 0X00;/初始化新P1低4位LimT = 0X1B;/初始化警報溫度下限為27Count = 0X00;/初始化定時器計數(shù)單元EA = 1;/開總中斷EX0 = 1;/開外部中斷0中斷允許IT0 = 1;/設置外部中斷0為邊沿觸發(fā)方式/*/*溫度測量*/*/void InitDS18B20(); /初始化DS18B20voi

9、d 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_();InitDS18B20(); WriteDS18B20( 0XCC );/跳過ROM_nop_(); WriteDS18B20( 0X44 );/發(fā)送溫度轉(zhuǎn)換指令 Delay1ms( 25 ); Delay1ms( 25 ); D

10、elay1ms( 25 ); Delay1ms( 25 );/等待1s轉(zhuǎn)換 InitDS18B20(); WriteDS18B20( 0XCC );/跳過ROM WriteDS18B20( 0XBE );/發(fā)送溫度轉(zhuǎn)換指令 TemL = ReadDS18B20(); /讀低位溫度值 TemH = ReadDS18B20(); /讀高位溫度值 Delay1ms( 2 ); TemH = ( TemH<<4 )|( TemL>>4 );/保留溫度值整數(shù)部分FinT = TemH; if( FinT > LimT )/判斷是否警報Warning = 1;elseWarn

11、ing = 0; uchar ReadDS18B20()/讀DS18B20數(shù)據(jù) uchar ch; uchar q ; for( q=0; q<8; q+ ) ch = ch >> 1; DQ = 0; _nop_(); DQ = 1; _nop_();_nop_();_nop_();_nop_(); if( DQ = 1 )ch = ch | 0X80; elsech = ch & 0X7f;Delay15us( 3 ); DQ = 1; return( ch );void WriteDS18B20( uchar ch )/寫DS18B20數(shù)據(jù) uchar i; f

12、or( i=0; i<8; i+ ) DQ=0; Delay15us( 1 ); DQ = ch & 0X01; Delay15us( 3 ); DQ = 1; ch = ch >> 1; _nop_(); void InitDS18B20()/初始化DS18B20 DQ = 0; Delay15us( 33 );/至少延時480us DQ = 1; Delay15us( 10 );/至少延時100us /*/*顯示*/*/void Display() uchar T;if( Status = 1 )/判斷狀態(tài)T = LimT;elseT = FinT;T = T %

13、 10 + T / 10 * 16;/將2進制碼轉(zhuǎn)化為BCD碼 Tube = T;/數(shù)碼管顯示RUN = Warning;/運行指示燈顯示BUZZER = !Warning | Int;/蜂鳴器Feng = !Warning;/風扇SET = !Status;/設置指示燈顯示 Delay1ms( 20 ); /*/*鍵盤掃描*/*/void KeyScan()NP1L = Key;/讀取按鍵狀態(tài) NP1L = NP1L & 0X0F;NP1L = NP1L 0X0F;if( NP1L != OP1L )switch(NP1L)/判斷按鍵case 0X01:/按鍵為“設置”Status

14、= 1;/進入設置狀態(tài)break;case 0X02:/按鍵為“+1”if( Status = 1)/判斷是否為設置狀態(tài)LimT+;/警報溫度下限+1LimT = LimT % 100;/超過99清零Delay1ms(255);elseError();break;case 0X04:/按鍵為“-1”if( Status = 1)/判斷是否為設置狀態(tài)LimT-;/警報溫度下限-1if( LimT < 0 )LimT = 0X63;/低于0變?yōu)?9Delay1ms(255);elseError();break;case 0X08:/按鍵為“確認”Status = 0;/返回測溫狀態(tài)break

15、;default:/多鍵按下Error();/出錯復位break;NP1L = 0X00;/重新初始化/*/*中斷服務*/*/void Int0( void ) interrupt 0 Int = 1;/外部中斷標志位置1EX0 = 0;/關外部中斷0中斷允許TMOD = 0X01;/設置定時器0工作在模式1TH0 = 0X3C;TL0 = 0XB0;/為T0賦初值,令其定時50msCount = 0X3C;/設置計數(shù)次數(shù) ET0 = 1;/開T0中斷允許TR0 = 1;/開T0中斷/*/void Timer0( void )interrupt 1if( Count = 0 )/判斷定時計數(shù)是

16、否結(jié)束ET0 = 0;/關T0中斷允許TR0 = 0;/關T0中斷Int = 0;/外部中斷標志位置0EX0 = 1;/開外部中斷0中斷允許elseTL0 = 0XB0;/重新賦T0初值TH0 = 0X3C;Count -;/定時計數(shù)減1/*/*延遲函數(shù)*/*/void Delay15us( uchar n )/延遲n*15us do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); n-; while( n );void Delay1ms(

溫馨提示

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

最新文檔

評論

0/150

提交評論