基于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頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、187;®E4n nA n A A Auy yU2VW圖8 中斷電路圖6溫度顯示電路5、報警電路當(dāng)環(huán)境溫度超過設(shè)定溫度時,蜂鳴器鳴叫,紅燈點亮,發(fā)生報警;當(dāng)人員發(fā)現(xiàn)警報時,可按 圖8中的按鈕,暫時中斷蜂鳴器的鳴叫。圖7蜂鳴器、亮燈報警電路6、控制電路該電路的作用是: 當(dāng)測量溫度超過設(shè)定溫度時,小風(fēng)扇以下轉(zhuǎn)動,加快儀器散熱,使溫度保持在設(shè)定溫度以下。U7A»LWX)圖9控制電路四、整體構(gòu)造及功能整體電路圖如下:nju-iEQ-w.HJiaH121惜”圖10整體電路圖 實現(xiàn)的總體功能:實現(xiàn)對環(huán)境溫度的測量和顯示能通過按鍵設(shè)置報警溫度溫度超過設(shè)置值時,產(chǎn)生光聲報警報警同時系統(tǒng)自帶

5、小風(fēng)扇轉(zhuǎn)動以降低溫度主程序主程序的主要功能是負責(zé)溫度的實時顯示、讀出并處理DS18B2 0的測量的當(dāng)前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見下圖所示附錄:源程序*/* 溫度報警器 */*#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define Tube P0/ 數(shù)碼管端口#define Key P1/ 鍵盤端口sbit DQ = P1A4;sbit BUZZER = PU5;sbit RUN = P1A6;sbit SET = P1A7;sbit

6、 Feng = P3A3;/溫度傳感器DS18B20數(shù)據(jù)傳輸端/ 蜂鳴器端口/ 運行指示燈端口/ 設(shè)置指示燈端口/ 風(fēng)扇端口bit Status;/ 設(shè)置狀態(tài)標(biāo)志位bit Warning;/ 警報標(biāo)志位bit Int;/ 外部中斷標(biāo)志位uchar OP1L;uchar NP1L;/ 原 P1 端低 4 位狀態(tài)/ 現(xiàn) P1 端低 4 位狀態(tài)uchar FinT; uchar LimT;/ 最終測得溫度/ 警報溫度下限uchar Count;/ 定時器計數(shù)*#include"Delay.h" #include"Display.h" #include"

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

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

9、測量 */*void InitDS18B20();void WriteDS18B20( uchar ch ); uchar ReadDS18B20();/ 初始化 DS18B20/寫DS18B20數(shù)據(jù)/ 讀 DS18B20數(shù)據(jù)void Measure()uchar TemH;uchar TemL;InitDS18B20();WriteDS18B20( 0XCC ); _nop_();InitDS18B20();WriteDS18B20( 0XCC ); _nop_();/保存?zhèn)鞲衅靼l(fā)送數(shù)據(jù)高8位/保存?zhèn)鞲衅靼l(fā)送數(shù)據(jù)低8位/跳過 ROM/跳過 ROMWriteDS18B20( 0X44 );De

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

11、報if( FinT > LimT ) Warning = 1;elseWarning = 0; uchar ReadDS18B20()uchar ch;uchar q ;/讀DS18B20數(shù)據(jù)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 );/ 寫 DS18B20數(shù)據(jù)void W

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

13、= LimT;elseT = FinT;T = T % 10 + T / 10 * 16; Tube = T;RUN = Warning; BUZZER = !Warning | Int;Feng = !Warning;SET = !Status;II將2進制碼轉(zhuǎn)化為 BCD碼/ 數(shù)碼管顯示II 運行指示燈顯示II 蜂鳴器II 風(fēng)扇II 設(shè)置指示燈顯示Delay1ms( 20 );/* 鍵盤掃描 */*void KeyScan()NP1L = Key;NP1L = NP1L & 0X0F;NP1L = NP1L A OXOF;/ 讀取按鍵狀態(tài)if( NP1L != OP1L )swit

14、ch(NP1L)case 0X01: Status = 1; break;case 0X02:if( Status = 1) LimT+;LimT = LimT % 100;Delay1ms(255); else Error();break;/ 判斷按鍵/ 按鍵為“設(shè)置”/ 進入設(shè)置狀態(tài)/ 按鍵為“ +1 ”/ 判斷是否為設(shè)置狀態(tài)/ 警報溫度下限 +1/ 超過 99 清零case 0X04:if( Status = 1) LimT-; if( LimT < 0 )LimT = 0X63; Delay1ms(255); elseError();break;case 0X08: Status

15、 = 0; break;/ 按鍵為“ -1 ”/ 判斷是否為設(shè)置狀態(tài)/ 警報溫度下限 -1/ 低于 0 變?yōu)?99/ 按鍵為“確認”/ 返回測溫狀態(tài)default:/ 多鍵按下/ 出錯復(fù)位/ 重新初始化Error(); break;NP1L = 0X00;*/* 中斷服務(wù) */*void Int0( void ) interrupt 0 Int = 1;EX0 = 0;TMOD = 0X01;TH0 = 0X3C;TL0 = 0XB0;Count = 0X3C;ET0 = 1;TR0 = 1;/ 外部中斷標(biāo)志位置 1/ 關(guān)外部中斷 0 中斷允許/ 設(shè)置定時器 0 工作在模式 1/ 為 T0 賦

16、初值,令其定時 50ms/ 設(shè)置計數(shù)次數(shù)/ 開 T0 中斷允許/ 開 T0 中斷*void Timer0( void ) interrupt 1 if( Count = 0 )ET0 = 0;TR0 = 0;Int = 0; EX0 = 1;else/ 判斷定時計數(shù)是否結(jié)束/ 關(guān) T0 中斷允許/ 關(guān) T0 中斷/ 外部中斷標(biāo)志位置 0/ 開外部中斷 0 中斷允許/ 重新賦 T0 初值/ 定時計數(shù)減 1TL0 = 0XB0;TH0 = 0X3C; Count -; /* 延遲函數(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( uc

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論