




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
沈陽理工大學(xué)課程設(shè)計(jì)PAGEPAGE51系統(tǒng)設(shè)計(jì)的目的意義1.1目的體溫是生命活動(dòng)的一種表現(xiàn),是人體新陳代謝的一個(gè)重要生理參數(shù)。體溫既有生理學(xué)的意義,又有重要的臨床意義,是臨床診斷的一個(gè)重要指標(biāo)。因此體溫計(jì)在現(xiàn)在的生活中有極為重要的作用。傳統(tǒng)的水銀體溫計(jì)易破碎,存在水銀污染的可能,測量時(shí)間較長,不易讀數(shù),為此設(shè)計(jì)一種新型的體溫計(jì),它的測量精度與傳統(tǒng)的水銀體溫計(jì)相媲美的情況下,大大地縮短了測量時(shí)間且攜帶方便,對環(huán)境幾乎沒有污染。它以AT89C51單片機(jī)為核心,結(jié)合溫度傳感器,LED模塊等外部設(shè)備,在軟件的控制下,實(shí)現(xiàn)智能化的體溫測量,不但能夠精確測溫,而且能夠?qū)囟冗M(jìn)行邏輯判斷,并且通過LED顯示器將測量結(jié)果顯示出來。若溫度高于38攝氏度系統(tǒng)就會(huì)自動(dòng)報(bào)警,這就意味著所測得的溫度異于人體正常溫度,引起人們注意。本設(shè)計(jì)的創(chuàng)新點(diǎn)在于,不僅完成了電子體溫計(jì)的要求,而且還增加了一個(gè)報(bào)警裝置。當(dāng)測量者的體溫高于人體正常體溫時(shí),體溫計(jì)就會(huì)自動(dòng)報(bào)警,人性化設(shè)計(jì),為廣大客戶帶來方便。1.2國內(nèi)外進(jìn)展情況中國電子體溫計(jì)行業(yè)最早起源于1998年,以每年高于30%的速度發(fā)展至今經(jīng)歷了十多年時(shí)間。高達(dá)數(shù)倍甚至十多倍的利潤空間、較低的政策壁壘和技術(shù)壁壘吸引了眾多企業(yè)進(jìn)入該行業(yè)。目前國內(nèi)涌現(xiàn)了大小80多家電子體溫計(jì)品牌,既有“歐姆龍”、“嬰之侶”、“捷威”等行業(yè)領(lǐng)頭的外資品牌,也有“華辰”、“世佳”、“華安”、“康復(fù)”等迅速發(fā)展壯大的國內(nèi)品牌。今后試圖進(jìn)去該行業(yè)的生產(chǎn)廠家將達(dá)到50多家。由于行業(yè)逐步規(guī)范和新一輪電子體溫計(jì)產(chǎn)品消費(fèi)熱潮的興起,2009年以后,電子體溫計(jì)產(chǎn)品行業(yè)進(jìn)入了一個(gè)前所未有的高速發(fā)展時(shí)期,市場的快速發(fā)展孕育著巨大的商機(jī)。1.3設(shè)計(jì)思路本系統(tǒng)可以使用ISIS畫出原理圖,打開ISIS軟件,單擊命令窗口file——newdesign,創(chuàng)建一個(gè)default模板,保存名稱為“基于AT89C51單片機(jī)電子體溫計(jì)設(shè)計(jì).DSN”。執(zhí)行菜單命令library——pickdevice/symbol,添加所需元件。本程序中可以使用DS18B20溫度傳感器,上面有“+”“-”可以模擬外界溫度變化。芯片選取74LS137,74LS373。在原理圖編輯窗口中放置元件,再單擊工具箱中的“原件終端”圖標(biāo),在對象選擇中單擊POWER和GROUND放置電源和地。放置好元件后,布好線。左鍵雙擊各元件,設(shè)置好相應(yīng)參數(shù),完成電路設(shè)計(jì)。設(shè)計(jì)的軟件部分在Keil中完成,具體操作步驟在后面仿真步驟中有詳細(xì)介紹,在此就不一一列出。置值。溫度系數(shù)振蕩器用于產(chǎn)生減法計(jì)數(shù)脈沖信號(hào),其中低溫度系數(shù)振蕩器受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給減法計(jì)數(shù)器1;高溫度系數(shù)振蕩器受溫度的影響較大,隨溫度的變化,其振蕩頻率明顯改變,產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的輸入脈沖。減法計(jì)數(shù)器對脈沖信號(hào)進(jìn)行減法計(jì)數(shù)。溫度寄存器暫存溫度數(shù)值。在圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),從而完成溫度測量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器決定,每次測量前,首先將-55攝氏度多對應(yīng)的基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55攝氏度所對應(yīng)的一個(gè)基數(shù)值。減法計(jì)數(shù)器1對低溫度系數(shù)振蕩器產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1。之后,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)振蕩器產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán),直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器的值的累加。此時(shí),溫度寄存器中的數(shù)值即為所測溫度。斜率累加器不斷補(bǔ)償和修正測溫過程中的非線性,只要計(jì)數(shù)門未關(guān)閉就重復(fù)上述過程,直至溫度寄存器的值達(dá)到被測溫度值。由于DS18B20是單總線芯片,在系統(tǒng)中若有多個(gè)單總線芯片,每個(gè)芯片的信息交換則是分時(shí)完成的,均有嚴(yán)格的讀/寫時(shí)序要求。系統(tǒng)對DS18B20的操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲(chǔ)器操作命令→處理數(shù)據(jù)。2.2.4DS18B20的ROM命令(1)ReadROM命令代碼33H,允許主設(shè)備讀出DS18B20的64位二進(jìn)制ROM代碼。該命令只適用于總線上存在單只DS18B20。(2)MatchROM命令代碼55H,若主線上有多個(gè)從設(shè)備,使用該命令可以選中某一制定的DS18B20,即可與64位二進(jìn)制ROM代碼完全匹配的DS18B20才能響應(yīng)其操作。(3)SkipROM命令代碼CCH,在啟動(dòng)所有DS18B20轉(zhuǎn)換之前或系統(tǒng)只有一個(gè)DS18B20時(shí),該命令將允許主設(shè)備不提供64位二進(jìn)制ROM代碼就使用寄存器操作命令。(4)SearchROM命令代碼F0H,當(dāng)系統(tǒng)初次啟動(dòng)時(shí),主設(shè)備可能不知總線上有多少個(gè)從設(shè)備或者它們的ROM代碼,使用該命令可確定系統(tǒng)中的從設(shè)備個(gè)數(shù)及ROM代碼。(5)AlarmROM命令代碼ECH,該命令用于鑒別和定位系統(tǒng)中超出程序設(shè)定的報(bào)警溫度值。(6)WriteScratchpad命令代碼4EH,允許主設(shè)備向DS18B20的寄存器寫入兩個(gè)字節(jié)的數(shù)據(jù),其中第一個(gè)字節(jié)寫入TH中,第二個(gè)字節(jié)寫入TL中??梢栽谌魏螘r(shí)刻發(fā)出復(fù)位命令中止數(shù)據(jù)的寫入。(7)ReadScratchpad命令代碼BEH,允許主設(shè)備讀取暫存器中的內(nèi)容。從第一個(gè)字節(jié)開始,直到CRC讀完第九個(gè)字節(jié)。也可以在任何時(shí)刻發(fā)出復(fù)位命令中止數(shù)據(jù)的讀取操作。(8)CopyScratchpad命令代碼48H,將高溫觸發(fā)器TH和低溫觸發(fā)器TL中的字節(jié)復(fù)制到非易失性E2PROM。若主機(jī)在該命令之后又發(fā)出讀操作,而DS18B20又忙于將暫存器的內(nèi)容復(fù)制到E2PROM時(shí),DS18B20就會(huì)輸出一個(gè)“0”。若復(fù)制結(jié)束,則DS18B20輸出一個(gè)“1”。如果使用寄生電源,則主設(shè)備發(fā)出該命令后,立即發(fā)出強(qiáng)上拉并至少保持10ms以上的時(shí)間。(9)ConvertT命令代碼44H,啟動(dòng)一次溫度轉(zhuǎn)換。若主機(jī)在該命令之后又發(fā)出其他操作,而DS18B20又忙于溫度轉(zhuǎn)換,DS18B20就會(huì)輸出一個(gè)“0”。若轉(zhuǎn)換結(jié)束,則DS18B20輸出一個(gè)“1(10)RecallE2命令代碼B8H,將高溫觸發(fā)器TH和低溫觸發(fā)器TL中的字節(jié)從E2ROM中復(fù)制回到暫存器中。該操作是在DS18B20上電時(shí)自動(dòng)執(zhí)行,若執(zhí)行該命令后又發(fā)出讀操作,DS18B20會(huì)輸出溫度轉(zhuǎn)換忙標(biāo)志:0為忙,1完成。(11)ReadPowerSupply命令代碼B4H,主設(shè)備將該命令發(fā)給DS18B20后發(fā)出讀操作,DS18B20會(huì)返回它的電源使用模式:0為寄生電源,1為外部電源。2.374LS137基礎(chǔ)知識(shí)74LS137是一種3線—8線譯碼器/解調(diào)器,在三個(gè)地址輸入端都加有地址鎖存器。當(dāng)鎖存使能輸入是低電平時(shí),電路就具有譯碼器/解調(diào)器的功能。當(dāng)鎖存使能輸入從低電平轉(zhuǎn)換到高電平時(shí),選擇輸入A、B和C中的地址便存儲(chǔ)在鎖存器中。只要鎖存使能輸入保持高電平,則可不再考慮地址的變化。輸出使能控制控制著輸出狀態(tài),而不管選擇或鎖存使能狀態(tài)如何,除非一個(gè)輸出是高一個(gè)輸出是低,則所有輸出全是高。2.474LS373基礎(chǔ)知識(shí)引腳功能:(1)1D~8D:8位數(shù)據(jù)輸入端(2)OE:三態(tài)允許控制端(低電平有效)(3)LE:鎖存允許端(4)1Q~8Q:8位數(shù)據(jù)輸出鎖存端74LS373的輸出端D0~D7可直接與總線相連。當(dāng)三態(tài)允許控制端/OE為低電平時(shí),Q0~Q7為正常邏輯狀態(tài),可用來驅(qū)動(dòng)負(fù)載或總線。當(dāng)OE為高電平時(shí),Q0~Q7呈高阻態(tài),即不驅(qū)動(dòng)總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。當(dāng)鎖存器允許端LE為高電平時(shí),Q隨數(shù)據(jù)D而變;當(dāng)LE為低電平時(shí),D被鎖存在已建立的數(shù)據(jù)電平。LE端施密特觸發(fā)器的輸入滯后作用,使交流和直流噪聲抗擾度被改善400mv。2.5原理圖設(shè)計(jì)本設(shè)計(jì)以AT89C51單片機(jī)為核心,溫度傳感器給出相應(yīng)的溫度值,通過總線發(fā)送到芯片上,在LED顯示屏上顯示溫度傳感器上的溫度。當(dāng)溫度高于38攝氏度時(shí),在顯示出溫度的同時(shí),蜂鳴器發(fā)出警報(bào)聲。所需原件如表5.1所示。表2.2電子體溫計(jì)所用的元件單片機(jī)AT89C51瓷片電容CAP30PF麥克風(fēng)SOUNDER電解電容CAP-ELEC晶振CRYSTAL12MHz三極管2N2905電阻RES滑動(dòng)變阻器POT-LIN溫度傳感器DS18B20芯片74LS373芯片74LS137顯示屏7SEG-MPX4-CC原理圖如圖2.5所示圖2.5原理圖示意圖3軟件設(shè)計(jì)3.1流程圖設(shè)計(jì)通過對系統(tǒng)的分析,我們可以對本設(shè)計(jì)有個(gè)大體的了解。如想得到溫度,必須得先對DS18B20進(jìn)行初始化處理。啟動(dòng)定時(shí)器,設(shè)置延時(shí),并開中斷,判斷經(jīng)過多長時(shí)間。若是沒經(jīng)過1.112ms,要對其繼續(xù)判斷是否是第一次采集溫度,如果是的話那就返回繼續(xù)判斷經(jīng)過1.112ms;如果不是那就將上次采集的溫度返回判斷經(jīng)過1.112ms。以上判斷是采集溫度并判斷延時(shí)時(shí)間。如果經(jīng)過1.112ms,那么程序繼續(xù)執(zhí)行,關(guān)中斷并令TR0=0,采集剛才的溫度,保存并在LED顯示屏上顯示出來。此時(shí)再判斷如果溫度高于38攝氏度,那么蜂鳴器報(bào)警;如果低于這個(gè)溫度程序則不報(bào)警,等待下次測量或者結(jié)束測量。根據(jù)以上分析,我們可以畫出流程圖如圖6.1所示。開始開始Y是否第一次采集DS18B20溫度是否經(jīng)過1.112ms初始化Y是否第一次采集DS18B20溫度是否經(jīng)過1.112ms初始化跳過讀DS18B20啟動(dòng)定時(shí)器DS18B20啟動(dòng)定時(shí)器0延時(shí)1.112ms開中斷N結(jié)束Y關(guān)中斷并使TR0為0結(jié)束Y關(guān)中斷并使TR0為0顯示溫度值采集DS18B20溫度值并保存是否超過38度蜂鳴器報(bào)警顯示上次所采集的溫度NYN圖6.1流程圖示意圖圖6.1流程圖示意圖3.2源程序設(shè)計(jì)根據(jù)以上的分析,我們可以寫出程序如下:/****************************************************************//*顯示內(nèi)容:利用18B20單線溫度檢測的應(yīng)用程序然后在數(shù)碼管可以顯示XX.XC,C表示攝氏度*//****************************************************************/#include<reg51.h>#include<math.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint/****************************************************************//*定義端口*//****************************************************************/sbitseg1=P0^0;sbitseg2=P0^1;sbitseg3=P0^2;sbitDQ=P3^6;//DS18B20端口sbitbeep=P2^0;//警報(bào)sfrdataled=0x90;//顯示數(shù)據(jù)端口P1/****************************************************************//*全局變量*//****************************************************************/uinttemp;ucharflag_get,count,num,minute,second;ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段數(shù)碼管共陰ucharstr[6];/****************************************************************//*函數(shù)聲明*//****************************************************************/voiddelay1(ucharMS);unsignedintReadTemperature(void);voidInit_DS18B20(void);unsignedcharReadOneChar(void);voidWriteOneChar(unsignedchardat);voiddelay(unsignedinti);/****************************************************************//*主函數(shù)*//****************************************************************/voidmain(){unsignedcharTempH,TempL;TMOD|=0x01;//定時(shí)器設(shè)置TH0=0xef;TL0=0xf0;IE=0x82;TR0=1;P0=0x00;count=0;while(1){str[5]=0x39;//顯示C符號(hào)str[1]=tab[TempH/100];//百位溫度str[2]=tab[(TempH%100)/10];//十位溫度str[3]=tab[(TempH%100)%10]|0x80;//個(gè)位溫度,帶小數(shù)點(diǎn)str[4]=tab[TempL];if((TempH%100)/10==3&&(TempH%100)%10>=5&&TempL>0||(TempH%100)/10==3&&(TempH%100)%10<8){beep=1;}elsebeep=0;//溫度高于38攝氏度就報(bào)警if(flag_get==1)//定時(shí)讀取當(dāng)前溫度{temp=ReadTemperature();if(temp&0x8000){str[0]=0x40;//符號(hào)標(biāo)志temp=~temp;//取反加1temp+=1;}elsestr[0]=0;TempH=temp>>4;TempL=temp&0x0f;TempL=TempL*6/10;//小數(shù)近似處理flag_get=0;}}}/****************************************************************//*定時(shí)器中斷*//****************************************************************/voidtim(void)interrupt1using1//中斷,用于數(shù)碼管掃描和溫度檢測間隔{TH0=0xef;//定時(shí)器重裝值TL0=0xf0;num++;if(num==50){num=0;flag_get=1;//標(biāo)志位有效second++;if(second>=60){second=0;minute++;}}count++;if(count==1){P0=0;dataled=str[0];}//數(shù)碼管掃描if(count==2){P0=1;dataled=str[1];}if(count==3){P0=2;dataled=str[2];}if(count==4){P0=3;dataled=str[3];}if(count==5){P0=4;dataled=str[4];}if(count==6){P0=5;dataled=str[5];count=0;}}/****************************************************************//*延時(shí)函數(shù)*//****************************************************************/voiddelay(unsignedinti)//延時(shí)函數(shù){while(i--);}/****************************************************************//*初始化*//****************************************************************/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ復(fù)位delay(8);//稍作延時(shí)DQ=0;//單片機(jī)將DQ拉低delay(80);//大于480usDQ=1;//拉高總線delay(10);x=DQ;//稍作延時(shí)后,如果x=0,則初始化成功;如果x=1,則初始化失敗delay(5);}/****************************************************************//*讀一個(gè)字節(jié)*//****************************************************************/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號(hào)dat>>=1;DQ=1;//給脈沖信號(hào)if(DQ)dat|=0x80;delay(5);}return(dat);}/****************************************************************//*寫一個(gè)字節(jié)*//****************************************************************/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(5);}/****************************************************************//*讀取溫度*//****************************************************************/unsignedintReadTemperature(void){unsignedchara=0;unsignedintb=0;unsignedintt=0;Init_DS18B20();WriteOneChar(0xcc);//跳過讀序號(hào)列號(hào)的操作WriteOneChar(0x44);//啟動(dòng)溫度轉(zhuǎn)換delay(200);Init_DS18B20();WriteOneChar(0xcc);//跳過讀序號(hào)列號(hào)的操作WriteOneChar(0xbe);//讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度a=ReadOneChar();//低位b=ReadOneChar();//高位b<<=8;t=a+b;return(t);}4系統(tǒng)仿真調(diào)試4.1程序調(diào)試與運(yùn)行打開keil程序,執(zhí)行菜單命令project——newproject創(chuàng)建“基于AT89C51單片機(jī)電子體溫計(jì)設(shè)計(jì)”項(xiàng)目,并選擇單片機(jī)型號(hào)為AT89C51。執(zhí)行菜單命令file——new創(chuàng)建文件,輸入上述C程序,保存為“基于AT89C51單片機(jī)電子體溫計(jì)設(shè)計(jì).C”。在project欄的file管理窗口中右擊文件組,選擇“addfiletogroup‘sourcegroup1’”,將源程序添加到項(xiàng)目中。執(zhí)行菜單命令project——opinionsfortarget‘target1’,在彈出的對話框中選擇output選項(xiàng)卡,選中createhexfile。在debug選項(xiàng)卡中,選中use:proteusVSMsimulator。執(zhí)行菜單命令project——buildtarget,編譯源程序,如果編譯成功,則在outputwindow窗口中顯示沒有錯(cuò)誤,并創(chuàng)建了“基于AT89C51單片機(jī)電子體溫計(jì)設(shè)計(jì).HEX”文件。在已繪制好的原理圖proteusisis菜單欄中,執(zhí)行菜單命令debug——useremoted
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村公租房合同樣本
- ai生成合同樣本
- 光伏銷售簽約合同范例
- 2025年全國計(jì)算機(jī)等級(jí)考試二級(jí)C語言全真模擬試卷及答案(共五套)
- 倉庫責(zé)任合同標(biāo)準(zhǔn)文本
- 公寓露臺(tái)出租合同樣本
- 農(nóng)業(yè)開發(fā)合同標(biāo)準(zhǔn)文本
- 出售摩托配件合同樣本
- 不同疾病階段患者的心理護(hù)理
- 口才課世界杯課程
- 《社會(huì)工作實(shí)務(wù)》初級(jí)課件
- 高低壓開關(guān)柜培訓(xùn)資料課件
- 寄生蟲蟲卵專業(yè)知識(shí)講座課件
- tlc4000中文說明書在使用本產(chǎn)品前務(wù)必先仔細(xì)閱讀并按照相關(guān)要
- 輿論學(xué)教程PPT整本書課件完整版電子教案全套課件最全教學(xué)教程ppt(最新)
- 2022年水果種植基地項(xiàng)目可行性研究報(bào)告
- 管道單線圖繪制與管理軟件入門介紹-V
- 淺談小學(xué)音樂教學(xué)中的情境創(chuàng)設(shè)(學(xué)校競賽論文)
- 海馬CVT-VT2變速箱培訓(xùn)
- 第三章延伸孔型設(shè)計(jì)
- 普通高中課程設(shè)置及學(xué)時(shí)安排指導(dǎo)表
評(píng)論
0/150
提交評(píng)論