單片機(jī)課程設(shè)計(jì)之溫控系統(tǒng)附源代碼資料_第1頁
單片機(jī)課程設(shè)計(jì)之溫控系統(tǒng)附源代碼資料_第2頁
單片機(jī)課程設(shè)計(jì)之溫控系統(tǒng)附源代碼資料_第3頁
單片機(jī)課程設(shè)計(jì)之溫控系統(tǒng)附源代碼資料_第4頁
單片機(jī)課程設(shè)計(jì)之溫控系統(tǒng)附源代碼資料_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

2、紹實(shí)驗(yàn)中采用的是89C52。該單片機(jī)是INTEL公司MCS-51系列單片機(jī)中基本的產(chǎn)品,它采用ATMEL公司可靠的CMOS工藝技術(shù)制造的高性能8位單片機(jī),屬于標(biāo)準(zhǔn)的MCS-51的HCMOS產(chǎn)品。它結(jié)合了CMOS的高速和高密度技術(shù)及CMOS的低功耗特征,它基于標(biāo)準(zhǔn)的MCS-51單片機(jī)體系結(jié)構(gòu)和指令系統(tǒng),屬于89C51增強(qiáng)型單片機(jī)版本。具有以下特點(diǎn):· 標(biāo)準(zhǔn)MCS-51內(nèi)核和指令系統(tǒng)· 片內(nèi)8kROM(可擴(kuò)充64kB外部存儲器)· 32個雙向I/O口· 256x8bit內(nèi)部RAM(可擴(kuò)充64kB外部存儲器)· 3個16位可編程定時/計(jì)數(shù)器·

3、; 時鐘頻率3.5-12/24/33MHz· 向上或向下定時計(jì)數(shù)器· 改進(jìn)型快速編程脈沖算法· 6個中斷源· 5.0V工作電壓· 全雙工串行通信口· 布爾處理器幀錯誤偵測· 4層優(yōu)先級中斷結(jié)構(gòu)自動地址識別· 兼容TTL和CMOS邏輯電平· 空閑和掉電節(jié)省模式· PDIP(40)和PLCC(44)封裝形式原理圖如下:2.溫度傳感器1.概述溫度傳感器采用的是由美國Dallas 半導(dǎo)體公司生產(chǎn)的數(shù)字化溫度傳感器DS1820 。它是是世界上第一片支持 "一線總線"接口的溫度傳感器,在

4、其內(nèi)部使用了在板(ON-B0ARD)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。2.特點(diǎn)(1) 適應(yīng)電壓范圍更寬,電壓范圍:3.05.5V,在寄生電源方式下可由數(shù)據(jù)線供電; (2) 獨(dú)特的單線接口方式,DS18B20 在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20 的雙向通訊; (3) DS18B20 支持多點(diǎn)組網(wǎng)功能,多個DS18B20 可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫; (4) DS18B20 在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi); (5) 溫范圍55125,在-10+85時精度為±0.

5、5; (6) 可編程的分辨率為912 位,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測溫; (7) 在9 位分辨率時最多在93.75ms 內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12 位分辨率時最多在750ms 內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快; (8) 測量結(jié)果直接輸出數(shù)字溫度信號,以"一線總線"串行傳送給CPU,同時可傳送CRC 校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯能力; (9) 負(fù)壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。 3.結(jié)構(gòu)組成DS18B20 內(nèi)部結(jié)構(gòu)主要由四部分組成:64 位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH 和TL

6、、配置寄存器。DS18B20 的管腳排列如右圖所示:DS18B20 引腳定義:(1) GND為電源地;(2) DQ為數(shù)字信號輸入/輸出端;(3)VDD 為外接供電電源輸入端(在寄生電源接線方式時接地)。原理圖如下:4.工作原理DS18B20 測溫原理如圖20所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計(jì)數(shù)器2 的脈沖輸入。計(jì)數(shù)器1 和溫度寄存器被預(yù)置在55所對應(yīng)的一個基數(shù)值。計(jì)數(shù)器1 對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1 的預(yù)置值減到0 時,溫度寄存器的值將加1,計(jì)數(shù)器1

7、的預(yù)置將重新被裝入,計(jì)數(shù)器1 重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2 計(jì)數(shù)到0 時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。低溫度系數(shù)晶振高溫度系數(shù)晶振計(jì)數(shù)器2斜率累加器計(jì)數(shù)器1預(yù)置比較預(yù)置=0=0溫度寄存器加1停止LSB置位/清除3.數(shù)碼管 數(shù)碼管的作用是顯示溫度數(shù)值。數(shù)碼管接法有共陰極接法和共陽極接法。二者接法的區(qū)別在于共電源與共地,相同字符編碼顯示正好相反,在本次設(shè)計(jì)中采用的是八段共陰極數(shù)碼管。使用數(shù)碼管時,要注意區(qū)分這兩種不同的接法。為了顯示數(shù)字或字符,必須對數(shù)字或字符進(jìn)行編碼。七段數(shù)碼管加上一個小數(shù)點(diǎn),共計(jì)8段,因此為LED顯示器提供

8、的編碼正好是一個字節(jié)。根據(jù)電路連接圖顯示16進(jìn)制數(shù)的編碼顯示于下圖。 數(shù)碼管的顯示方式有兩種,分別為動態(tài)顯示和靜態(tài)顯示。動態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應(yīng)略小于靜態(tài)顯示電路中的。 靜態(tài)顯示的特點(diǎn)是每個數(shù)碼管的段選必須接一個8位數(shù)據(jù)線來保持顯示的字形碼。當(dāng)送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。這種方法的優(yōu)點(diǎn)是占用C

9、PU時間少,顯示便于監(jiān)測和控制。缺點(diǎn)是硬件電路比較復(fù)雜,成本較高。根據(jù)實(shí)驗(yàn)要求,需要實(shí)時顯示當(dāng)前溫度值,所以采用的是動態(tài)顯示方式,這里需要用到鎖存器,鎖存器的作用是將單片機(jī)端口分時復(fù)用。這里采用的是74HC573。左邊接單片機(jī)數(shù)據(jù)輸出端,右邊接數(shù)碼管數(shù)據(jù)輸入端。LE為芯片使能端,高電平時選中該芯片工作。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。 實(shí)驗(yàn)中采用兩個74HC573,作用分別是負(fù)責(zé)數(shù)碼管的段選和位選,段選是選擇亮哪段,顯示什么字符。位選則是選擇哪一片數(shù)碼管亮。由于此溫度采集系統(tǒng)需要至少三個數(shù)碼管顯示溫度,必須要有位選。原理圖如下:5. 報(bào)警電路報(bào)警電路則采用蜂鳴器電路負(fù)責(zé)

10、報(bào)警。如右圖所示,當(dāng)外界溫度高于設(shè)定值時,F(xiàn)M置于高電平,三極管導(dǎo)通,蜂鳴器工作產(chǎn)生報(bào)警聲音。四程序設(shè)計(jì)1.溫度傳感器初始化程序void Init_Ds18b20(void) /DS18B20初始化DQ = 1; /DQ復(fù)位,不要也可行。delay(1); /稍做延時DQ = 0; /單片機(jī)拉低總線delay(250); /精確延時,維持至少480usDQ = 1; /釋放總線,即拉高了總線delay(100); /此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。2.溫度測量uint Get_Tmp() /獲取溫度get the temperaturefloat tt;uchar a,b;

11、Init_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0x44); /溫度轉(zhuǎn)換指令I(lǐng)nit_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0xbe); /讀暫存器指令a = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度LSBb = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度MSBtemp = b; /先把高八位有效數(shù)據(jù)賦于temptemp <<= 8; /把以上8位數(shù)據(jù)從temp低八位移到高八位tem

12、p = temp|a; /兩字節(jié)合成一個整型變量tt = temp*0.0625; /得到真實(shí)十進(jìn)制溫度值 /因?yàn)镈S18B20可以精確到0.0625度 /所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度temp = tt*10+0.5; /放大十倍 /這樣使小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字 /同時進(jìn)行一個四舍五入操作。return temp;3.數(shù)碼管顯示void Display(uint temp) /顯示程序uchar A1,A2,A3;A1 = temp/100; /百位A2 = temp%100/10; /十位A3 = temp%10; /個位dula = 0;P0 = tableA1;

13、/顯示百位dula = 1; /打開段選,對應(yīng)74573的鎖存位,高電平不鎖存dula = 0;wela = 0;P0 = 0xfe;wela = 1; /打開位選wela = 0;delay(0);dula = 0;P0 = table1A2; /顯示十位,使用的是有小數(shù)點(diǎn)的數(shù)組(因?yàn)閠emp值擴(kuò)大了10倍,雖然是十位,實(shí)際為個位)dula = 1;dula = 0;wela = 0;P0 = 0xfd;wela = 1;wela = 0;delay(0);P0 = tableA3; /顯示個位dula = 1;dula = 0;P0 = 0xfb;wela = 1;wela = 0;del

14、ay(0);4.溫度報(bào)警 if(temp>=almtemp) beepon();/若溫度大于almtemp設(shè)定值,啟動報(bào)警,否則關(guān)閉elsebeepoff();五.程序流程圖 六.實(shí)驗(yàn)調(diào)試本次實(shí)驗(yàn)已經(jīng)基本實(shí)現(xiàn)了溫度的實(shí)時顯示,精確于小數(shù)點(diǎn)后一位,并可以產(chǎn)生報(bào)警。實(shí)驗(yàn)效果如下:七實(shí)驗(yàn)總結(jié)通過本次實(shí)驗(yàn),讓我對80C52單片機(jī)有了更好的了解。對數(shù)碼管顯示,鎖存器溫度傳感器工作原理等有了更深的理解,能夠利用單片機(jī)完成溫度顯示報(bào)警系統(tǒng)的設(shè)計(jì)。附程序代碼:#include <reg52.h>#include <intrins.h>#define uchar unsigned

15、char#define uint unsigned int#define almtemp 200sbit DQ = P22; /數(shù)據(jù)口define interfacesbit dula = P26; /數(shù)碼管段選sbit wela = P27; /數(shù)碼管位選sbit beep=P23; /報(bào)警uint temp; /溫度值 variable of temperature/不帶小數(shù)點(diǎn)unsigned char code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;

16、/帶小數(shù)點(diǎn),共陰unsigned char code table1 = 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/*精確延時函數(shù)*/void delay(unsigned char i) while(-i); /*此延時函數(shù)針對的是12Mhz的晶振delay(0):延時518us 誤差:518-2*256=6delay(1):延時7us (原帖寫"5us"是錯的)delay(10):延時25us 誤差:25-20=5delay(20):延時45us 誤差:45-40=5delay(100):延時205us 誤差:2

17、05-200=5delay(200):延時405us 誤差:405-400=5*/*DS18B20*/void Init_Ds18b20(void) /DS18B20初始化send reset and initialization commandDQ = 1; /DQ復(fù)位,不要也可行。delay(1); /稍做延時DQ = 0; /單片機(jī)拉低總線delay(250); /精確延時,維持至少480usDQ = 1; /釋放總線,即拉高了總線delay(100); /此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。uchar Read_One_Byte() /讀取一個字節(jié)的數(shù)據(jù)read a b

18、yte date /讀數(shù)據(jù)時,數(shù)據(jù)以字節(jié)的最低有效位先從總線移出uchar i = 0;uchar dat = 0;for(i=8;i>0;i-) DQ = 0; /將總線拉低,要在1us之后釋放總線 /單片機(jī)要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會有效。 _nop_(); /至少維持了1us,表示讀時序開始 dat >>= 1; /讓從總線上讀到的位數(shù)據(jù),依次從高位移動到低位。 DQ = 1; /釋放總線,此后DS18B20會控制總線,把數(shù)據(jù)傳輸?shù)娇偩€上 delay(1); /延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內(nèi)的最后部分 if(DQ

19、) /控制器進(jìn)行采樣 dat |= 0x80; /若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進(jìn)行處理,保持為0 delay(10); /此延時不能少,確保讀時序的長度60us。return (dat);void Write_One_Byte(uchar dat)uchar i = 0;for(i=8;i>0;i-) DQ = 0; /拉低總線 _nop_(); /至少維持了1us,表示寫時序(包括寫0時序或?qū)?時序)開始 DQ = dat&0x01; /從字節(jié)的最低位開始傳輸 /指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi), /因?yàn)?5us后DS

20、18B20會對總線采樣。 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(0xcc); /忽略ROM指令Write_One_Byte(0x44); /溫度轉(zhuǎn)換指令I(lǐng)nit_Ds18b20(); /初始化Write_One_Byte(0xcc); /忽略ROM指令Write_One_Byte(0xbe); /讀暫存器指令a = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度LSBb = Read_One_Byte(); /讀取到的第一個字節(jié)為溫度MSBtemp = b; /先把高八位有效數(shù)據(jù)賦于temptemp <<= 8; /把以上8位數(shù)據(jù)從temp低八位移到高八位temp = temp|a; /兩字節(jié)合成一個整型變量tt = temp*0.0625; /得到真實(shí)十進(jìn)制溫度值 /因?yàn)镈S18B20可以精確到0.0625度 /

溫馨提示

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

最新文檔

評論

0/150

提交評論