單片機課程設計之溫控系統(附源代碼)_第1頁
單片機課程設計之溫控系統(附源代碼)_第2頁
單片機課程設計之溫控系統(附源代碼)_第3頁
單片機課程設計之溫控系統(附源代碼)_第4頁
單片機課程設計之溫控系統(附源代碼)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一、實驗任務與要求二、 總體設計三 、硬件模塊介紹1. 單片機模塊介紹2. 溫度傳感器3. 數碼管4. 報警電路四 程序設計1. 溫度傳感器初始化程序2. 溫度測量3. 數碼管顯示4.溫度報警5、 程序流程圖6、 實驗調試7、 實驗總結一、實驗任務與要求1. 利用用單片機完成溫度的測量并顯示2. 了解溫度傳感器的工作原理3. 了解鎖存器的工作原理4. 理解數碼管的顯示原理二、 總體設計利用單片機接收溫度傳感器傳過來的溫度值并經過數值處理以動態(tài)方式顯示于數碼管上,利用while函數循環(huán)檢測溫度值,當溫度值高于設定值時啟動報警電路,報警電路主要由蜂鳴器實現。三 、硬件模塊介紹1.單片機模塊介

2、紹實驗中采用的是89C52。該單片機是INTEL公司MCS-51系列單片機中基本的產品,它采用ATMEL公司可靠的CMOS工藝技術制造的高性能8位單片機,屬于標準的MCS-51的HCMOS產品。它結合了CMOS的高速和高密度技術及CMOS的低功耗特征,它基于標準的MCS-51單片機體系結構和指令系統,屬于89C51增強型單片機版本。具有以下特點: 標準MCS-51內核和指令系統 片內8kROM(可擴充64kB外部存儲器) 32個雙向I/O口 256x8bit內部RAM(可擴充64kB外部存儲器) 3個16位可編程定時/計數器 時鐘頻率3.5-12/24/33MHz 向上或向下定時計數器 改進型

3、快速編程脈沖算法 6個中斷源 5.0V工作電壓 全雙工串行通信口 布爾處理器幀錯誤偵測 4層優(yōu)先級中斷結構自動地址識別 兼容TTL和CMOS邏輯電平 空閑和掉電節(jié)省模式 PDIP(40)和PLCC(44)封裝形式原理圖如下:2.溫度傳感器1.概述溫度傳感器采用的是由美國Dallas 半導體公司生產的數字化溫度傳感器DS1820 。它是是世界上第一片支持 一線總線接口的溫度傳感器,在其內部使用了在板(ON-B0ARD)專利技術。全部傳感元件及轉換電路集成在形如一只三極管的集成電路內。2.特點(1) 適應電壓范圍更寬,電壓范圍:3.05.5V,在寄生電源方式下可由數據線供電; (2) 獨特的單線接

4、口方式,DS18B20 在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20 的雙向通訊; (3) DS18B20 支持多點組網功能,多個DS18B20 可以并聯在唯一的三線上,實現組網多點測溫; (4) DS18B20 在使用中不需要任何外圍元件,全部傳感元件及轉換電路集成在形如一只三極管的集成電路內; (5) 溫范圍55125,在-10+85時精度為0.5; (6) 可編程的分辨率為912 位,對應的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實現高精度測溫; (7) 在9 位分辨率時最多在93.75ms 內把溫度轉換為數字,12 位分辨率時最多在750ms

5、內把溫度值轉換為數字,速度更快; (8) 測量結果直接輸出數字溫度信號,以一線總線串行傳送給CPU,同時可傳送CRC 校驗碼,具有極強的抗干擾糾錯能力; (9) 負壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。 3.結構組成DS18B20 內部結構主要由四部分組成:64 位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH 和TL、配置寄存器。DS18B20 的管腳排列如右圖所示:DS18B20 引腳定義:(1) GND為電源地;(2) DQ為數字信號輸入/輸出端;(3)VDD 為外接供電電源輸入端(在寄生電源接線方式時接地)。原理圖如下:4.工作原理DS18B20 測溫原理如

6、圖20所示。圖中低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2 的脈沖輸入。計數器1 和溫度寄存器被預置在55所對應的一個基數值。計數器1 對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1 的預置值減到0 時,溫度寄存器的值將加1,計數器1 的預置將重新被裝入,計數器1 重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環(huán)直到計數器2 計數到0 時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。低溫度系數晶振高溫度系數晶振計數器2斜率累加器計數器1預置比較預置=0=0溫度

7、寄存器加1停止LSB置位/清除3.數碼管 數碼管的作用是顯示溫度數值。數碼管接法有共陰極接法和共陽極接法。二者接法的區(qū)別在于共電源與共地,相同字符編碼顯示正好相反,在本次設計中采用的是八段共陰極數碼管。使用數碼管時,要注意區(qū)分這兩種不同的接法。為了顯示數字或字符,必須對數字或字符進行編碼。七段數碼管加上一個小數點,共計8段,因此為LED顯示器提供的編碼正好是一個字節(jié)。根據電路連接圖顯示16進制數的編碼顯示于下圖。 數碼管的顯示方式有兩種,分別為動態(tài)顯示和靜態(tài)顯示。動態(tài)顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效。選亮數碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流

8、向各位數碼管送出字形碼和相應的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應略小于靜態(tài)顯示電路中的。 靜態(tài)顯示的特點是每個數碼管的段選必須接一個8位數據線來保持顯示的字形碼。當送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。這種方法的優(yōu)點是占用CPU時間少,顯示便于監(jiān)測和控制。缺點是硬件電路比較復雜,成本較高。根據實驗要求,需要實時顯示當前溫度值,所以采用的是動態(tài)顯示方式,這里需要用到鎖存器,鎖存器的作用是將單片機端口分時復用。這里采用的是74HC573。左邊接單片機數據輸出端,右邊接數碼管數

9、據輸入端。LE為芯片使能端,高電平時選中該芯片工作。當鎖存使能變低時,符合建立時間和保持時間的數據會被鎖存。 實驗中采用兩個74HC573,作用分別是負責數碼管的段選和位選,段選是選擇亮哪段,顯示什么字符。位選則是選擇哪一片數碼管亮。由于此溫度采集系統需要至少三個數碼管顯示溫度,必須要有位選。原理圖如下:5. 報警電路報警電路則采用蜂鳴器電路負責報警。如右圖所示,當外界溫度高于設定值時,FM置于高電平,三極管導通,蜂鳴器工作產生報警聲音。四程序設計1.溫度傳感器初始化程序void Init_Ds18b20(void) /DS18B20初始化DQ = 1; /DQ復位,不要也可行。delay(1

10、); /稍做延時DQ = 0; /單片機拉低總線delay(250); /精確延時,維持至少480usDQ = 1; /釋放總線,即拉高了總線delay(100); /此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。2.溫度測量uint Get_Tmp() /獲取溫度get the temperaturefloat tt;uchar a,b;Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0x44); /溫度轉換指令Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略RO

11、M指令Write_One_Byte(0xbe); /讀暫存器指令a = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度LSBb = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度MSBtemp = b; /先把高八位有效數據賦于temptemp =almtemp) beepon();/若溫度大于almtemp設定值,啟動報警,否則關閉elsebeepoff();五.程序流程圖 六.實驗調試本次實驗已經基本實現了溫度的實時顯示,精確于小數點后一位,并可以產生報警。實驗效果如下:七實驗總結通過本次實驗,讓我對80C52單片機有了更好的了解。對數碼管顯示,鎖存器溫度傳感器

12、工作原理等有了更深的理解,能夠利用單片機完成溫度顯示報警系統的設計。附程序代碼:#include #include #define uchar unsigned char#define uint unsigned int#define almtemp 200sbit DQ = P22; /數據口define interfacesbit dula = P26; /數碼管段選sbit wela = P27; /數碼管位選sbit beep=P23; /報警uint temp; /溫度值 variable of temperature/不帶小數點unsigned char code table =

13、0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/帶小數點,共陰unsigned char code table1 = 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/*精確延時函數*/void delay(unsigned char i) while(-i); /*此延時函數針對的是12Mhz的晶振delay(0):延時518us 誤差:518-2*256=6delay(1):延時7us (原帖寫5us是錯的)delay(10

14、):延時25us 誤差:25-20=5delay(20):延時45us 誤差:45-40=5delay(100):延時205us 誤差:205-200=5delay(200):延時405us 誤差:405-400=5*/*DS18B20*/void Init_Ds18b20(void) /DS18B20初始化send reset and initialization commandDQ = 1; /DQ復位,不要也可行。delay(1); /稍做延時DQ = 0; /單片機拉低總線delay(250); /精確延時,維持至少480usDQ = 1; /釋放總線,即拉高了總線delay(100)

15、; /此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。uchar Read_One_Byte() /讀取一個字節(jié)的數據read a byte date /讀數據時,數據以字節(jié)的最低有效位先從總線移出uchar i = 0;uchar dat = 0;for(i=8;i0;i-) DQ = 0; /將總線拉低,要在1us之后釋放總線 /單片機要在此下降沿后的15us內讀數據才會有效。 _nop_(); /至少維持了1us,表示讀時序開始 dat = 1; /讓從總線上讀到的位數據,依次從高位移動到低位。 DQ = 1; /釋放總線,此后DS18B20會控制總線,把數據傳輸到總線上 delay

16、(1); /延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內的最后部分 if(DQ) /控制器進行采樣 dat |= 0x80; /若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進行處理,保持為0 delay(10); /此延時不能少,確保讀時序的長度60us。return (dat);void Write_One_Byte(uchar dat)uchar i = 0;for(i=8;i0;i-) DQ = 0; /拉低總線 _nop_(); /至少維持了1us,表示寫時序(包括寫0時序或寫1時序)開始 DQ = dat&0x01; /從字節(jié)的最低位開始傳輸 /指令dat的最低位賦予給總線,必須在拉低總線后的15us內, /因為15us后DS18B20會對總線采樣。 delay(10); /必須讓寫時序持續(xù)至少60us DQ = 1; /寫完后,必須釋放總線, dat = 1; delay(1);uint Get_Tmp() /獲取溫度get the temperaturefloat tt;uchar a,b;Init_Ds18b20(); /初始化Write_One_Byte

溫馨提示

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

評論

0/150

提交評論