基于51單片機(jī)數(shù)字溫度計設(shè)計課程設(shè)計51單片機(jī)畢業(yè)設(shè)計題目_第1頁
基于51單片機(jī)數(shù)字溫度計設(shè)計課程設(shè)計51單片機(jī)畢業(yè)設(shè)計題目_第2頁
基于51單片機(jī)數(shù)字溫度計設(shè)計課程設(shè)計51單片機(jī)畢業(yè)設(shè)計題目_第3頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第 PAGE30 頁 共 NUMPAGES30 頁基于51單片機(jī)數(shù)字溫度計設(shè)計課程設(shè)計51單片機(jī)畢業(yè)設(shè)計題目課 題: 基于51單片機(jī)數(shù)字溫度計設(shè)計 專 業(yè): 電子信息工程 班 級: 班 學(xué) 號: 姓 名: 指導(dǎo)教師: 設(shè)計日期: 成 績: XX大學(xué)XX學(xué)院電氣學(xué)院 基于51單片機(jī)數(shù)字溫度計設(shè)計 一、設(shè)計目的1、掌握單片機(jī)電路的設(shè)計原理、組裝與調(diào)試方法。 2、掌握LED數(shù)碼顯示電路的設(shè)計和使用方法。 3、掌握DS18B20溫度傳感器的工作原理及使用方法。 二、設(shè)計要求1、本次單片機(jī)課程設(shè)計要求以51系列單片機(jī)為核心,以開發(fā)板為平臺。 2、設(shè)計一個數(shù)字式溫度計,要求使用DS18B20溫度傳感器測量

2、溫度。 3、經(jīng)單片機(jī)處理后,要求用4位一體共陰LED數(shù)碼管來設(shè)計顯示電路,以顯示測量的溫度值。 4、另外還要求在設(shè)計中加入報警系統(tǒng),如果我們所設(shè)計的系統(tǒng)用來監(jiān)控某一設(shè)備,當(dāng)設(shè)備的溫度超過或低于我們所設(shè)定的溫度值時,系統(tǒng)會產(chǎn)生報警。 5、要求在設(shè)計中加入上下限警報溫度設(shè)置電路。 三、 設(shè)計的具體實現(xiàn) 1數(shù)字溫度計設(shè)計的方案 在做數(shù)字溫度計的單片機(jī)電路中,對信號的采集電路大多都是使用傳感器,這是非常容易實現(xiàn)的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計要求。采集之后,通過使用51系列的單片機(jī),可以對數(shù)據(jù)進(jìn)行相應(yīng)的處理,再由LED顯示電

3、路對其數(shù)據(jù)進(jìn)行顯示。 2系統(tǒng)設(shè)計框圖 溫度計電路設(shè)計總體設(shè)計方框圖如下圖所示,控制器采用單片機(jī)AT89C51,溫度傳感器采用DS18B20,用4位一體共陰LED數(shù)碼管以串口傳送數(shù)據(jù)實現(xiàn)溫度顯示。此外,還添加了報警系統(tǒng),對溫度實施監(jiān)控。 3主控器AT89C51芯片 對于單片機(jī)的選擇,可以考慮使用8031與8051系列,由于8031沒有內(nèi)部RAM,系統(tǒng)又需要大量內(nèi)存存儲數(shù)據(jù),因而不適用。AT89C51 以低價位單片機(jī)可為提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域,對于簡單的測溫系統(tǒng)已經(jīng)足夠。單片機(jī)AT89C51具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計需要該

4、器件是INTEL公司生產(chǎn)的MCS一5l系列單片機(jī)中的基礎(chǔ)產(chǎn)品,采用了可靠的CMOS工藝制造技術(shù),具有高性能的8位單片機(jī),屬于標(biāo)準(zhǔn)的MCS51的CMOS產(chǎn)品。 AT8951的管腳如下圖所示: AT89C51芯片管腳圖 4時鐘電路 80C51時鐘有兩種方式產(chǎn)生,即內(nèi)部方式和外部方式。80C51中有一個構(gòu)成內(nèi)部震蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。本次采用內(nèi)部震蕩電路,瓷片電容采用22PF,晶振為12MHZ。 晶體震蕩電路圖 5 復(fù)位電路 單片機(jī)系統(tǒng)的復(fù)位電路在這里采用的是上電+按鈕復(fù)位電路形式,其中電阻R采用10K的阻值 ,電容采用10F的電容值。 復(fù)

5、位電路 6 溫度傳感電路 DALLAS 最新單線數(shù)字溫度傳感器DS18B20是一種新型的“一線器件”,其體積更小、更適用于多種場合、且適用電壓更寬、更經(jīng)濟(jì)。DALLAS 半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。溫度測量范圍為-55+125 攝氏度,可編程為9位12 位轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625攝氏度,分辨率設(shè)定參數(shù)以及用戶設(shè)定的報警溫度存儲在EEPROM 中,掉電后依然保存。被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出。 DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器

6、。DS18B20的管腳排列、各種封裝形式,DQ 為數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當(dāng)被用著在寄生電下,也可以向器件提供電;GND為地信號;VDD為可選擇的VDD引腳。當(dāng)工作于寄生電時,此引腳必須接地,如下圖所示。 DS18B20管腳圖 7 顯示電路 對于數(shù)字溫度的顯示,我們采用4位一體共陰LED數(shù)碼管。足夠顯示0100中各位數(shù),并且還能顯示一位小數(shù)部分。 4位LED數(shù)碼顯示管 8 溫度報警電路 對于數(shù)字溫度計的設(shè)計,除了溫度的數(shù)字顯示功能外還加入了報警系統(tǒng),當(dāng)測量的溫度超過或低于我們所設(shè)定的溫度值時,系統(tǒng)會產(chǎn)生報警并亮紅燈報警。 其電路圖如下所示。 蜂鳴器紅燈報警系統(tǒng)電路圖 程序: /

7、* * 程序名; 基于51單片機(jī)的溫度計 * 功 能: 實時測量溫度,超過上下限報警,報警溫度可手動調(diào)整。K1是用來 * 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限 * 調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動 * 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除 * 按鍵音,再按一下啟動按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能, * K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。 */ _include _include/將intrins.h頭文件包含到主程序(調(diào)用其中的_nop_空操作函數(shù)延

8、時)_define uint unsigned int _define uchar unsigned char uchar max=0 x00,min=0 x00; /max是上限報警溫度,min是下限報警溫度 bit s=0; /s是調(diào)整上下限溫度時溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右 bit s1=0; /s1標(biāo)志位用于上下限查看時的顯示 void display1(uint z); _include“ds18b20.h“ _include“keyscan.h“ _include“display.h“ /*/ /* 主函數(shù) / /*/ void main beer=

9、1; /關(guān)閉蜂鳴器 led=1; /關(guān)閉LED燈 timer1_init(0); /初始化定時器1(未啟動定時器1)get_temperature(1); /首次啟動DS18B20獲取溫度(DS18B20上電后自動將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器)while(1) keyscan; get_temperature(0); display(temp,temp_d*0.625); alarm; /* * 程序名; ds18b20數(shù)碼管動態(tài)顯示頭文件 * 功 能: 通過定時器0延時是數(shù)碼管動態(tài)顯示 */ _ifndef _ds18b20_display_H_ _define _ds

10、18b20_display_H_ _define uint unsigned int /變量類型宏定義,用uint表示無符號整形(16位)_define uchar unsigned char /變量類型宏定義,用uchar表示無符號字符型(8位)sbit wei1=P24; /可位尋址變量定義,用wei1表示P2.4口 sbit wei2=P25; /用wei2表示P2.5口 sbit wei3=P26; /用wei3表示P2.6口 sbit wei4=P27; /用wei4表示P2.7口 uchar num=0; /定義num為全局無符號字符型變量,賦初值為0 uchar code tem

11、perature1= 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /定義顯示碼表09 uchar code temperature2= 0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef; /帶小數(shù)點(diǎn)的09. uchar code temperature3= 0 x00,0 x80,0 x40,0 x76,0 x38;/依次是不顯示.-HL /*/ / 延時子函數(shù) / /*/ void display_delay(uint t) /延時1ms左右 u

12、int i,j; for(i=t;i0;i-) for(j=120;j0;j-); /*/ /* 定時器1初始化函數(shù) / /*/ void timer1_init(bit t) TMOD=0 x10; TH0=0 x3c; TL0=0 xb0; EA=1; ET1=1; TR1=t; / 局部變量t為1啟動定時器1,為0關(guān)閉定時器1 /*/ /* 定時器1中斷函數(shù) / /*/ void timer1 interrupt 3 TH0=0 x3c; /重新賦初值,定時50ms TL0=0 xb0; num+; /每進(jìn)入一次定時器中斷num加1(每50ms加1一次)if(num20) /進(jìn)入20次中

13、斷,定時1s num=0; /num歸0,重新定開始定時1s s1=0; /定時1s時間到時自動關(guān)閉報警上下限顯示功能 v1=1; /定時1s時間到時自動關(guān)閉報警上下限查看功能 /*/ /* 調(diào)整報警上下限選擇函數(shù) / /*/ void selsct_1(uchar f,uchar k) /消除百位的0顯示,及正負(fù)溫度的顯示選擇 if(f=0) /若為正溫度,百位為0則不顯示百位,不為0則顯示 if(k/100=0) P0=temperature30; else P0=temperature1k/100; if(f=1) /若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示- if(k%100/

14、10=0) P0=temperature30; else P0=temperature32; void selsct_2(bit f,uchar k) /消除十位的0顯示,及正負(fù)溫度的顯示選擇 if(f=0) /若為正溫度,百位十位均為0則不顯示十位,否則顯示十位 if(k/100=0)&;&;(k%100/10=0) P0=temperature30; else P0=temperature1k%100/10; if(f=1) /若為負(fù)溫度,若十位為0,十位不顯示,否則十位顯示- if(k%100/10=0) P0=temperature32; else P0=temperature1k%1

15、00/10; /*/ /* 主函數(shù)顯示 / /*/ void display(uchar t,uchar t_d) /用于實測溫度、上限溫度的顯示 uchar i; for(i=0;i4;i+) /依次從左至右選通數(shù)碼管顯示,實現(xiàn)動態(tài)顯示 switch(i) case 0: /選通第一個數(shù)碼管 wei2=1; /關(guān)第二個數(shù)碼管 wei3=1; /關(guān)第三個數(shù)碼管 wei4=1; /關(guān)第四個數(shù)碼管 wei1=0; /開第一個數(shù)碼管 if(a=0)selsct_1(f,t); /若a=0則在第一個數(shù)碼管上顯示測量溫度的百位或- if(a=1) P0=temperature33; /若a=1則在第一個

16、數(shù)碼管上顯示H if(a=2) P0=temperature34; /若a=2則在第一個數(shù)碼管上顯示L break; case 1: /選通第二個數(shù)碼管 wei1=1; wei3=1; wei4=1; wei2=0; if(a=0)selsct_2(f,t); /若a=0則在第二個數(shù)碼管上顯示測量溫度的十位或- if(a=1) /若a=1則在第二個數(shù)碼管上顯示上限報警溫度的百位或- if(s=0) selsct_1(f_max,max);/若s=0則顯示第二個數(shù)碼管,否則不顯示 else P0=temperature30; /通過s標(biāo)志位的變化實現(xiàn)調(diào)節(jié)上下限報警溫度時數(shù)碼管的閃爍 if(s1=

17、1) selsct_1(f_max,max);/若s1=1則顯示第二個數(shù)碼管(s1標(biāo)志位用于上下限查看時的顯示) if(a=2) /若a=2則在第二個數(shù)碼管上顯示下限報警溫度的百位或- if(s=0) selsct_1(f_min,min); else P0=temperature30; if(s1=1) selsct_1(f_min,min); break; case 2: /選通第三個數(shù)碼管 wei1=1; wei2=1; wei4=1; wei3=0; if(a=0)P0=temperature2t%10;/若a=0則在第三個數(shù)碼管上顯示測量溫度的個位 if(a=1) /若a=1則在第三

18、個數(shù)碼管上顯示上限報警溫度的十位或- if(s=0) selsct_2(f_max,max);/若s=0則顯示第三個數(shù)碼管,否則不顯示 else P0=temperature30; if(s1=1) selsct_2(f_max,max);/若s1=1則顯示第三個數(shù)碼管 if(a=2) /若a=2則在第三個數(shù)碼管上顯示下限報警溫度的十位或- if(s=0) selsct_2(f_min,min); else P0=temperature30; if(s1=1) selsct_2(f_min,min); break; case 3: /選通第四個數(shù)碼管 wei1=1; wei2=1; wei3=

19、1; wei4=0; if(a=0)P0=temperature1t_d;/若a=0則在第四個數(shù)碼管上顯示測量溫度的小數(shù)位 if(a=1) /若a=1則在第四個數(shù)碼管上顯示上限報警溫度的個位 if(s=0) P0=temperature1max%10;/若s=0則顯示第四個數(shù)碼管,否則不顯示 else P0=temperature30; if(s1=1) P0=temperature1max%10;/若s1=1則顯示第四個數(shù)碼管 if(a=2) /若a=2則在第四個數(shù)碼管上顯示下限報警溫度的個位 if(s=0) P0=temperature1min%10; else P0=temperatur

20、e30; if(s1=1) P0=temperature1min%10; break; display_delay(10); /每個數(shù)碼管顯示3ms左右 /*/ /* 開機(jī)顯示函數(shù) / /*/ void display1(uint z) /用于開機(jī)動畫的顯示 uchar i,j; bit f=0; for(i=0;iz;i+) /z是顯示遍數(shù)的設(shè)定 for(j=0;j0;i-) for(j=120;j0;j-); /*/ /* DS18B20初始化函數(shù) / /*/ void ds18b20_init uchar c=0; DQ=1; DQ=0; /控制器向DS18B20發(fā)低電平脈沖 ds18b

21、20_delayus(80); /延時15-80s DQ=1; /控制器拉高總線, while(DQ); /等待DS18B20拉低總線,在60-240s之間 ds18b20_delayus(150); /延時,等待上拉電阻拉高總線 DQ=1; /拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸; /*/ /* DS18B20字節(jié)讀函數(shù) / /*/ uchar ds18b20_read uchar i; uchar d=0; DQ = 1; /準(zhǔn)備讀; for(i=8;i0;i-) d = 1; /低位先發(fā); DQ = 0; _nop_; _nop_; DQ = 1; /必須寫1,否則讀出來的將是不預(yù)期的數(shù)據(jù); if(

22、DQ) /在12us處讀取數(shù)據(jù); d |= 0 x80; ds18b20_delayus(10); return d; /返回讀取的值 /*/ /* DS18B20字節(jié)寫函數(shù) / /*/ void ds18b20_write(uchar d) uchar i; for(i=8;i0;i-) DQ=0; DQ=d&;0 x01; ds18b20_delayus(5); DQ=1; d = 1; /*/ /* 獲取溫度函數(shù) / /*/ void get_temperature(bit flag) uchar a=0,b=0,c=0,d=0; uint i; ds18b20_init; ds18b2

23、0_write(0 xcc); /向DS18B20發(fā)跳過讀ROM命令 ds18b20_write(0 x44); /寫啟動DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(flag=1) display1(1); /用開機(jī)動畫耗時 else ds18b20_delayms(1); ds18b20_init; ds18b20_write(0 xcc); ds18b20_write(0 xbe); a=ds18b20_read; /讀內(nèi)部RAM (LSB)b=ds18b20_read; /讀內(nèi)部RAM (MSB)if(flag=1) /局部位變量f=1時讀上下線報警溫度 max=ds1

24、8b20_read; /讀內(nèi)部RAM (TH)min=ds18b20_read; /讀內(nèi)部RAM (Tl) if(max&;0 x80)=0 x80) /若讀取的上限溫度的最高位(符號位)為1表明是負(fù)溫度 f_max=1;max=(max-0 x80); /將上限溫度符號標(biāo)志位置1表示負(fù)溫度,將上限溫度裝換成無符號數(shù)。 if(min&;0 x80)=0 x80)/若讀取的下限溫度的最高位(符號位)為1表明是負(fù)溫度 f_min=1;min=(min-0 x80); /將下限溫度符號標(biāo)志位置1表示負(fù)溫度,將下限溫度裝換成無符號數(shù)。 i=b; i=4; if (i=0) f=0; /i為0,正溫度,

25、設(shè)立正溫度標(biāo)記 temp=(a4)|(b4)|(b4); /整數(shù)部分 a=(a&;0 x0f); /小數(shù)部分 temp_d=a; /*/ /* 存儲極限溫度函數(shù) / /*/ void store_t if(f_max=1) /若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù) max=max+0 x80; if(f_min=1) /若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù) min=min+0 x80; ds18b20_init; ds18b20_write(0 xcc); ds18b20_write(0 x4e); /向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?和3(TH和TL)命令 ds18b20_write(

26、max); /向暫存器TH(上限溫度暫存器)寫溫度 ds18b20_write(min); /向暫存器TL(下限溫度暫存器)寫溫度 ds18b20_write(0 xff); /向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init; ds18b20_write(0 xcc); ds18b20_write(0 x48); /向DS18B20發(fā)將RAM中2、3字節(jié)的內(nèi)容寫入EEPROM /DS18B20上電后會自動將EEPROM中的上下限溫度拷貝到TH、TL暫存器 /*/ /* 溫度超限報警函數(shù) / /*/ void alarm /若上限值是正值 if(f_max=0) if(f_m

27、in=0) /若下限值是正值 if(f=0) /若測量值是正值 if(temp=max) w=1;TR1=1; /當(dāng)測量值小于最小值或大于最大值時報警 if(tempmin) w=0; /當(dāng)測量值大于最小值且小于最大值時不報警 if(f=1)w=1;TR1=1; /若測量值是負(fù)值時報警 if(f_min=1) /若下限值是負(fù)值 if(f=0) /若測量值是正值 if(temp=max)/當(dāng)測量值大于最大值時報警 w=1;TR1=1; if(temp=min)/當(dāng)測量值大于最小值時報警 w=1;TR1=1; if(tempmin)/當(dāng)測量值小于最小值時不報警 w=0; if(f_max=1) /

28、若下限值是負(fù)值 if(f_min=1) /若下限值是負(fù)值 if(f=1) /若測量值是負(fù)值 if(temp=min) w=1;TR1=1; /當(dāng)測量值小于最大值或大于最小值時報警 if(tempmax) w=0; /當(dāng)測量值小于最小值且大于最大值時不報警 if(f=0)w=1;TR1=1; /若測量值是正值時報警 _endif /* * 程序名; 基于51單片機(jī)的溫度計 * 功 能: 實時測量溫度,超過上下限報警,報警溫度可手動調(diào)整。K1是用來 * 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限 * 調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動

29、 * 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動退出;按一下K4消除 * 按鍵音,再按一下啟動按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實現(xiàn)加1功能, * K1是實現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。 */ _include _include /將intrins.h頭文件包含到主程序(調(diào)用其中的_nop_空操作函數(shù)延時)_define uint unsigned int _define uchar unsigned char uchar max=0 x00,min=0 x00; /max是上限報警溫度,min是下限報警溫度 bit s=0; /s是調(diào)整上下限溫度時溫度閃爍的標(biāo)志

30、位,s=0不顯示200ms,s=1顯示1s左右 bit s1=0; /s1標(biāo)志位用于上下限查看時的顯示 void display1(uint z); /聲明display1()函數(shù)(display.h頭文件中的函數(shù),ds18b20.h要用應(yīng)先聲明)_include“ds18b20.h“ _include“keyscan.h“ _include“display.h“ /*/ /* 主函數(shù) / /*/ void main beer=1; /關(guān)閉蜂鳴器 led=1; /關(guān)閉LED燈 timer1_init(0); /初始化定時器1(未啟動定時器1)get_temperature(1); /首次啟動D

31、S18B20獲取溫度(DS18B20上電后自動將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器)while(1) keyscan; get_temperature(0); display(temp,temp_d*0.625); alarm; /* * 程序名; ds18b20keyscan函數(shù) * 功 能: 通過鍵盤設(shè)定設(shè)定上下限報警溫度 */ _ifndef _keyscan_H_ /定義頭文件 _define _keyscan_H_ sbit key1=P22; sbit key2=P21; sbit key3=P20; sbit key4=P33; uchar i=0; /定義全局變量

32、i用于不同功能模式的選擇,0正常模式,1上限調(diào)節(jié)模式,2下限調(diào)節(jié)模式 uchar a=0; /定義全局變量a用于不同模式下數(shù)碼管顯示的選擇 bit k4=0; /K4按鍵雙功能選擇位,k4=0時K4按鍵選擇消按鍵音的功能,k4=1時K4按鍵選擇正負(fù)溫度設(shè)定功能 bit v=0; /K2、K3按鍵雙功能選擇位,v=0時選擇上下限查看功能,v=1時選擇上下限溫度加減功能 bit v1=0; /v1=1時定時1250ms時間到自動關(guān)閉報警上下限查看功能 bit v2=0; /消按鍵音功能調(diào)整位,為0時開按鍵音,為1時關(guān)按鍵音 /*/ /* 讀鍵盤延時子函數(shù) / /*/ void keyscan_de

33、lay(uint z) /延時1ms左右 uint i,j; for(i=z;i0;i-) for(j=120;j0;j-); /*/ /* 溫度調(diào)節(jié)函數(shù) / /*/ int temp_change(int count,bit f) /上下限溫度調(diào)整 if(key2=0) /判斷K2是否按下 if(v2=0)beer=0; /v2=0開按鍵音,否則消按鍵音 keyscan_delay(10); /延時10ms if(key2=0) /再次判斷K2是否按下(實現(xiàn)按按鍵時消抖) beer=1; /K2按下關(guān)按鍵音 if(f=0) /若溫度為正 count+; /每按一下K2溫度上調(diào)1 if(a=1

34、)if(count125) count=125;/當(dāng)溫度值大于125時不上調(diào) if(a=2)if(count125) count=125; if(f!=0) /若溫度為負(fù) count+; /每按一下K2溫度下調(diào)1 if(a=1)if(count55) count=55;/當(dāng)溫度值小于-55時不再下調(diào) if(a=2)if(count55) count=55; while(key2=0); /K2松開按鍵時消抖 keyscan_delay(10); if(key3=0) if(v2=0)beer=0; keyscan_delay(10); if(key3=0) /K3按按鍵時消抖 beer=1;

35、count-; /每按一下K3溫度為正時下調(diào)1,為負(fù)時上調(diào)1 if(a=1)if(count0) count=0;/當(dāng)溫度值達(dá)到0時不再調(diào) if(a=2)if(count2) /K1按下三次后退出調(diào)節(jié)模式 i=0; /進(jìn)入正常模式 TR1=0; /關(guān)定時器1 k4=0; /在正常模式下選擇K4的消按鍵音功能 v=0; /在正常模式下選擇K2、K3的查看上下限報警溫度功能 store_t; /存儲調(diào)整后的上下限報警溫度 switch(i) /顯示選擇 case 0:a=0;break; /a=0選擇顯示測得的溫度 case 1:a=1;break; /a=1選擇顯示上限溫度 case 2:a=2

36、;break; /a=2選擇顯示下限溫度 default:break; while(key1=0); /K1松按鍵時消抖 keyscan_delay(10); if(a=1&;&;v=1) /a=1選擇顯示上限溫度且v=1時選擇上下限溫度加功能 led=0;max=temp_change(max,f_max);/顯示上限溫度 else if(a=2&;&;v=1) /a=2選擇顯示下限溫度且v=1時選擇上下限溫度減功能 led=1;min=temp_change(min,f_min); else; if(k4=1) /k4=1時K4按鍵選擇正負(fù)溫度設(shè)定功能 if(key4=0) if(v2=0

37、)beer=0; keyscan_delay(5); if(key4=0) beer=1; if(a=1) if(max55) f_max=0;else f_max=f_max;/當(dāng)溫度大于55度時,只能設(shè)定為正溫度 if(a=2) if(min55) f_max=0;else f_min=f_min;/當(dāng)溫度大于55度時,只能設(shè)定為正溫度 while(key4=0); keyscan_delay(10); if(v=0) /v=0時選擇上下限查看功能 if(key2=0) if(v2=0)beer=0; keyscan_delay(10); if(key2=0) beer=1; a=1; /選擇上限顯示 TR1=1; /開定時器1開始定時一分鐘左右 s1=1; /上限顯示不閃爍,顯示一分鐘左右自動退出 while(key2=0); keyscan_delay(10); if(key3=0) if(v2=0)beer=0; keyscan_delay(10); if(key3=0) beer=1; a=

溫馨提示

  • 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

提交評論