基于51的溫度報警器設計(共29頁)_第1頁
基于51的溫度報警器設計(共29頁)_第2頁
基于51的溫度報警器設計(共29頁)_第3頁
基于51的溫度報警器設計(共29頁)_第4頁
基于51的溫度報警器設計(共29頁)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上 目 錄1 概述1.1 研究背景溫度作為一種最基本的環(huán)境參數,和人們的安全、生活,工農業(yè)生產有著緊密的聯系,因此在某些場合對溫度進行檢測,并且在溫度超過期待范圍后進行報警便顯得尤為重要,對能實現溫度檢測并報警的裝置的設計和研發(fā)也就有了特別的意義。單片機作為一種微控制器,由于具有體積小,質量輕,功耗低,價格便宜,可靠性高,功能強大等特點,已經進入人們生活,工業(yè)生產的各個領域,現在很難在某個領域看不到單片機的痕跡。在智能儀表領域,由于單片機的上述優(yōu)點,用單片機作為控制平臺,結合不同類型的傳感器,可以很容易地對溫度,濕度,流量等物理量進行檢測。針對在日常生活和工業(yè)生產中對溫

2、度進行檢測和監(jiān)控的需求,本課題以AT89C51單片機為核心設計了一種溫度報警器,它可以通過鍵盤對溫度進行上下限設置,用液晶進行溫度顯示,并且在超出溫度設定范圍后發(fā)聲報警。本設計也具有一定的擴展性,例如可以再加一個煙塵傳感器和光電傳感器,擴展為火災報警器。1.2 設計思想及基本功能本課題對溫度報警器進行設計時,在滿足溫度檢測和報警功能的基礎上,為了增加其應用的靈活性,采用了矩陣鍵盤電路,從而可以對溫度報警范圍進行設定,以適應對溫度有檢測需求的不同應用場合。為了增加人機交互性,采用了功耗低的字符型液晶顯示漢字和溫度。該溫度報警器具有以下基本功能:(1)手動設定溫度范圍:該功能使用戶可以根據不同場合

3、設定溫度報警范圍,增強了該設計的應用性。 (2)溫度采集:采用了數字溫度傳感器對現場溫度在-55到+125范圍內的應用場合進行溫度采集。(3)液晶顯示:通過常用的液晶模塊對當前溫度傳感器采集的溫度進行顯示。(4)蜂鳴器報警:當溫度傳感器采集的溫度不在設定范圍內時,使蜂鳴器發(fā)聲,進行報警。2 總體方案設計2.1 方案選取在用單片機作為控制核心進行儀器設計時,附加的外圍模塊選擇范圍是很寬的,在選用時要多加比較,從而做出最合理的設計。(1) 溫度采集模塊選擇方案一:非數字型溫度傳感器pt100,精度高,穩(wěn)定性好,測量范圍大;方案二:數字型溫度傳感器DS18B20,體積小,精度高,抗干擾能力強,硬件開

4、銷低;這兩個方案都是在對溫度進行檢測時經常使用的,考慮到DS18B20的精度和測溫范圍對本設計已經足夠,且在使用時不需要進行AD轉換,硬件電路簡單,所以本設計采用DS18B20作為溫度檢測模塊。(2) 顯示模塊選擇 方案一:三位數碼管顯示,數碼管是單片機設計中常見的顯示模塊,可以顯示0至9十個數字和小數點,價格便宜。方案二:字符型液晶模塊顯示,液晶模塊顯示清晰,功耗低,可以顯示數字,漢字,英文字符和某些特殊符號,人機交互性好??紤]到使用數碼管顯示要占用大量的IO口引腳,且沒有液晶顯示內容豐富,所以本溫度報警器采用液晶模塊顯示當前溫度。2.2 系統(tǒng)框圖系統(tǒng)框圖如圖2.1圖2.1 系統(tǒng)框圖2.3

5、總體方案設計本課題設計的溫度報警器是在滿足基本功能的基礎上,盡可能的簡化電路,增加人機交互性。在溫度傳感器選擇時,為了避免大量的硬件設計,增加成本,選擇了數字型溫度傳感器,從而不用在使用時進行AD轉換,附加復雜的信號調理電路;在液晶模塊選擇時,考慮到單片機IO口的利用率,舍棄了需占用大量IO口并行傳輸的1602,選擇了可以進行串行傳輸的12864;在報警方式選擇時,舍棄了液晶顯示閃爍報警,選擇了更能引起用戶注意的蜂鳴器發(fā)聲報警方式。3 硬件電路設計3.1 電源電路設計51單片機,溫度傳感器DS18B20,12864液晶模塊所需正常的工作電壓是5V,因此設計的電源應能夠提供5V直流電,圖3.1是

6、設計的電源電路圖。在該電源電路中使用了三端集成穩(wěn)壓芯片L M7805,可以輸出5V直流電壓。圖3.1 電源電路圖3.2 晶振電路電路中的晶振就是石英晶體震蕩器。石英晶體震蕩器具有非常好的頻率穩(wěn)定性和抗外界干擾的能力,所以,石英晶體震蕩器常用來產生基準頻率的。此外它還可以產生振蕩電流,向單片機發(fā)出時鐘信號。圖3.2是設計的單片機晶振電路。片內電路與片外器件構成一個時鐘產生電路,晶振頻率一般多在1.2MHz24MHz之間選取。C1、C2是反饋電容,其值在20pF100pF之間選取,一般為30pF左右。本電路選用的電容為33pF,晶振頻率為12MHz。時鐘周期為1us。 圖3.2 單片機晶振電路3.

7、3 復位電路復位電路的主要功能是使單片機進行初始化,在初始化的過程中需要在復位引腳上加大于2個機器周期的高電平。復位后的單片機地址初始化為0000H,然后單片機繼續(xù)從0000H單元開始執(zhí)行程序。單片機復位有上電復位和手動復位兩種方式,圖3.3所示的復位電路可以實現上電復位和手動復位兩種基本功能。圖3.3 復位電路圖3.4 矩陣鍵盤電路由于采用單個按鍵的方式會提高設計的復雜性,且占用IO口較多,本設計采用了4*4矩陣鍵盤,矩陣鍵盤的應用可以獲取16個鍵值,降低了設計難度,節(jié)約了單片機IO口,提高了單片機IO口的利用率。4*4矩陣鍵盤電路在本溫度報警器設計中起到的作用是設定報警溫度的上下限,它的四

8、條行線和四條列線占用了單片機的P1口,如圖3.4所示。其中S0至S9用于設定溫度值,S10按下則啟動設定溫度下限,S11按下則啟動設定溫度上限。 圖3.4 矩陣鍵盤電路圖3.5 溫度檢測電路溫度檢測電路采用的是單線數字型溫度傳感器DS18B20,其外形如圖3.5所示。DS18B20獨特的單總線接口使其僅通過一條數據線就可以完成數據傳輸。它的供電電壓在3V至5.5V之間,感溫范圍在-55攝氏度至+125攝氏度之間,9至12位可調分辨率。DS18B20有3條輸出引線,分別接電源,地,單片機引腳,由于在正常工作時,該傳感器需要約1mA的驅動電流,所以硬件電路需要在接電源和地的兩條引線之間接一個約5K

9、的電阻,硬件電路圖如圖3.6所示圖3.5 DS18B20實物圖 圖3.6 溫度檢測電路3.6 液晶顯示電路本課題設計的溫度報警器顯示模塊采用的是字符型液晶QC12864B,帶中文字庫的128X64 是一種具有4 位/8 位并行、2 線或3 線串行多種接口方式,內部含有國標一級、二級簡體 中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為12864, 內置8192 個16*16 點漢字,和128 個16*8 點ASCII 字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面??梢燥@示84行(即32個)1616 點 陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著

10、特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結構或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。本設計采用的是該液晶的串行方式,其串行方式引腳接法如表1所示,硬件電路圖如圖3.7所示。表1:QC12864B串行方式引腳接線圖管腳號名稱LEVEL功能1VSS0V電源地2VDD+5V電源正3Vo-對比度調整4CSH/L片選,高電平有效5SIDH/L串行數據輸入6CLKH/L串行同步時鐘,上升沿讀取SID數據15PSBLL:串行方式19AVDD背光源電壓+5V20KVSS背光源負端0V圖3.7 液晶顯示電路3.7 蜂鳴器報警電路當溫度超過設定

11、范圍時,采用蜂鳴器模塊電路報警,電路中跳線帽的作用是可以人為地接通或斷開該電路,電阻起到限流的作用。電路工作原理是當溫度超出溫度設定范圍時,通過程序編程給P0口第7個引腳賦為低電平,三極管導通,蜂鳴器發(fā)聲。 圖3.8 蜂鳴器報警電路4 系統(tǒng)軟件設計系統(tǒng)軟件設計主要包括鍵盤掃描子程序,溫度上下限設定子程序,延時子程序等幾部分構成。本章節(jié)系統(tǒng)的介紹了溫度報警器的主程序和各主要功能子程序的設計流程,具體的程序代碼見附錄2。4.1 主程序軟件設計主程序構成無限循環(huán),主要完成相關模塊初始化,溫度采集,設定溫度上下限,液晶顯示,溫度超出設定范圍時蜂鳴器報警等功能,主程序的流程圖如圖4.1所示。圖4.1 主

12、程序流程圖程序首先進行相關宏定義,定義變量和數組,編寫所需要的子函數,然后在主函數中調用液晶初始化子函數對液晶進行初始化,并在液晶第一行顯示溫度顯示四個漢字,調用溫度采集函數對當前溫度進行采集,調用溫度上下限設定子函數設定適合現場的溫度范圍,然后將采集到的溫度值同設定的溫度上下限進行比較。若在設定范圍內,則調用液晶顯示函數顯示當前溫度并返回到溫度采集子函數調用處;若不在設定范圍內,則調用液晶顯示函數顯示當前溫度,使蜂鳴器報警,程序返回溫度采集子函數調用處。4.2 鍵盤掃描程序設計圖4.2 鍵盤掃描程序流程圖 該鍵盤掃描程序采用行掃描的方式,從第一行掃描到第四行,首先將第一行設為低電平,其余行為

13、高電平,通過讀取P1口高四位電平情況判斷是否有鍵按下,若無鍵按下則掃描下一行,若有鍵按下,延時5ms消抖,再次判斷是否有鍵按下,若無鍵按下則掃描下一行,若有鍵按下則通過switch語句獲取相應鍵值,松手檢測后掃描下一行。4.3 溫度上下限設定子程序設計 圖4.3 溫度上下限設定子程序流程圖 該程序功能是設定溫度上下限,程序開始,調用鍵盤掃描函數獲取一個鍵值,通過第一個if語句判斷該鍵值是否為10,若是則通過for循環(huán)執(zhí)行三次依次獲取三個鍵值并賦給數組b ,從而計算出溫度下限l,然后再次調用鍵盤掃描函數通過第二個if語句進行所得鍵值是否為11的判斷;在第一個if語句判斷中若鍵值不為10,則通過第

14、二個if語句進行所得鍵值是否為11的判斷。在第二個if語句進行所得鍵值是否為11的判斷中,若鍵值為11,則通過for循環(huán)執(zhí)行三次依次獲取三個鍵值并賦給數組c ,從而計算出溫度上限h,然后程序結束;若不為11,則程序結束。4.4 延時子程序設計圖4.4 延時子程序流程圖由于單片機采用的是12MHZ晶振,則執(zhí)行一條空指令所用時間恰為1us,子函數中設定的參數x是空指令執(zhí)行次數,所以這是一個us級的軟件延時函數。5 系統(tǒng)調試由于實驗室的儀器較老,有些損壞,為了更好地調試,最終采用了自己買的51開發(fā)板。首先利用Keil軟件進行編程,反復調試無錯后生成了一個Hex文件,然后將程序燒錄進單片機里面,進行運

15、行。單片機運行后采集到當時室內溫度為11.6,如圖5.1,用矩陣鍵盤將溫度上下限設為1015,用手捏住溫度傳感器DS18B20一段時間,當傳感器采集到的溫度大于15時,如圖5.2,蜂鳴器成功報警,說明該單片機系統(tǒng)能夠很好地完成預期的功能。圖5.1 采集室內溫度顯示圖5.2 加熱后溫度顯示6總結經過一周多的努力,終于完成了單片機課程設計,我們小組的題目是基于89C51的溫度報警器設計,在經過大量的資料查閱后,我經過比較論證,進行了以AT89C51單片機為微控制器的溫度報警器設計。該設計圍繞單片機附加了矩陣鍵盤電路,可以對溫度上下限進行設定,增強了該設計的適應性;附加了溫度檢測模塊,液晶模塊,蜂鳴

16、器電路分別對溫度進行檢測和顯示,并在溫度超出設定值時發(fā)聲報警。由于基礎和時間有限,在設計過程中存在一些考慮不周的地方,例如在選擇顯示模塊時,只考慮到和數碼管相比,液晶具有顯示內容豐富,低功耗的特性,在價格上考慮較少,此外,由于程序較復雜,還存在一些可以簡化的地方??傊?,通過一個完整的課程設計,讓我對所學的單片機知識有了更加深刻的理解和掌握,了解了用C語言對單片機進行編程的方法,此外使我復習了protel畫電路圖,visio畫流程圖,從而為以后的畢業(yè)設計打下了堅實的基礎。參考文獻1 張迎新單片微型計算機原理、應用及接口技術(第2版)M北京:國防工業(yè)出版社,20042偉福LAB6000系列單片機仿

17、真實驗系統(tǒng)使用說明書3 閻石數字電路技術基礎(第五版)北京:高等教育出版社,2006 4 郭天祥. 新概念51單片機C語言教程.北京:電子工業(yè)出版社,2009附錄1 系統(tǒng)原理圖專心-專注-專業(yè)附錄2 程序清單#include #include /包含_nop_()的定義#define uint unsigned int /對無符號整型數據類型進行宏定義#define uchar unsigned char /對無符號字符型數據類型進行宏定義sbit P03=P03; /對P0口的相關引腳進行位定義sbit P04=P04;sbit P05=P05;sbit P06=P06;sbit P07=P

18、07;#define rs_1 P03=1 /宏定義 rs_1表示寄存數據#define rs_0 P03=0 /宏定義 rs_0表示寄存指令#define rw_1 P04=1 / 宏定義 rw_1表示讀操作#define rw_0 P04=0 / 宏定義 rw_0表示寫操作#define en_1 P05=1 / 宏定義 en_1 表示使能#define en_0 P05=0 / 宏定義 en_0 表示禁止#define DS_0 P06=0 / 設P0.6引腳為低電平#define DS_1 P06=1 /設P0.6引腳為高電平#define DS_H DS_1 /設P0.6引腳為輸入#

19、define DS_L DS_0 /設P0.6引腳為輸出uint TEMP_Result,te; / 定義整型變量uchar table=溫度顯示; / 定義無符號字符型數組uint i,a3,b3,c3,l=100,h=300 / 定義無符號整型變量和數組 uchar temp_low,temp_high,num; /定義無符號字符型變量uchar key,temp; void delay_us(uint x) /定義us級延時函數for(i=0;ix;i+)_nop_();uchar keyscan() /定義鍵盤掃描函數/* 掃描第一行 */P1=0xfe; /將第一行設為低電平,掃描第

20、一行temp=P1; /讀取P1口電平temp=temp&0xf0; /獲取列線電平狀態(tài)while(temp!=0xf0) /當有鍵按下時delay_us(5000); /延時5ms消抖temp=P1; /讀取P1口電平temp=temp&0xf0; /獲取列線電平狀態(tài)while(temp!=0xf0) /當有鍵按下時temp=P1; /讀取P1口電平switch(temp) /switch語句獲取鍵值case 0xee: key=1;/若P1口電平為0xee,則得到鍵值1 break;case 0xde: key=2;/若P1口電平為0xde,則得到鍵值2 break;case 0xbe:

21、key=3;/若P1口電平為0xbe,則得到鍵值3 break;case 0x7e: key=4;/若P1口電平為0x7e,則得到鍵值4 break;while(temp!=0xf0) /松手檢測temp=P1;temp=temp&0xf0;/* 掃描第二行 */P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay_us(5000);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp) case 0xed: key=5; break; case 0xdd: key=6; b

22、reak; case 0xbd: key=7; break; case 0x7d: key=8; break; while(temp!=0xf0) temp=P1;temp=temp&0xf0; /* 掃描第三行 */P1=0xfb;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay_us(5000);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case 0xeb: key=9; break;case 0xdb: key=0; break;case 0xbb: key=10; b

23、reak; case 0x7b: key=11; break; while(temp!=0xf0)temp=P1;temp=temp&0xf0; /* 掃描第四行 */P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay_us(5000);temp=P1;temp=temp&0xf0;while(temp!=0xf0) temp=P1;switch(temp)case 0xe7: key=12;break;case 0xd7: key=13; break;case 0xb7: key=14; break;case 0x77: key=15;

24、 break; while(temp!=0xf0)temp=P1;temp=temp&0xf0; return key;/將鍵值返回至鍵盤掃描函數調用處void area()/溫度上下限設定函數,程序設定溫度上下限最大范圍為00.0到99.9keyscan();/調用鍵盤掃描函數獲取鍵值if(key=10)/如果鍵值為10,開始設定溫度下限 for(i=0;i3;i+) keyscan(); bi=key; delay_us(5000); l=100*b0+10*b1+ b2;/b0為十位數值,b1為個位數值,b2為十分位數值 keyscan(); if(key=11)/如果鍵值為11,開始設

25、定溫度上限 for(i=0;i3;i+) keyscan(); ci=key; delay_us(5000); h=100*c0+10*c1+ c2; void Sendbyte(uchar dat)/串行發(fā)送數據子函數for(i=0;i8;i+) en_0; if(dat&0x80)/如果最高位數據被發(fā)送 rw_1; else rw_0; en_1; dat=dat1;/左移一位void write_com(uchar com)/寫指令子函數rs_1;Sendbyte(0xf8);Sendbyte(com&0xf0);/取高四位,數據分兩次傳送 /每字節(jié)的內容被送入兩個字節(jié) /高四位放在第一

26、個字節(jié)的高四位Sendbyte(com&0x0f)4);/低四位放在第二個字節(jié)的高四位rs_0;void write_date(uchar date)/寫數據子函數rs_1;Sendbyte(0xfa);Sendbyte(date&0xf0);Sendbyte(date&0x0f)4);rs_0;void lcd_init()/液晶初始化子函數write_com(0x01); /清除顯示屏幕 write_com(0x30); /基本指令集動作write_com(0x0c); /開顯示,無游標 write_com(0x06); /設定光標右移,整屏不移動write_com(0x02); /清DD

27、RAM位址歸位write_com(0x82); /將第一行顯示位置設為第3個漢字位for(num=0;num8;num+) /在第一行顯示漢字“溫度顯示”write_date(tablenum);void lcd_display() /lcd顯示函數write_com(0x92); /設定溫度值顯示的位置write_date(0x30+a0);/顯示溫度十位數值write_date(0x30+a1);/顯示溫度個位數值write_date(0x2e); /顯示小數點write_date(0x30+a2);/顯示溫度十分位數值write_date(0xA1); /*lcd顯示溫度值符號*/wri

28、te_date(0xE6);int DS18B20_init(void) int t; DS_H; delay_us(50); _nop_();/_nop_();是單周期指令,實現短時間延時 _nop_(); DS_L; DS_0; /主器件拉低 delay_us(500); /最少480us DS_H; /電阻上拉 delay_us(60); /等待1560us if(P06=0) t=1; /判斷存在脈沖,DS18B20是否拉低 else t=0; delay_us(480); /最小480us return(t); /若DS18B20復位,返回值t=1void DS18B20_w(uch

29、ar date) DS_L; /主器件拉低開始 DS_0;delay_us(3); /最少延時1us if(date) DS_H; /電阻上拉,寫1 else DS_L; /主器件拉低,寫0 DS_0; delay_us(80); /寫時隙必須至少持續(xù)60s DS_H; delay_us(60); /大于1us延時即可uchar DS18B20_r(void) char date;DS_L; /主器件拉低開始DS_0;delay_us(3); /延時大于1usDS_H; /IO口設為輸出,DS18B20拉低,則讀出0;電阻上拉拉高, delay_us(3); /延時小于15us if(P06=1) date=1; /判斷IO輸入狀態(tài) else date=0; delay_us(80); /延時大于45us DS_H; delay_us(60); return(date);void write_byte(unsigned char byte) for(i=0;i1; /byte

溫馨提示

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

評論

0/150

提交評論