51單片機(jī)和DS18B20的數(shù)字溫度計(jì)設(shè)計(jì)_第1頁(yè)
51單片機(jī)和DS18B20的數(shù)字溫度計(jì)設(shè)計(jì)_第2頁(yè)
51單片機(jī)和DS18B20的數(shù)字溫度計(jì)設(shè)計(jì)_第3頁(yè)
51單片機(jī)和DS18B20的數(shù)字溫度計(jì)設(shè)計(jì)_第4頁(yè)
51單片機(jī)和DS18B20的數(shù)字溫度計(jì)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

...wd......wd......wd...四川師范大學(xué)課程設(shè)計(jì)報(bào)告基于單片機(jī)的DS18B20數(shù)字溫度計(jì)設(shè)計(jì)學(xué)生姓名院系名稱物理與電子工程學(xué)院專業(yè)名稱電子信息工程班級(jí)學(xué)號(hào)指導(dǎo)教師完成時(shí)間基于單片機(jī)的DS18B20數(shù)字溫度計(jì)設(shè)計(jì)學(xué)生姓名:指導(dǎo)教師:內(nèi)容摘要:隨著現(xiàn)代信息化技術(shù)的飛速開(kāi)展和傳統(tǒng)工業(yè)改造的逐步實(shí)現(xiàn),能獨(dú)立工作的溫度檢測(cè)系統(tǒng)已廣泛應(yīng)用于各種不同的領(lǐng)域。本文介紹了一個(gè)基于STC89C52單片機(jī)和數(shù)字溫度傳感器DS18B20的測(cè)溫系統(tǒng),并用LED數(shù)碼管顯示溫度值,易于讀數(shù)。系統(tǒng)電路簡(jiǎn)單、操作簡(jiǎn)便,能任意設(shè)定報(bào)警溫度并可查詢最近的10個(gè)溫度值,系統(tǒng)具有可靠性高、成本低、功耗小等優(yōu)點(diǎn)。關(guān)鍵詞:?jiǎn)纹瑱C(jī)數(shù)字溫度傳感器溫度計(jì)目錄1引言42設(shè)計(jì)要求42.1基本要求42.2擴(kuò)展功能43總體方案設(shè)計(jì)43.1方案論證43.1.1方案一43.1.2方案二53.2總體設(shè)計(jì)框圖54硬件設(shè)計(jì)54.1單片機(jī)系統(tǒng)54.2數(shù)字溫度傳感器模塊64.2.1DS18B20性能64.2.2DS18B20外形及引腳說(shuō)明74.2.3DS18B20接線原理圖74.2.4DS18B20時(shí)序圖74.2.5數(shù)據(jù)處理94.3顯示電路104.4聲光報(bào)警電路104.5鍵盤(pán)輸入電路115軟件設(shè)計(jì)115.1主程序模塊115.2讀溫度值模塊125.3中斷模塊145.4溫度查詢模塊155.5溫度設(shè)定、報(bào)警模塊165.6數(shù)碼管驅(qū)動(dòng)模塊186源程序197總結(jié)26參考文獻(xiàn):281引言隨著人們生活水平的不斷提高,單片機(jī)控制無(wú)疑是人們追求的目標(biāo)之一,它所給人帶來(lái)的方便是不可否認(rèn)的,各種數(shù)字系統(tǒng)的應(yīng)用也使人們的生活更加舒適。數(shù)字化控制、智能控制為現(xiàn)代人的工作、生活、科研等方面帶來(lái)方便。其中數(shù)字溫度計(jì)就是一個(gè)典型的例子。 數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便、測(cè)溫范圍廣、測(cè)溫準(zhǔn)確、功能多樣話等優(yōu)點(diǎn)。其主要用于對(duì)測(cè)溫要求準(zhǔn)確度對(duì)比高的場(chǎng)所,或科研實(shí)驗(yàn)室使用,該設(shè)計(jì)使用STC89C52單片機(jī)作控制器,數(shù)字溫度傳感器DS18B20測(cè)量溫度,單片機(jī)承受傳感器輸出,經(jīng)處理用LED數(shù)碼管實(shí)現(xiàn)溫度值顯示。2設(shè)計(jì)要求2.1基本要求實(shí)現(xiàn)實(shí)時(shí)溫度顯示,測(cè)溫范圍0~500C,誤差2.2擴(kuò)展功能 溫度報(bào)警,能任意設(shè)定溫度范圍實(shí)現(xiàn)聲光報(bào)警;每隔10分鐘記錄一次溫度數(shù)據(jù),至少能查詢過(guò)去10個(gè)時(shí)刻的溫度情況。3總體方案設(shè)計(jì)3.1方案論證3.1.1方案一由于本設(shè)計(jì)是測(cè)溫電路,可以使用熱敏電阻之類的器件,將隨被測(cè)溫度變化的電壓或電流采樣,進(jìn)展A/D轉(zhuǎn)換后就可以用單片機(jī)進(jìn)展數(shù)據(jù)處理,實(shí)現(xiàn)溫度顯示。這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,增大了電路的復(fù)雜性,而且要做到高精度也對(duì)比困難。3.1.2方案二考慮到在單片機(jī)屬于數(shù)字系統(tǒng),容易想到數(shù)字溫度傳感器,可選用DS18B20數(shù)字溫度傳感器,此傳感器為單總線數(shù)字溫度傳感器,起體積小、構(gòu)成的系統(tǒng)構(gòu)造簡(jiǎn)單,它可直接將溫度轉(zhuǎn)化成串行數(shù)字信號(hào)給單片機(jī)處理,即可實(shí)現(xiàn)溫度顯示。另外DS18B20具有3引腳的小體積封裝,測(cè)溫范圍為-55~+125攝氏度,測(cè)溫分辨率可達(dá)0.0625攝氏度,其測(cè)量范圍與精度都能符合設(shè)計(jì)要求。 以上兩種方案相對(duì)比,第二種方案的電路、軟件設(shè)計(jì)更簡(jiǎn)單,此方案設(shè)計(jì)的系統(tǒng)在功耗、測(cè)量精度、范圍等方面都能很好地到達(dá)要求,故本設(shè)計(jì)采用方案二。3.2總體設(shè)計(jì)框圖本方案設(shè)計(jì)的系統(tǒng)由單片機(jī)系統(tǒng)、數(shù)字溫度傳感器、LED顯示模塊、按鍵控制模塊、溫度報(bào)警模塊組成,其總體架構(gòu)如以以下圖1。單片機(jī)報(bào)警電路顯示電路驅(qū)動(dòng)電路測(cè)溫電路按鍵輸入電路時(shí)鐘、復(fù)位電路單片機(jī)報(bào)警電路顯示電路驅(qū)動(dòng)電路測(cè)溫電路按鍵輸入電路時(shí)鐘、復(fù)位電路圖1系統(tǒng)總體方框圖4硬件設(shè)計(jì)4.1單片機(jī)系統(tǒng)本設(shè)計(jì)采用STC89C52單片機(jī)作為控制器,完成所有功能的控制,包括:DS18B20數(shù)字溫度傳感器的初始化和讀取溫度值LED數(shù)碼管顯示驅(qū)動(dòng)與控制按鍵識(shí)別和響應(yīng)控制溫度設(shè)置和報(bào)警溫度值的存儲(chǔ)和讀取單片機(jī)系統(tǒng)電路原理圖:圖2單片機(jī)系統(tǒng)原理圖4.2數(shù)字溫度傳感器模塊4.2.1DS18B20性能獨(dú)特的單線接口僅需一個(gè)端口引腳進(jìn)展通信簡(jiǎn)單的多點(diǎn)分布應(yīng)用無(wú)需外部器件可通過(guò)數(shù)據(jù)線供電零待機(jī)功耗測(cè)溫范圍-55~+125℃,以0.5℃遞增可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃溫度數(shù)字量轉(zhuǎn)換時(shí)間200ms,12位分辨率時(shí)最多在750ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費(fèi)品、溫度計(jì)和任何熱感測(cè)系統(tǒng)負(fù)壓特性:電源極性接反時(shí),傳感器不會(huì)因發(fā)熱而燒毀,但不能正常工作4.2.2DS18B20外形及引腳說(shuō)明圖3DS18B20外形及引腳GND:地DQ:?jiǎn)尉€運(yùn)用的數(shù)據(jù)輸入/輸出引腳VD:可選的電源引腳4.2.3DS18B20接線原理圖單總線通常要求接一個(gè)約4.7K左右的上拉電阻,這樣,當(dāng)總線空閑時(shí),其狀態(tài)為高電平。圖4DS18B20接線原理圖4.2.4DS18B20時(shí)序圖主機(jī)使用時(shí)間隙來(lái)讀寫(xiě)DS18B20的數(shù)據(jù)位和寫(xiě)命令字的位。初始化時(shí)序如以以下圖:圖5DS18B20初始化時(shí)序DS18B20讀寫(xiě)時(shí)序:圖6DS18B20讀寫(xiě)時(shí)序4.2.5數(shù)據(jù)處理高速暫存存儲(chǔ)器由9個(gè)字節(jié)組成,其分配如表5所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。單片機(jī)可通過(guò)單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。圖7字節(jié)分配下表為12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。例如+125℃的數(shù)字輸出為07D0H,實(shí)際溫度=07D0H*0.0625=2000*0.0625=125℃。例如-55℃的數(shù)字輸出為FC90H,那么應(yīng)先將11位數(shù)據(jù)位取反加1得370H〔符號(hào)位不變,也不作運(yùn)算〕, 實(shí)際溫度=370H*0.0625=880*0.0625=55℃可見(jiàn)其中低四位為小數(shù)位。圖8DS18B20溫度數(shù)據(jù)表4.3顯示電路LED數(shù)碼管顯示采用動(dòng)態(tài)掃描方式,能簡(jiǎn)化電路布線,節(jié)約單片機(jī)I/O端口。段碼和位碼由單片機(jī)P0送出,分別用74HC673N鎖存。圖9數(shù)碼管驅(qū)動(dòng)顯示電路4.4聲光報(bào)警電路當(dāng)溫度超過(guò)設(shè)定溫度值時(shí),實(shí)現(xiàn)聲光報(bào)警,蜂鳴器鳴叫、8個(gè)發(fā)光二極管點(diǎn)亮。蜂鳴器由單片機(jī)P2^3口控制,用三極管驅(qū)動(dòng),發(fā)光二極管接單片機(jī)P1口,由74HC673N鎖存。圖10聲光報(bào)警電路4.5鍵盤(pán)輸入電路四個(gè)鍵分別連接單片機(jī)P3^4、P3^5、P3^6、P3^7構(gòu)成獨(dú)立式鍵盤(pán),分別實(shí)現(xiàn)加、減、報(bào)警溫度設(shè)定功能鍵和溫度查詢功能鍵。圖11鍵盤(pán)輸入電路5軟件設(shè)計(jì)5.1主程序模塊 主程序需要調(diào)用3個(gè)子程序,分別為:實(shí)時(shí)溫度顯示子程序:驅(qū)動(dòng)數(shù)碼管把實(shí)時(shí)溫度值送出在LED數(shù)碼管顯示查詢記錄溫度值子程序:查詢過(guò)去存儲(chǔ)的溫度值,最多可查詢10個(gè)值溫度設(shè)定、報(bào)警子程序:設(shè)定報(bào)警溫度值,當(dāng)溫度超過(guò)該值時(shí)產(chǎn)生報(bào)警,即驅(qū)動(dòng)蜂鳴器鳴叫、8個(gè)發(fā)光二極管發(fā)光主程序流程圖:開(kāi)場(chǎng)開(kāi)場(chǎng)定時(shí)器初始化、啟動(dòng)定時(shí)器初始化、啟動(dòng)顯示實(shí)時(shí)溫度顯示實(shí)時(shí)溫度溫度設(shè)定、報(bào)警溫度設(shè)定、報(bào)警查詢記錄溫度值查詢記錄溫度值圖12主程序流程圖5.2讀溫度值模塊 讀溫度值模塊需要調(diào)用4個(gè)子程序,分別為:DS18B20初始化子程序:讓單片機(jī)知道DS18B20在總線上且已準(zhǔn)備好操作DS18B20寫(xiě)字節(jié)子程序:對(duì)DS18B20發(fā)出命令DS18B20讀字節(jié)子程序:讀取DS18B20存儲(chǔ)器的數(shù)據(jù)延時(shí)子程序:對(duì)DS18B20操作時(shí)的時(shí)序控制讀溫度值模塊流程圖:入口入口數(shù)據(jù)轉(zhuǎn)換處理讀取溫度值上下位跳過(guò)讀序列號(hào)DS18B20初始化延時(shí)啟動(dòng)溫度轉(zhuǎn)換跳過(guò)讀序列號(hào)DS18B20初始化數(shù)據(jù)轉(zhuǎn)換處理讀取溫度值上下位跳過(guò)讀序列號(hào)DS18B20初始化延時(shí)啟動(dòng)溫度轉(zhuǎn)換跳過(guò)讀序列號(hào)DS18B20初始化返回返回圖13讀溫度值子程序流程圖DS18B20初始化子程序流程圖:入口入口DQ為低電平延時(shí)15~60msDQ拉高電平延時(shí)>480msDQ復(fù)位0稍延時(shí)DQ置高電平DQ為低電平延時(shí)15~60msDQ拉高電平延時(shí)>480msDQ復(fù)位0稍延時(shí)DQ置高電平N返回Y返回圖14DS18B20初始化子程序流程圖DS18B20寫(xiě)字節(jié)和讀字節(jié)子程序流程圖:圖15DS18B20寫(xiě)字節(jié)子程序流程圖 圖16DS18B20讀字節(jié)子程序流程圖5.3中斷模塊中斷采用T0方式1,初始值定時(shí)為50ms。中斷模塊需調(diào)用兩個(gè)子程序:讀溫度值子程序:定時(shí)讀取溫度值,實(shí)時(shí)更新溫度值記錄溫度值子程序:定時(shí)記錄溫度值,供查詢使用把這兩個(gè)子程序放在中斷的原因是,不會(huì)因?yàn)檎{(diào)整報(bào)警溫度或查詢歷史溫度值而停頓更新溫度值和記錄溫度值。中斷模塊流程圖:1秒計(jì)數(shù)值加1定時(shí)器重置初值中斷入口1秒計(jì)數(shù)值加1定時(shí)器重置初值中斷入口讀溫度值Y讀溫度值中斷返回記錄溫度值N中斷返回記錄溫度值圖17中斷模塊流程圖5.4溫度查詢模塊溫度查詢模塊需要承受按鍵輸入,進(jìn)入查詢界面后,按加減鍵分別查詢上一個(gè)和下一個(gè)歷史溫度值,并驅(qū)動(dòng)數(shù)碼管顯示需要查詢的溫度值。 溫度查詢模塊流程圖如下:入口入口功能鍵按下功能鍵按下N確認(rèn)按下延時(shí)消抖Y確認(rèn)按下延時(shí)消抖N顯示溫度值與位次Y顯示溫度值與位次加鍵按下N加鍵按下確認(rèn)按下延時(shí)消抖Y確認(rèn)按下延時(shí)消抖查詢下一個(gè)值查詢下一個(gè)值Y減鍵按下N減鍵按下N查詢上一個(gè)值確認(rèn)按下延時(shí)消抖Y查詢上一個(gè)值確認(rèn)按下延時(shí)消抖Y退出功能鍵按下N退出功能鍵按下N返回Y返回圖18溫度查詢模塊流程圖5.5溫度設(shè)定、報(bào)警模塊此模塊跟溫度查詢模塊類似,需要承受按鍵輸入,進(jìn)入模塊界面后,按加減鍵分別上調(diào)和下調(diào)設(shè)定報(bào)警溫度值,當(dāng)實(shí)時(shí)溫度值超過(guò)設(shè)定值時(shí)驅(qū)動(dòng)蜂鳴器發(fā)聲,并點(diǎn)亮8位發(fā)光二極管,實(shí)現(xiàn)聲光報(bào)警。 溫度設(shè)定、報(bào)警模塊流程圖如下:入口延時(shí)消抖減鍵按下確認(rèn)按下延時(shí)消抖加鍵按下顯示設(shè)定溫度值確認(rèn)按下延時(shí)消抖功能鍵按下入口延時(shí)消抖減鍵按下確認(rèn)按下延時(shí)消抖加鍵按下顯示設(shè)定溫度值確認(rèn)按下延時(shí)消抖功能鍵按下NYNYNY上調(diào)設(shè)定值Y上調(diào)設(shè)定值NNY下調(diào)設(shè)定值確認(rèn)按下下調(diào)設(shè)定值確認(rèn)按下YN聲光報(bào)警溫度超出設(shè)定值Y聲光報(bào)警溫度超出設(shè)定值N取消報(bào)警取消報(bào)警判斷退出界面N判斷退出界面Y返回返回圖19溫度設(shè)定、報(bào)警模塊流程圖5.6數(shù)碼管驅(qū)動(dòng)模塊本設(shè)計(jì)數(shù)碼管通過(guò)鎖存器接單片機(jī)P0口,采用動(dòng)態(tài)掃描驅(qū)動(dòng)7段LED數(shù)碼管進(jìn)展顯示,需調(diào)用延時(shí)子程序以穩(wěn)定顯示。 模塊流程圖如下:P0清零關(guān)位選送位碼開(kāi)位選P0置高關(guān)段選入口P0清零關(guān)位選送位碼開(kāi)位選P0置高關(guān)段選入口開(kāi)段選開(kāi)段選延時(shí)關(guān)段選送段碼延時(shí)關(guān)段選送段碼返回返回圖20數(shù)碼管驅(qū)動(dòng)模塊流程圖6源程序#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint/*************************變量定義************************************/sbitDQ=P2^2;//ds18b20端口sbitbeep=P2^3;//蜂鳴器使能端sbitdula=P2^6;//數(shù)碼管段選使能sbitwela=P2^7;//數(shù)碼管位選使能sbitadd=P3^5;//加鍵sbitsub=P3^4;//減鍵sbitalarm=P3^6;//設(shè)定報(bào)警功能鍵sbitrecord=P3^7;//查詢溫度記錄功能鍵ucharcodetabled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0~9的七段數(shù)碼管段碼0x40,0x63,0x39};//-c的段碼ucharcodetablew[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//1~8個(gè)數(shù)碼管的位選碼ucharrecordtable[10];//存儲(chǔ)過(guò)去的十個(gè)溫度值uchartemperature;//溫度值ucharcountsec,recordnum,count;//計(jì)數(shù)變量uintcountmin;//計(jì)數(shù)變量ucharalanum=30;//報(bào)警溫度值,初始值為30攝氏度ucharz=65;//消抖延時(shí)函數(shù)入口參數(shù)/**********************函數(shù)聲明***************************************/voiddelay1(ucharMS);//動(dòng)態(tài)掃描延時(shí)子程序voiddelay(uchari);//DS18B20工作延時(shí)子程序 voidInit_DS18B20();//DS18B20初始化子程序voidWriteOneChar(unsignedchardat);//向DS18B20寫(xiě)一字節(jié)數(shù)據(jù)ucharReadOneChar(void);//向DS18B20讀一字節(jié)數(shù)據(jù)voidGetTemperature();//由DS18B20產(chǎn)生溫度值voidDisplay(ucharwei,ucharduan);//數(shù)碼管驅(qū)動(dòng)子程序voidAlarm();//溫度報(bào)警voidShowtemperature(uchartt);//溫度顯示voidKeeprecord();//記錄溫度值voidShowrecord();//顯示記錄的溫度值/*********************主函數(shù)*******************************************/voidmain(){ TMOD=0x01;//定時(shí)器初始化,定時(shí)器0方式1 TH0=(65536-50000)/256;//50ms TL0=(65536-50000)%256; EA=1;//開(kāi)中斷 ET0=1; TR0=1;//啟動(dòng)定時(shí)器 while(1) { Showtemperature(temperature);//顯示實(shí)時(shí)溫度 Alarm();//溫度設(shè)定、報(bào)警 Showrecord();//查詢溫度記錄值 }}/************************動(dòng)態(tài)掃描延時(shí)函數(shù)********************************/voiddelay1(ucharMS){ inti,j; for(i=80;i>0;i--) for(j=MS;j>0;j--);}/************************DS18B20工作延時(shí)函數(shù)*****************************/voiddelay(uchari){while(i--);}/*************************DS18B20初始化函數(shù)******************************/voidInit_DS18B20(void){ unsignedcharx=0; DQ=1;//DQ復(fù)位 delay(8);//稍做延時(shí) DQ=0;//單片機(jī)將DQ拉低 delay(80);//準(zhǔn)確延時(shí)大于480us DQ=1;//拉高總線 delay(10); x=DQ;//稍做延時(shí)后如果x=0那么初始化成功x=1那么初始化失敗 delay(5); while(!x) { x=DQ; }}/*************************讀一個(gè)字節(jié)**************************************/ucharReadOneChar(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);}/**************************寫(xiě)一個(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);}/*************************產(chǎn)生溫度值***************************************/voidGetTemperature(){ uchartempL,tempH;//分別為數(shù)據(jù)低位和高位 uinttemp; Init_DS18B20(); WriteOneChar(0xCC);//跳過(guò)讀序列號(hào)的操作 WriteOneChar(0x44);//啟動(dòng)溫度轉(zhuǎn)換 delay(200); Init_DS18B20(); WriteOneChar(0xCC);//跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE);//讀取溫度存放器等〔共可讀9個(gè)存放器〕前兩個(gè)就是溫度 tempL=ReadOneChar();//讀出溫度低位LSB tempH=ReadOneChar();//讀出溫度高位MSB temp=tempH*16+tempL/16;//tempL右移四位去掉小數(shù)位 temperature=temp&0xff;//測(cè)量0~50度,只取temp低八位}/**********************數(shù)碼管驅(qū)動(dòng)函數(shù)*************************************/voidDisplay(ucharwei,ucharduan){ dula=0; P0=0xff; wela=1; P0=tablew[wei]; wela=0; P0=0; dula=1; P0=tabled[duan]; dula=0; delay1(1);}/**********************溫度顯示函數(shù)**************************************/voidShowtemperature(uchartt){ Display(2,tt/10);//顯示溫度數(shù)值 Display(3,tt%10); Display(4,11);//顯示攝氏度單位 Display(5,12); }/********************溫度值設(shè)定、報(bào)警函數(shù)**********************************/voidAlarm(){ bitflag; if(alarm==0) { delay1(80); //延時(shí)消抖 if(alarm==0) { flag=1;//第一次按鍵進(jìn)入設(shè)置 } } while(flag) { if(add==0) { delay1(z);//延時(shí)消抖 if(add==0) { alanum++;//add鍵按下,上調(diào)設(shè)定值 if(alanum==51) { alanum=0;//最大值為50攝氏度,循環(huán)顯示 } } } if(sub==0) { delay1(z);//延時(shí)消抖 if(sub==0) { alanum--;//sub鍵按下,下調(diào)設(shè)定值 if(alanum==255) { alanum=50;//最小值為0攝氏度,循環(huán)顯示 } } } Showtemperature(alanum); Display(0,10);//選中數(shù)碼管的其他空閑位 Display(1,10);//區(qū)別于實(shí)時(shí)溫度顯示“〞 Display(6,10); Display(7,10); if(alarm==0) { delay1(80); //延時(shí)消抖 if(alarm==0) { flag=0;//第二次按鍵退出設(shè)置 } } if(temperature>alanum)//此處設(shè)置報(bào)警可以保證調(diào)整設(shè)定值時(shí)即可及時(shí)報(bào)警 { beep=0;//溫度大于設(shè)定值,聲光報(bào)警 P1=0; } else { beep=1;//溫度不大于設(shè)定值即不報(bào)警 P1=0xff; } } if(temperature>alanum)//此處設(shè)置報(bào)警即保證即使沒(méi)有進(jìn)入設(shè)置界面任然可以報(bào)警 { beep=0;//溫度大于設(shè)定值,聲光報(bào)警 P1=0; } else { beep=1;//溫度不大于設(shè)定值即不報(bào)警 P1=0xff; } }/***********************溫度記錄函數(shù)**************************************/voidKeeprecord(){ uchari=9; if(countmin==1200)//1分鐘 { countmin=0; count++; if(count==10)//10分鐘 { count=0; recordnum++;//記錄一次加一,最大記錄10個(gè)值 if(recordnum==10) { recordnum=10; } do { recordtable[i]=recordtable[i-1]; }while(--i); recordtable[0]=temperature;//最新值填入第一個(gè)位置 } } }/************************查詢記錄的溫度值*************************************/voidShowrecord(){ bitflag; uchara; if(record==0) { delay1(80); //延時(shí)消抖 if(record==0) { flag=1;//record第一次按鍵置位進(jìn)入標(biāo)志 } } while(flag)//進(jìn)入查詢 { Display(0,recordtable[a]/10);//顯示溫度數(shù)值 Display(1,recordtable[a]%10); Display(2,11);//顯示攝氏度單位 Display(3,12); Display(4,10);//數(shù)碼管第6、7位選中,溫度值與記錄數(shù)之間用--間隔 Display(5,10); Display(6,(a+1)/10);//顯示第幾個(gè)記錄值 Display(7,(a+1)%10); if(add==0) { delay1(z);//延時(shí)消抖 if(add==0)//add按下,查看下一個(gè)值 { if(recordnum==0) { a=0; } else { a++; if(a==recordnum)//循環(huán)顯示 { a=0; } } } } if(sub==0)//sub按下,查看上一個(gè)值 { delay1(z); if(sub==0) { if(recordnum==0) { a=0; } else { a--; if(a==255)//循環(huán)顯示 { a=rec

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論