畢業論文設計基于單片機的溫度報警器設計_第1頁
畢業論文設計基于單片機的溫度報警器設計_第2頁
畢業論文設計基于單片機的溫度報警器設計_第3頁
畢業論文設計基于單片機的溫度報警器設計_第4頁
畢業論文設計基于單片機的溫度報警器設計_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、河北石油職業技術學院河北石油職業技術學院電子工程 系 電氣自動化專業 08 級畢業論文(設計)題目: 基于單片機的溫度報警器設計姓名:陳久瑞 學號: 指導教師(簽名):2011年 5月 23日基于單片機的溫度控制設計摘 要 本設計實現的是單片機溫度測量與控制系統,通過數碼管顯示所測量的溫度。系統采用18b20為溫度傳感器,通過單片機處理進行顯示,本文介紹了基于m16單片機的溫度實時測量與控制系統和顯示系統的設計,包括介紹了硬件結構原理,軟件設計流程及其程序實現。系統結構簡單、實用,提高了測量精度和效率 。可進行上限、下限溫度預設,分辨率為912位的溫度報警器設計,可通過高電平打開,低電平關閉,

2、在沒有負載的情況下,系統可進入休眠狀態。可以交替的顯示所設置的上、下限溫度。本設計制作方便,并通過c語言程序控制能夠精準的對所測量的環境進行溫度控制,實用性強。 關鍵字:m16 18b20 上、下限溫度控制 c語言 分辨率912目 錄1、 引言 41.2、設計內容及要求52單片機的相關資料72.1 單片機技術的背景情73、m16單片機概述 83.1 atmega16 單片機主要特征及基本結構 93.1.2、m16 的基本組成及引腳配置103.1.3、 m16的引腳基本功能 113.2外部晶體振蕩器接線圖 114、溫度傳感器18b20介紹 12 4.1溫度傳感器18b20的特性 13 4.2 溫

3、度傳感器18b20的基本組成13 4.3 溫度傳感器18b20的測溫操作 145.基于單片機溫度報警器設計 173.1 下位機軟件流程 183.2 硬件電路實 19總結 20致謝 21參考資料、附件 22引言 在農業生產中,溫室的溫度很難把握。往往超過或低于允許值,致使大批良種的報廢,耽誤農時,影響生產。日常生活中,經常要用到高功率電器,但是高功率電器的發熱量大,有時候可能引起火災。等等之類的情況,這就需要一個溫度報警器在環境溫度超過一定范圍時報警,來提醒使用者。經過試用和改進,溫度報警器可適用于變壓器超溫報警、環境溫度監測、配電柜溫度監測及風扇自動控制、機房、倉庫、魚塘、蔬菜大棚溫度監測及報

4、警等等。溫度控制器目前普遍采用的幾種方法:方案一:采用單總線的ds1820的溫度傳感器的控制儀。 方案二:采用集溫濕度傳感器于一體的sht11芯片為主要芯片的控制儀。 雖然sht11是瑞士sensiri-on公司生產的具有二線串行接口的單片全校準數字式新型相對濕度和溫度傳感器,可用來測量相對濕度、溫度和露點等參數,具有數字式輸出、免調試、免標定、免外圍電路及全互換的特點。但是本設計只對溫度控制,設計原理簡單,基于經濟效益的考慮此次選擇傳統的模擬式溫度度傳感器1.2 設計內容及要求 本溫度報警器為超溫報警,及高于選定的高溫或低于選定的低溫均預報警,也就是說溫度超過某個選定的溫度范圍則報警,溫度在

5、這個范圍內則不報警。mcu:m16 8mhz 內部rc震蕩。外觀如下圖所示:使用方法:打開電源開關然后按如下操作:1)下限設置: 按下“set”,進入溫度上限設置,數字閃爍,同時左第1位最上面顯示一橫,表示上限設置,按一次“”溫度值加0.1攝氏度,按一次“”,溫度值減小0.1攝氏度,設置好上限; 這時再按“set”一次,進入下限溫度設置,數字閃爍,同時左第1位最下面顯示一橫,表示是下限設置,按一次“”溫度值加0.1攝氏度,按一次,溫度值減小0.1攝氏度,設置好下限,再按一次“set”,退出上下限設置,并把設置好的上下限參數保存到eeprom中。 2)負載載控制開關控制: 有時不需要控制負載,就

6、是待機狀態,在工作狀態下,按下wait,下面的數碼管會關顯示,什么也不顯示,表示不控制負載,這時再按下wait,又回到工作狀態,設置狀態也保存eeprom中,交替顯示所設定的溫度上下限值。2、 單片機的相關資料2.1 單片機技術的背景狀況單片機是靠程序的,并且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,這是別的器件需要費很大力氣才能做到的,有些則是花大力氣也很難做到的。一個不是很復雜的功能要是用美國50年代開發的74系列,或者60年代的cd4000系列這些純硬件來搞定的話,電路一定是一塊大pcb板,但是如果要是用美國70年代成功投放市場的系列單片機,結果就會有天壤之別。

7、只因為單片機的通過你編寫的程序可以實現高智能,高效率,以及高可靠性。目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網絡通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能ic卡,民用豪華轎車的安全保障系統,錄象機、攝象機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫療器械了。 3、 m16單片機概述3.1 atmega16 單片機主要特征及基本結構3.1.1atmega16 的主要性能: 1、先進的、高性能的的8位cpu內核結構: 1)耗

8、先進的risc (精簡指令集計算機)結構; 2)高速度,低功耗的 新8 位中央處理器; 2、非易失性程序和數據存儲器: 3、豐富的核外功能資源電路:完善的串、并、及jtag(聯合測試行動組)接口。4、電壓范圍寬、功率消耗低、時鐘頻率靈活。 5、極高的性價比和適于高級語言開發;3.1.1、m16 的基本組成及引腳配置 m16的組成結構圖3.1.2、 m16的引腳基本功能1、vcc:數字電路電源(+5v)2、gnd:地(0v)3、端口a( pa7pa0) 端口a 為8 位雙向i/o 口,也是a/d 轉換器的模擬輸入端。具有可編程的內部上拉電阻。其輸出緩沖器可以輸出和吸收大電流。作為輸入使用時,若內

9、部上拉電阻使能,端口被外部電路拉低時將輸出電流。4、端口b(pb7.pb0) 為8位雙向i/o 口,具有可編程的內部上拉電阻。 作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時將輸出電流。5、端口c(pc7.pc0) 為8 位雙向i/o 口,具有可編程的內部上拉電阻。作為輸入使用時,若內部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復位過程中,即使系統時鐘還未起振,端口c 也處于高阻狀態。、6、端口d(pd7.pd0) 為8位雙向i/o 口,具有可編程的內部上拉電阻。作為輸入使用時,若內部上拉電阻使能,則端口被外部電路拉低時將輸出電流。7、reset: 復位輸入引腳。8、xtal1

10、: 反相振蕩放大器與片內時鐘操作電路的輸入端。 9、xtal2: 反相振蕩放大器的輸出端。10、avcc:端口a與a/d轉換器的電源。11、aref:a/d 的模擬基準電壓輸入引腳。atmega16所有的i/o端口及外圍設備都被放置于i/o專用空間。所有的i/o寄存器都可以通過in 與out指令來訪問,在32個通用工作寄存器和i/o 之間傳輸數據。地址為0x00 - 0x1f 的前32個i/o 寄存器還可用sbi 和cbi 指令直接進行位尋址,而sbis 和sbic 則用來檢查某一位的值。m16系統內可編程的flash程序存儲器:atmega16具有16k字節(8k字0000-1fff)的在線

11、編程flash,用于存放程序指令代碼。其結構具有兩個主要的存儲器空間:應用程序存儲空間和引導程序存儲空間。兩個空間通過對應鎖定位來選擇,引導區程序可用spm指令再應用修3.2外部晶體振蕩器接線圖- 40 -圖為晶體振蕩器連接圖 圖外部rc 配置4、溫度傳感器18b20介紹 4.1溫度傳感器18b20的特性ds18b20 可以程序設定 912 位分辨率可調,適用電壓為 3v5v,精度為0.5c。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設定,及用戶設定的報警溫度存儲在 eeprom 中,掉電后依然保存。ds18b20 的性能是新一代產品中最好的!性能價格比也非常出色!ds1822 與 ds1

12、8b20 軟件兼容,是 ds18b20 的簡化版本。省略了存儲用戶定義報警溫度、分辨率參數的 eeprom,精度降低為2c,適用于對性能要求不高,成本控制嚴格的應用,是經濟型產品。to-92、soic 及 csp 封裝可選,經濟型版本無 eeprom 合自己的經濟的測溫系統。繼“一線總線”的早期產品后,ds1820 開辟了溫度傳感器技術的新概念。ds18b20 和 ds1822 使電壓、 特性及封裝有更多的選擇,讓我們可以構建適合自己的經濟的測溫系統。4.2 溫度傳感器18b20的基本組成 說明 ds1820 數字溫度計以 9 位數字量的形式反映器件的溫度值。ds1820 通過一個單線接口發送

13、或接收信息,因此在中央微處理器和 ds1820 之間僅需一條連接線(加上 地線)。用于讀寫和溫度轉換的電源可以從數據線本身獲得,無需外部電源。因為每個 ds1820 都有一個獨特的片序列號,所以多只 ds1820 可以同時連在一根單線總線上,這樣就 可以把溫度傳感器放在許多不同的地方。這一特性在 hvac 環境控制、探測建筑物、儀器或機器的溫度以及 過程監測和控制等方面非常有用。引腳說明16 腳 ssop pr35 符號 說明9 1gnd接地82dq數據輸入/輸出腳。對單線操作:漏極開路73vdd可選的 vdd 引腳。ds1820s(16 腳 ssop):所有上表中沒提到的腳均接地概覽圖 1

14、的方框圖示出了 ds1820 的主要部件。ds1820 有三個主要數字部件:1)64 位激光 rom,2)溫度傳 感器,3)非易失性溫度報警觸發器 th 和 tl。器件用如下方式從單線通訊線上汲取能量:在信號線處于高 電平期間把能量儲存在內部電容里,在信號線處于低電平期間消耗電容上的電能工作,直到高電平到來再 給寄生電源(電容)充電。ds1820 也可用外部 5v 電源供電。4.3 溫度傳感器18b20的測溫操作ds1820 通過一種片上溫度測量技術來測量溫度。圖 4 示出了溫度測量電路的方框圖。ds1820 是這樣測溫的:用一個高溫度系數的振蕩器確定一個門周期,內部計數器在這個門周期內對一

15、個低溫度系數的振蕩器的脈沖進行計數來得到溫度值。計數器被預置到對應于-55的一個值。如果計數器 在門周期結束前到達 0,則溫度寄存器(同樣被預置到-55)的值增加,表明所測溫度大于-55。同時,計數器被復位到一個值,這個值由斜坡式累加器電路確定,斜坡式累加器電路用來補償感溫振 蕩器的拋物線特性。然后計數器又開始計數直到 0,如果門周期仍未結束,將重復這一過程。斜坡式累加器用來補償感溫振蕩器的非線性,以期在測溫時獲得比較高的分辨力。這是通過改變計數 器對溫度每增加一度所需計數的的值來實現的。因此,要想獲得所需的分辨力,必須同時知道在給定溫度 下計數器的值和每一度的計數值。ds1820 內部對此計

16、算的結果可提供 0.5的分辨力。溫度以 16bit 帶符號位擴展的二進制補碼形式讀 出,表 1 給出了溫度值和輸出數據的關系。數據通過單線接口以串行方式傳輸。ds1820 測溫范圍-55+125,以 0.5遞增。如用于華氏溫度,必須要用一個轉換因子查找表。 意 ds1820 內溫度表示值為 1/2lsb,如下所示 9bit 格式最高有效(符號)位被復制充滿存儲器中兩字節溫度寄存器的高 msb 位,由這種“符號位擴展”產生出了示于表 1 的 16bit 溫度讀數。可用下述方法獲得更高的分辨力。首先,讀取溫度值,將 0.5位(lsb)從讀取的值中截去,這個值 叫做 temp_read。然后讀取計數

17、器中剩余的值,這個值是門周期結束后保留下來的值(count_remain)。最 后,我們用到在這個溫度下每度的計數值(count_per_c)。用戶可以用下面的公式計算實際溫度值:tempeature=temp_read-0.25=(count_per_c-count_remain)/count_per_c5、基于單片機的溫度報警器設計開始讀取溫度值 并送顯示緩沖值讀取上下限值 否.初始化端口是寫、讀eeprom一個字節寫eeprom上下限設置數據讀按鍵,返回鍵值按鍵檢測和設置超上限關負載超下限開負載關負載程序流程圖5.1 硬件電路實現經分析本設計的電路原理圖如下圖所示:總 結由于采用高效的單

18、片機作為核心,使得此溫度控制器具有精度高,成本低,體積小,接口簡單等優點,還具有良好抗干擾能力,再加上優化程序,使得本系統具有很高的實用性。 在設計過程中由于時間和個人能力的限制,設計中存在一些需要改進和優化的地方。測量精度有待進一步提高,軟件設計也存在不合理之處。但通過此次設計對單片機有了進一步的認識,對于單片機的一些軟件的操作能力也明顯提高,通過此設計,本人受益頗豐。致 謝 在電子信息工程系學習期間,老師們特別是指導老師童欣老師給予了我熱心的關懷和諄諄教誨,在學習和生活方面都勉勵、指導我。三年來,通過學習專業知識和查閱大量的資料,我在理論方面有了很大的收獲。同時在導師的指導下我的實踐能力也

19、有了飛速的提高,積累了豐富的經驗,使自己在工作崗位上能迅速地將所學的知識和技能服務于社會,另外在我的論文完成的整個過程中,凝結了童欣老師的智慧和心血,童欣老師以他淵博的知識、豐富的經驗和嚴謹的治學態度指導我順利完成了論文。在此謹向童欣老師致以深深地謝意!衷心感謝各位任課老師對我學業上的教導和幫助。給我提供了良好的學習環境以及各方面無微不至的關懷,幫助我很好的完成了學業。同時,感謝學習期間給過我幫助的同學和同事。參考文獻:1 文生平.趙國平.江劍強 基于matlab的熔體溫度控制設計研究 2007(6)2 王寶庫 多功能檢測控制系統的設計 2006(4-1)3 趙亮.趙國銳 單片機c語言編程與實

20、例 20034 謝自美. 電子線路設計*實驗*測試m.華中科技大學出版社. 5 張友德等. 單片微型機原理、應用和實驗m.電子工業出版社. 6吳經國等.單片機應用技術m. 中國電力出版社. 7李群芳.單片機微型計算機與接口技術m.電子工業出版社. 8閹石.數字電子技術基礎m.高等教育出版社. 9 黃智偉.全國大學生電子設計競賽訓練教程m.電子工業出版社. 10 周立功.單片機實驗與實踐m.北京航空航天大學出版社. 附件:原程序:/*/溫度報警系統/mcu:m16 8mhz 內部rc震蕩/2010年12月10號/18腳控制繼電器負載,高電平打開,低電平關閉/腳蜂鳴器控制,長鳴為高溫報警,短鳴為低

21、溫報警/*/宏定義#include /包含型號頭文件#include /包含位操作頭文件#include /標準輸入輸出頭文件#include #define clr_dir_1wire ddrd&=bit(5)/見1為1 #define set_dir_1wire ddrd|=bit(5) /見0為0#define clr_op_1wire portd&=bit(5) #define set_op_1wire portd|=bit(5) #define check_ip_1wire (pind & 0x20) /檢測 #define duan1 0 / c /位掃描#define duan2

22、 1 / c#define duan3 2 / c#define duan4 3 / c#define duan5 4 / c#define duan6 5 / c#define duan7 6 / c#define duan8 7 / c#define key1 1/pb1/按鍵引腳#define key2 4/pb4#define key3 2/pd2#define key4 6/pd6#define keybit1 (pinb & (1key1)#define keybit2 (pinb & (1key2)#define keybit3 (pind & (1key3)#define ke

23、ybit4 (pind & (1關 保存eeprom-地址16 / 非0-開 volatile unsigned int tem; /*- 延時函數 系統時鐘:8m -*/ void delay_1us(void) /1us延時函數 asm(nop); void delay_nus(unsigned int n) /n us延時函數 for(;n0;n-) asm(nop); void delay_1ms(void) /1ms延時函數 unsigned int i; for (i=0;i1140;i+); void delay_nms(unsigned int n) /n ms延時函數 uns

24、igned int i=0; for (i=0;in;i+) delay_nus(1000); /初始化18b20void init_1820() set_dir_1wire; /設置pc2 為輸出 set_op_1wire; clr_op_1wire; delay_nus(580); /480us以上 set_op_1wire; clr_dir_1wire; delay_nus(25); /1560us while(check_ip_1wire); set_dir_1wire; set_op_1wire; delay_nus(140); /60240us /寫18b20 void write

25、_1820(unsigned char x) unsigned char m; for(m=0;m8;m+) clr_op_1wire; if(x&(1m) /寫數據了,先寫低位的! set_op_1wire; else clr_op_1wire; delay_nus(40); /1560us set_op_1wire; set_op_1wire; /讀18b20unsigned char read_1820() unsigned char temp,n,k; temp=0; for(n=0;n8;n+) clr_op_1wire; set_op_1wire; clr_dir_1wire; k

26、=(check_ip_1wire); /讀數據,從低位開始 if(k) temp|=(1n); else temp&=(1n); delay_nus(80); /60120us set_dir_1wire; return (temp); /讀取溫度值 并送顯示緩沖void gettemp() unsigned char temh,teml; unsigned int t; init_1820(); /復位18b20 write_1820(0xcc); / 發出轉換命令 write_1820(0x44); delay_nms(200); /不延時也好使,有時會出現死機現象 init_1820()

27、; write_1820(0xcc); /發出讀命令 write_1820(0xbe); teml=read_1820(); /讀數據 temh=read_1820(); t = temh; t = t 8; t = t + teml; t = t * 10 /16; tem = t; disp_buff3=t%10; t = t/10; disp_buff2=t%10; t = t/10; disp_buff1=t%10; /初始化端口void init_io(void) ddra = 0xff;ddrc = 0xff;ddrd |= 0x10;porta = 0xff;portc = 0x

28、ff;ddrb &= (1key1);/低電平ddrb &= (1key2);ddrd &= (1key3);ddrd &= (1key4);portb |= (1key1);/高電平portb |= (1key2);portd |= (1key3);portd |= (1key4);/timer0 initialize - prescale:256/ desired value: 2msec/ actual value: 2.000msec (0.0%)/定時器0初始化函數void timer0_init(void) cli(); /disable all interrupts tccr0

29、= 0x00; /stop tcnt0 = 0x83; /set count ocr0 = 0x7d; /set compare tccr0 = 0x04; /start timer timsk = 0x01; /timer interrupt sources sei(); /re-enable interrupts/定時器0中斷函數,大約2毫秒一次#pragma interrupt_handler timer0_ovf_isr:3void timer0_ovf_isr(void) /定時器中斷最常執行時間6us tcnt0 = 0xc0; /reload counter value lie

30、+; if(lie = 8) lie = 0; portc = 0x00; switch(lie) case 0: porta = madisp_buff5;portc &= 1duan1;break;case 1: if(disp_buff6 != 18) porta = madisp_buff6 & 0xdf;/如果該位不顯示,小數點也不必加 portc &= 1duan2; break;case 2: porta = madisp_buff7; portc &= 1duan3; break;case 3: porta = madisp_buff3; portc &= 1duan4; br

31、eak; case 4: porta = madisp_buff2 & 0xdf; portc &= 1duan5; break;case 5: porta = madisp_buff1; portc &= 1duan6; break;case 6: porta = madisp_buff0; portc &= 1duan7; break;case 7: porta = madisp_buff4; portc &= 1duan8; break; default:break; /寫eeprom一個字節void eeprom_write(unsigned int uiaddress, unsign

32、ed char ucdata) /* 等待上一次寫操作結束 */ while(eecr & (1eewe);/* 設置地址和數據寄存器*/ eear = uiaddress;eedr = ucdata;/* 置位eemwe */ eecr |= (1eemwe); /* 置位eewe 以啟動寫操作*/ eecr |= (1eewe);/讀eeprom一個字節unsigned char eeprom_read(unsigned int uiaddress) /* 等待上一次寫操作結束 */ while(eecr & (1eewe); /* 設置地址寄存器*/ eear = uiaddress;

33、/* 設置eere 以啟動讀操作*/ eecr |= (18); eeprom_write(10, i);i = (unsigned char)(h_off); eeprom_write(11, i);i = (unsigned char)(l_on8); eeprom_write(12, i);i = (unsigned char)(l_on); eeprom_write(13, i);/讀eeprom上下限設置數據void readhl(void) unsigned int i; i = eeprom_read(10); i = i8; i = i | eeprom_read(11); h_off = i; i = eeprom_read(12); i = i 25000) timedisp1 = 0; a = readkey();if (m = 0)&(a = 2) h_off +;

溫馨提示

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

評論

0/150

提交評論