資料包:

傳感器課程設計報告 課 題: 家居分布式溫度監測報警系統
班 級: 自152 姓 名:
目錄 一、設計目的 二、總體設計 2.1設計方法 2.2 設計中所用器件介紹 三、硬件設計 3.1 原理圖電路 3.2復位電路 3.3時鐘電路 3.4 DS18B20傳感器電路 3.5顯示電路 四、系統軟件設計 4.1 系統設計的整體思想 4.2 系統總流程圖 4.3系統程序設計 五、 系統仿真 六、 調試過程 七、 總結
一、設計目的 設計一個家居分布式溫度監測報警系統,因此要求該系統必須有較好的實時溫度顯示以及溫度過高或過低的報警功能,以便能夠及時發現火災等安全隱患,保障人身安全和家庭財產。 二、總體設計 2.1設計方法 本次設計為了突出經濟、可靠、耐用的特點,決定采用以單片機系統設計代替常規模擬電路系統設計。本系統在硬件設計上采用STC89C51單片機和DS18B20數字溫度傳感器組成下行機硬件系統,具有即時溫度采集,可實現溫度自動記錄,分析,持續運行,使系統有良好的可靠性、擴展、人性化設計和較低的生產成本性能。 本系統的電路設計方框圖如圖1所示,它由三部分組成:①控制部分主芯片采用單片機89C51;②顯示部分采用ED數碼管以動態掃描方式實現溫度顯示;③溫度采集部分采用DS18B20溫度傳感器。 圖1(詳見附件) 2.2 設計中所用器件介紹 1.DS18B20溫度傳感器 (1)管腳圖如圖2,有以下幾點特點: ①獨特的單線總線接口方式:DS18B20與上位機連接時可通過一條傳輸線路實現雙向數據傳輸。 ②可通過數據線供電,供電電壓容許范圍大,為+3.0~+5.5V,也可選用外部+5V供電。 ③實際工作過程中,不需要添加外圍器件。 ④用戶可自行設定溫度報警上下限值,其值是非易失性的。 ⑤可測溫度范圍為-55~+125℃,測溫分辨率為0.5℃(-10℃—+85℃),2℃(-55~+125℃)。 ⑥負壓特性,電源反接時能夠自動保護DS18B20不會被燒毀,此時的芯片無法正常工作。 ⑦轉換速度快,效率高,可在93.75ms內完成9位溫度轉換。 ⑧可實現多點測溫,多個DS18B20溫度傳感器可并聯在唯一的三線上。 ⑨適用于各種微處理器和上位機系統。 ⑩內含64位的只讀存儲ROM,每片DS18B20出廠前就有唯一的產品序號。大型測溫系統,單線上可掛接多片DS18B20傳感器。 
圖2 1腳—GND:接地。 2腳—I/O:數據輸入/輸出端(即單線總線),屬于漏極開路輸出。外接上拉電阻后,常態下成高電平。 3腳—VCC:電源端,為可供選用的外部+5V電源端,不用時接地。 (2)DS18B20的工作原理 根據DS18B20的通訊協議,主機控制DS18B20完成溫度轉換必須經過三個步驟: (1) 每一次讀寫之前都必須要對DS18B20進行復位; (2) 復位成功后發送一條ROM指令; (3) 最后發送RAM指令,這樣才能對DS18B20進行預定的操作。 復位要求主CPU將數據線下拉500微秒,然后釋放,DS18B20收到信號后等待15~60微秒左右后發出60~240微秒的存在低脈沖,主CPU收到此信號表示復位成功。其工作時序包括初始化時序、寫時序和讀時序。 2.74LS245芯片 74LS245是常用的芯片,用來驅動led或者其他的設備,它是8路同相三態雙向總線收發器,可雙向傳輸數據。其引腳圖如圖3。 片選端/CE低電平有效,當DIR="0"時,信號由 B 向 A 傳輸;(接收)DIR="1",信號由 A 向 B 傳輸;(發送)當CE為高電平時,A、B均為高阻態。由于P2口始終輸出地址的高8位,接口時74LS245的三態控制端1G和2G接地,P2口與驅動器輸入線對應相連。P0口與74LS245輸入端相連,E端接地,保證數據線暢通。8051的/RD和/PSEN相與后接DIR,使得RD和PSEN有效時,74LS245輸入(P0.1←D1),其它時間處于輸出(P0.1→D1)。 
圖3 三、硬件設計 如下圖4所示,該圖主要由單片機控制電路、顯示電路、晶振電路、繼電器電路和復位電路組成。 
圖4 2.復位電路 電路圖如圖5 復位電路作用: 一是在給電路通電時馬上進行復位操作 二是在必要時可以由手動操作 三是根據程序或者電路運行的需要自動地進行。 
圖5 3.時鐘電路 電路圖如圖6 時鐘模塊主要起作用的是晶振,每個單片機系統里都有晶振,全稱叫晶體振蕩器,在單片機系統里晶振的作用非常大,它結合單片機內部的電路,產生單片機所必須的時鐘頻率,單片機的一切指令的執行都是建立在這個基礎上的,晶振的提供的時鐘頻率越高,單片機的運行速度也就越快。晶振用一種能把電能和機械能相互轉化的晶體,在共振的狀態下工作,以提供穩定,精確的單頻振蕩。 
圖6
4.DS18B20傳感器電路 該電路傳感器采用更穩定,測量更為準確的外部供電的方式VCC端口上接5V的電源,如圖7 圖7 5.顯示電路 顯示電路采用了7段共陰數碼管掃描電路,節約了單片機的輸出端口,便于程序的編寫,如圖8 圖8 四、系統軟件設計 4.1 系統設計的整體思想 一個應用系統要完成各項功能,首先必須有較完善的硬件作保證。同時還必須得到相應設計合理的軟件的支持,尤其是微機應用高速發展的今天,許多由硬件完成的工作,都可通過軟件編程而代替。甚至有些必須采用很復雜的硬件電路才能完成的工作,用軟件編程有時會變得很簡單,如數字濾波,信號處理等。因此充分利用其內部豐富的硬件資源和軟件資源,采用與S51系列單片機相對應的51匯編語言和結構化程序設計方法進行軟件編程。 程序設計語言有三種:機器語言、匯編語言和高級語言。機器語言是機器唯一能“懂”的語言,用匯編語言或高級語言編寫的程序(稱為 源程序)最終都必須翻譯成機器語言的程序(成為目標程序),計算機才能“看懂”,然后逐一執行。 高級語言是面向問題和計算過程的語言,它可通過于各種不同的計算機,用戶編程時不必仔細了解所用的計算機的具體性能與指令系統,而且語句的功能強,常常一個語句已相當于很多條計算機指令,于是用高級語言編制程序的速度比較快,也便于學習和交流,所以本系統采用C語言來編寫程序。 本裝置的軟件包括主程序、讀出溫度子程序、復位應答子程序、寫入子程序、以及有關DS18B20的程序(初始化子程序、寫程序和讀程序)等。 主程序的功能是:啟動DS18B20測量溫度,將測量值與給定值進行比較,若測得溫度小于設定值,置P1.5為低電平。當測得溫度大于設定值,則置P1.4為低電平。 4.2 系統總流程圖 如下圖9 圖9 系統總體流程圖(詳見附件)
4.3系統程序設計
如下圖,用開關來控制多個傳感器,先打開一個開關,若傳感器檢測到溫度為71.5顯示到數碼管上,因為大于所設定最高溫度70,揚聲器發出報警并且高溫指示燈亮。 如下圖,若傳感器檢測到溫度低于-20,將-24.50顯示到數碼管中,且揚聲器報警,低溫指示燈亮。
如下圖,傳感器檢測到溫度為28.5在所設溫度上下限之間,揚聲器不報警且指示燈不亮。
在keil5中對程序進行編譯,調試成功,調試結果如下圖 緊緊張張的傳感器課設就將要結束了,首先給我的感覺就是有好多東西都不懂。但這未必是一件壞事,越是不懂就說明我要學的東西很多,我的提升空間也就越大。 我利用自己課余時在自習室里學習單片機,查閱傳感器方面相關文獻,以此提升自己。當東西做不完時,我都有一種沖動,呆在自習教室晚上不回了。正是因為這種執著拼搏的精神使我收獲很多,多數天我都會感覺腦子里都是滿滿的,不管是懂得的收獲還是不懂得煩惱。 從剛開始的什么也不懂到現在的Proteus仿真、程序編寫、調試等一些東西基本上動能很好的掌握了,可以說這是一個巨大的進步,調試是一個復雜而漫長的過程,需要我不斷地去做。 有一次我程序也做出來了,但是在仿真上就是不行,結果總是不對,經過一上午的檢查調試,終于知道了是我在Proteus上的一根線接錯了,從這可以看出這是一個看似簡單而最容易出錯的過程,需要嚴謹的工作態度。 現在我的家居分布式溫度監控報警系統已經做出來了,當檢測到的環境溫度值大于最小上線溫度時,蜂鳴器會做頻率較低的報警;當環境溫度大于較大上線溫度值時,蜂鳴器會做頻率較高的報警。除此之外,它還可以用于倉庫、實驗室、機房等設備上,具有一定實用價值。 該系統的整體設計還是有很大的提升空間的,比如該系統只是報警這是不夠的,最終還是需要人去做出反應,我們可以讓它自動切斷電源,從而保護設備,這樣使其更具有自動化,從而會有更大的推廣應用范圍。
單片機源程序如下:
- #include <REG52.H>
- #include <INTRINS.H>
- #include <ds18b20.h>
- void delayms(unsigned char xms)
- {unsigned char i=200;while(--xms)while(--i);}
- unsigned char table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x40,0x00};
- unsigned char shu[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- //************數碼管掃描程序***********************************************************//
- void display(unsigned char z,x)
- {
- P2=0xfe;
- if(Tflag)P0=table[10];
- else P0=0x00;
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- P0=table[z/100];
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- P0=table[z%100/10];
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- P0=table[z%10]|0x80;
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- P0=table[x/10];
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- P0=table[x%10];
- delayms(2);
- P0=0x00;
- P2=_crol_(P2,1);
- }
- sbit SOUND=P3^7;
- void T_init()
- {
- TMOD = 0x11;
- TH1 = (65536-500)/256;
- TL1 = (65536-500)%256;
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
- EA = 1;
- ET1 = 1;
- TR1 = 0;
- ET0 = 1;
- TR0 = 1;
- }
- //主函數
- void main()
- {
- T_init();
- P2=0xff;
- delayms(250);
- while(1)
- {
- if((Tflag==1&tmpZ>=20)|(Tflag==0&tmpZ>=70))
- {
- TR1=1;
- if(tmpZ>=70)P1=0xef;
- else P1=0xdf;
- }
- else {P1=0xff;TR1=0;}
- display(tmpZ,tmpX); //動態顯示數碼
- }
- }
- void timeint(void) interrupt 3
- {
- TR1=0;
- TH1 = (65536-200)/256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載(word格式課設論文+仿真+源代碼):
http://m.raoushi.com/bbs/dpj-104141-1.html
|