版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、-. z數(shù)字溫度計(jì)設(shè)計(jì)開(kāi)題報(bào)告364.1設(shè)計(jì)要求利用溫度傳感器DS18B20測(cè)量*一點(diǎn)環(huán)境溫度.測(cè)量圍為-5050,精度為0.5.用LED數(shù)碼管進(jìn)展實(shí)際溫度值直讀顯示.2.擴(kuò)展功能能夠根據(jù)需要任意設(shè)定溫度的上下限報(bào)警功能.364.2硬件設(shè)計(jì)1設(shè)計(jì)思想以51單片機(jī)為主控制器,以數(shù)字式溫度傳感器DS18B20為傳感元件,以LED數(shù)碼管作為顯示器件實(shí)時(shí)顯示測(cè)量溫度。數(shù)字式溫度計(jì)測(cè)溫圍在5050,誤差在0.5以。溫度測(cè)量間隔時(shí)間選擇1s。通過(guò)鍵盤(pán)擴(kuò)展,實(shí)現(xiàn)溫度上下限值的設(shè)定及溫度報(bào)警功能。對(duì)溫度采樣值實(shí)現(xiàn)數(shù)字濾波。通過(guò)硬件或軟件方法實(shí)現(xiàn)時(shí)間顯示。2主要元器件介紹:?jiǎn)纹瑱C(jī)AT89C51 溫度傳感器DS1
2、8B20 4位共陽(yáng)LED數(shù)碼管 3 功能電路介紹主控制器:單片機(jī)AT89C2051具有低電壓供電和小體積等特點(diǎn),兩個(gè)端口剛好滿足電路系統(tǒng)的設(shè)計(jì)需要。顯示電路:顯示電路采用4位共陽(yáng)LED數(shù)碼管,從P1口輸出段碼,列掃描用P3.0P3.3口來(lái)實(shí)現(xiàn),列驅(qū)動(dòng)用9012三極管。電路圖溫度計(jì)電路設(shè)計(jì)原理圖如上圖所示,溫度計(jì)的控制器使用單片機(jī)AT89C51,溫度傳感器使用DS18B20,用4位共陽(yáng)極LED數(shù)碼管以動(dòng)態(tài)掃描法實(shí)現(xiàn)溫度顯示。圖中有3個(gè)獨(dú)立式按鍵可以分別調(diào)整溫度的上下限報(bào)警設(shè)置,圖中蜂鳴器可以在被測(cè)溫度不在上下限圍時(shí),發(fā)出報(bào)警鳴叫聲音,同時(shí)LED數(shù)碼管將沒(méi)有被測(cè)溫度顯示,這時(shí)可以調(diào)整上下限,從而測(cè)
3、出被測(cè)的溫度值。364.3 軟件設(shè)計(jì)1 設(shè)計(jì)思想數(shù)字溫度計(jì)設(shè)計(jì)的應(yīng)用程序由主程序,LED顯示子程序,溫度檢測(cè)程序組2軟件流程圖3源程序 ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件* 功 能: 通過(guò)定時(shí)器0延時(shí)是數(shù)碼管動(dòng)態(tài)顯示* 編程者: ZPZ* 編程時(shí)間:2009/10/2*/*ifndef _ds18b20_display_H_ /定義頭文件*define _ds18b20_display_H_*define uint unsigned int /變量類(lèi)型宏定義,用uint表示無(wú)符號(hào)整形16位*define uchar unsigned char /變量類(lèi)型宏定義,用uchar表示無(wú)符號(hào)字符型8位
4、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為全局無(wú)符號(hào)字符型變量,賦初值為0uchar code temperature1= 0*3f,0*06,0*5b,0*4f,0*66, 0*6d,0*7d,0*07,0*7f,0*6f;/定義顯示碼表09uchar code temperature2= 0*bf,0*86,0*db,0*cf,0*e6, 0*ed,0*
5、fd,0*87,0*ff,0*ef;/帶小數(shù)點(diǎn)的0.9.uchar code temperature3= 0*00,0*80,0*40,0*76,0*38;/依次是不顯示.-HL/*延時(shí)子函數(shù)*/void display_delay(uint t) /延時(shí)1ms左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*定時(shí)器1初始化函數(shù)*/void timer1_init(bit t) TMOD=0*10;/設(shè)定定時(shí)器1工作在方式1,最大定時(shí)65.53ms TH0=0*3c;/定時(shí)器賦初值,定時(shí)50ms TL0=0*b0; EA=1;/開(kāi)總中斷 ET1=1;/開(kāi)
6、定時(shí)器1中斷 TR1=t;/ 局部變量t為1啟動(dòng)定時(shí)器1,為0關(guān)閉定時(shí)器1/*定時(shí)器1中斷函數(shù)*/void timer1() interrupt 3 TH0=0*3c;/重新賦初值,定時(shí)50ms TL0=0*b0;num+;/每進(jìn)入一次定時(shí)器中斷num加1每50ms加1一次 if(num20)/進(jìn)入20次中斷,定時(shí)1s num=0;/num歸0,重新定開(kāi)場(chǎng)定時(shí)1s s1=0;/定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限顯示功能 v1=1;/定時(shí)1s時(shí)間到時(shí)自動(dòng)關(guān)閉報(bào)警上下限查看功能 /*調(diào)整報(bào)警上下限顯示選擇函數(shù)*/void selsct_1(uchar f,uchar k) /消除百位的0顯示,及正
7、負(fù)溫度的顯示選擇 if(f=0)/假設(shè)為正溫度,百位為0則不顯示百位,不為0則顯示 if(k/100=0) P0=temperature30; else P0=temperature1k/100; if(f=1)/假設(shè)為負(fù)溫度,假設(shè)十位為0,百位不顯示,否則百位顯示- if(k%100/10=0) P0=temperature30; else P0=temperature32; void selsct_2(bit f,uchar k)/消除十位的0顯示,及正負(fù)溫度的顯示選擇 if(f=0) /假設(shè)為正溫度,百位十位均為0則不顯示十位,否則顯示十位 if(k/100=0)&(k%100/10=0
8、) P0=temperature30; else P0=temperature1k%100/10; if(f=1)/假設(shè)為負(fù)溫度,假設(shè)十位為0,十位不顯示,否則十位顯示- if(k%100/10=0) P0=temperature32; else P0=temperature1k%100/10; /*主顯示函數(shù)*/void display(uchar t,uchar t_d) /用于實(shí)測(cè)溫度、上限溫度的顯示 uchar i; for(i=0;i4;i+) /依次從左至右選通數(shù)碼管顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示 switch(i) case 0: /選通第一個(gè)數(shù)碼管 wei2=1; /關(guān)第二個(gè)數(shù)碼管 wei
9、3=1; /關(guān)第三個(gè)數(shù)碼管 wei4=1; /關(guān)第四個(gè)數(shù)碼管 wei1=0; /開(kāi)第一個(gè)數(shù)碼管 if(a=0)selsct_1(f,t); /假設(shè)a=0則在第一個(gè)數(shù)碼管上顯示測(cè)量溫度的百位或- if(a=1) P0=temperature33; /假設(shè)a=1則在第一個(gè)數(shù)碼管上顯示H if(a=2) P0=temperature34; /假設(shè)a=2則在第一個(gè)數(shù)碼管上顯示L break; case 1: /選通第二個(gè)數(shù)碼管 wei1=1; wei3=1; wei4=1; wei2=0; if(a=0)selsct_2(f,t); /假設(shè)a=0則在第二個(gè)數(shù)碼管上顯示測(cè)量溫度的十位或- if(a=1)
10、 /假設(shè)a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或- if(s=0) selsct_1(f_ma*,ma*);/假設(shè)s=0則顯示第二個(gè)數(shù)碼管,否則不顯示 else P0=temperature30; /通過(guò)s標(biāo)志位的變化實(shí)現(xiàn)調(diào)節(jié)上下限報(bào)警溫度時(shí)數(shù)碼管的閃爍 if(s1=1) selsct_1(f_ma*,ma*);/假設(shè)s1=1則顯示第二個(gè)數(shù)碼管s1標(biāo)志位用于上下限查看時(shí)的顯示 if(a=2) /假設(shè)a=2則在第二個(gè)數(shù)碼管上顯示下限報(bào)警溫度的百位或- if(s=0) selsct_1(f_min,min); else P0=temperature30; if(s1=1) selsct_1
11、(f_min,min); break; case 2: /選通第三個(gè)數(shù)碼管 wei1=1; wei2=1; wei4=1; wei3=0; if(a=0)P0=temperature2t%10;/假設(shè)a=0則在第三個(gè)數(shù)碼管上顯示測(cè)量溫度的個(gè)位 if(a=1) /假設(shè)a=1則在第三個(gè)數(shù)碼管上顯示上限報(bào)警溫度的十位或- if(s=0) selsct_2(f_ma*,ma*);/假設(shè)s=0則顯示第三個(gè)數(shù)碼管,否則不顯示 else P0=temperature30; if(s1=1) selsct_2(f_ma*,ma*);/假設(shè)s1=1則顯示第三個(gè)數(shù)碼管 if(a=2) /假設(shè)a=2則在第三個(gè)數(shù)碼管
12、上顯示下限報(bào)警溫度的十位或- if(s=0) selsct_2(f_min,min); else P0=temperature30; if(s1=1) selsct_2(f_min,min); break; case 3: /選通第四個(gè)數(shù)碼管 wei1=1; wei2=1; wei3=1; wei4=0; if(a=0)P0=temperature1t_d;/假設(shè)a=0則在第四個(gè)數(shù)碼管上顯示測(cè)量溫度的小數(shù)位 if(a=1) /假設(shè)a=1則在第四個(gè)數(shù)碼管上顯示上限報(bào)警溫度的個(gè)位 if(s=0) P0=temperature1ma*%10;/假設(shè)s=0則顯示第四個(gè)數(shù)碼管,否則不顯示 else P0
13、=temperature30; if(s1=1) P0=temperature1ma*%10;/假設(shè)s1=1則顯示第四個(gè)數(shù)碼管 if(a=2) /假設(shè)a=2則在第四個(gè)數(shù)碼管上顯示下限報(bào)警溫度的個(gè)位 if(s=0) P0=temperature1min%10; else P0=temperature30; if(s1=1) P0=temperature1min%10; break; display_delay(10); /每個(gè)數(shù)碼管顯示3ms左右/*開(kāi)機(jī)顯示函數(shù)*/void display1(uint z) /用于開(kāi)機(jī)動(dòng)畫(huà)的顯示 uchar i,j; bit f=0; for(i=0;iz;i+
14、) /z是顯示遍數(shù)的設(shè)定 for(j=0;j4;j+) /依次從左至右顯示- switch(j) case 0: wei2=1; wei3=1; wei4=1; wei1=0; break; P0=temperature32;/第一個(gè)數(shù)碼管顯示 case 1: wei1=1; wei3=1; wei4=1; wei2=0;break; P0=temperature32;/第二個(gè)數(shù)碼管顯示 case 2: wei1=1; wei2=1; wei4=1; wei3=0;break; P0=temperature32;/第三個(gè)數(shù)碼管顯示 case 3: wei1=1; wei2=1; wei3=1;
15、 wei4=0;break; P0=temperature32;/第四個(gè)數(shù)碼管顯示 display_delay(400); /每個(gè)數(shù)碼管顯示200ms左右 *endif程序名; 基于DS18B20的測(cè)溫系統(tǒng)* 功 能: 實(shí)時(shí)測(cè)量溫度,超過(guò)上下限報(bào)警,報(bào)警溫度可手動(dòng)調(diào)整。K1是用來(lái)* 進(jìn)入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進(jìn)入上限調(diào)節(jié)模式,再按一下進(jìn)入下限* 調(diào)節(jié)模式。在正常模式下,按一下K2進(jìn)入查看上限溫度模式,顯示1s左右自動(dòng)* 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除* 按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,* K1是實(shí)現(xiàn)減1
16、功能,K3是用來(lái)設(shè)定上下限溫度正負(fù)的。 * 編程者: ZPZ* 編程時(shí)間:2009/10/2* 學(xué)習(xí)交流 .zicreate. (建立中)2012-5-21*/*include /將AT89*52.h頭文件包含到主程序*include /將intrins.h頭文件包含到主程序調(diào)用其中的_nop_()空操作函數(shù)延時(shí)*define uint unsigned int /變量類(lèi)型宏定義,用uint表示無(wú)符號(hào)整形16位*define uchar unsigned char /變量類(lèi)型宏定義,用uchar表示無(wú)符號(hào)字符型8位uchar ma*=0*00,min=0*00; /ma*是上限報(bào)警溫度,min
17、是下限報(bào)警溫度bit s=0; /s是調(diào)整上下限溫度時(shí)溫度閃爍的標(biāo)志位,s=0不顯示200ms,s=1顯示1s左右bit s1=0; /s1標(biāo)志位用于上下限查看時(shí)的顯示void display1(uint z); /聲明display1函數(shù)display.h頭文件中的函數(shù),ds18b20.h要用應(yīng)先聲明*includeds18b20.h /將ds18b20.h頭文件包含到主程序*includekeyscan.h /將keyscan.h頭文件包含到主程序*includedisplay.h /將display.h頭文件包含到主程序/*主函數(shù)*/void main() beer=1; /關(guān)閉蜂鳴器
18、led=1; /關(guān)閉LED燈 timer1_init(0); /初始化定時(shí)器1未啟動(dòng)定時(shí)器1 get_temperature(1); /首次啟動(dòng)DS18B20獲取溫度DS18B20上點(diǎn)后自動(dòng)將EEPROM中的上下限溫度復(fù)制到TH和TL存放器 while(1) /主循環(huán) keyscan(); /按鍵掃面函數(shù) get_temperature(0); /獲取溫度函數(shù) /keyscan(); /按鍵掃面函數(shù) display(temp,temp_d*0.625);/顯示函數(shù) alarm(); /報(bào)警函數(shù) /keyscan(); /按鍵掃面函數(shù) 程序名; _ds18b20_h_* 功 能: DS18B20
19、的c51編程頭文件* * 編程者: ZPZ* 編程時(shí)間:2009/10/2* 說(shuō) 明:用到的全局變量是:無(wú)符號(hào)字符型變量temp(測(cè)得的溫度整數(shù)局部),temp_d * (測(cè)得的溫度小數(shù)局部),標(biāo)志位f測(cè)量溫度的標(biāo)志位0表示正溫度1表* 示負(fù)溫度,標(biāo)志位f_ma*上限溫度的標(biāo)志位0表示正溫度、1表* 示負(fù)溫度,標(biāo)志位f_min下限溫度的標(biāo)志位0表示正溫度、1表* 示負(fù)溫度,標(biāo)志位w(報(bào)警標(biāo)志位1啟動(dòng)報(bào)警0關(guān)閉報(bào)警)。 */*ifndef _ds18b20_h_ /定義頭文件*define _ds18b20_h_*define uint unsigned int /變量類(lèi)型宏定義,用uint表示
20、無(wú)符號(hào)整形16位*define uchar unsigned char /變量類(lèi)型宏定義,用uchar表示無(wú)符號(hào)字符型8位sbit DQ= P23; /可位尋址變量定義,用DQ表示P2.3口sbit beer=P10; /用beer表示P1.0sbit led=P11; /用led表示P1.1uchar temp=0; /測(cè)量溫度的整數(shù)局部uchar temp_d=0; /測(cè)量溫度的小數(shù)部bit f=0; /測(cè)量溫度的標(biāo)志位,0表示正溫度1表示負(fù)溫度bit f_ma*=0; /上限溫度的標(biāo)志位0表示正溫度1表示負(fù)溫度bit f_min=0; /下限溫度的標(biāo)志位0表示正溫度、1表示負(fù)溫度bit
21、w=0; /報(bào)警標(biāo)志位1啟動(dòng)報(bào)警0關(guān)閉報(bào)警)/*延時(shí)子函數(shù)*/void ds18b20_delayus(uint t) /延時(shí)幾s while(t-);void ds18b20_delayms(uint t) /延時(shí)1ms左右uint i,j;for(i=t;i0;i-) for(j=120;j0;j-);/*ds18b20初始化函數(shù)*/void ds18b20_init() / DS18B20初始化 uchar c=0; DQ=1;DQ=0; /控制器向DS18B20發(fā)低電平脈沖ds18b20_delayus(80); /延時(shí)15-80sDQ=1;/控制器拉高總線,while(DQ); /等
22、待DS18B20拉低總線,在60-240s之間ds18b20_delayus(150);/延時(shí),等待上拉電阻拉高總線DQ=1; /拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;/*ds18b20字節(jié)讀函數(shù)*/uchar ds18b20_read() /DS18B20 字節(jié)讀取uchar i;uchar d = 0;DQ = 1;/準(zhǔn)備讀;for(i=8;i0;i-) d = 1; /低位先發(fā);DQ = 0;_nop_();_nop_();DQ = 1;/必須寫(xiě)1,否則讀出來(lái)的將是不預(yù)期的數(shù)據(jù);if(DQ)/在12us處讀取數(shù)據(jù);d |= 0*80;ds18b20_delayus(10);return d; /返回
23、讀取的值/*ds18b20字節(jié)寫(xiě)函數(shù)*/void ds18b20_write(uchar d) / ds18b20字節(jié)寫(xiě) uchar i; for(i=8;i0;i-) DQ=0; DQ=d&0*01; 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(); /DS18B20初始化ds18b20_write(0*cc);/向DS18B20發(fā)跳過(guò)讀ROM命令ds18b20_write(0*44);/寫(xiě)啟動(dòng)DS18B
24、20進(jìn)展溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入部RAMif(flag=1)/首次啟動(dòng)DS18B20進(jìn)展溫度轉(zhuǎn)換需要500ms,假設(shè)轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是85度的錯(cuò)誤值。 display1(1);/用開(kāi)機(jī)動(dòng)畫(huà)耗時(shí)elseds18b20_delayms(1);ds18b20_init(); /DS18B20初始化ds18b20_write(0*cc); /向DS18B20發(fā)跳過(guò)讀ROM命令ds18b20_write(0*be);/寫(xiě)讀部RAM中9字節(jié)的容命令a=ds18b20_read();/讀部RAM LSBb=ds18b20_read();/讀部RAM MSBif(flag=1)/局部位變量f=1時(shí)
25、讀上下線報(bào)警溫度 ma*=ds18b20_read(); /讀部RAM TH min=ds18b20_read(); /讀部RAM Tlif(ma*&0*80)=0*80) /假設(shè)讀取的上限溫度的最高位符號(hào)位為1說(shuō)明是負(fù)溫度f(wàn)_ma*=1;ma*=(ma*-0*80); /將上限溫度符號(hào)標(biāo)志位置1表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 if(min&0*80)=0*80) /假設(shè)讀取的下限溫度的最高位符號(hào)位為1說(shuō)明是負(fù)溫度f(wàn)_min=1;min=(min-0*80); /將下限溫度符號(hào)標(biāo)志位置1表示負(fù)溫度,將下限溫度裝換成無(wú)符號(hào)數(shù)。i=b;i=4;if (i=0) f=0; /i為0,正溫度,
26、設(shè)立正溫度標(biāo)記 temp=(a4)|(b4)|(b4);/整數(shù)局部 a=(a&0*0f);/小數(shù)局部 temp_d=a; /*存儲(chǔ)極限溫度函數(shù)*/ void store_t() if(f_ma*=1) /假設(shè)上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)最高位為1是負(fù),為0是正ma*=ma*+0*80;if(f_min=1) /假設(shè)下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)min=min+0*80; ds18b20_init(); /DS18B20初始化ds18b20_write(0*cc); /向DS18B20發(fā)跳過(guò)讀ROM命令ds18b20_write(0*4e); /向DS18B20發(fā)寫(xiě)字節(jié)至?xí)捍嫫?/p>
27、2和3TH和TL命令ds18b20_write(ma*); /向暫存器TH上限溫度暫存器寫(xiě)溫度ds18b20_write(min); /向暫存器TL下限溫度暫存器寫(xiě)溫度ds18b20_write(0*ff); /向配置存放器寫(xiě)命令,進(jìn)展溫度值分辨率設(shè)置ds18b20_init(); /DS18B20初始化ds18b20_write(0*cc); /向DS18B20發(fā)跳過(guò)讀ROM命令ds18b20_write(0*48); /向DS18B20發(fā)將RAM中2、3字節(jié)的容寫(xiě)入EEPROM /DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器/*溫度超限報(bào)警函數(shù)*/ void
28、 alarm() /假設(shè)上限值是正值 if(f_ma*=0) if(f_min=0) /假設(shè)下限值是正值 if(f=0) /假設(shè)測(cè)量值是正值 if(temp=ma*) w=1;TR1=1; /當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 if(tempmin) w=0; /當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警 if(f=1)w=1;TR1=1; /假設(shè)測(cè)量值是負(fù)值時(shí)報(bào)警 if(f_min=1) /假設(shè)下限值是負(fù)值 if(f=0) /假設(shè)測(cè)量值是正值 if(temp=ma*)/當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 w=1;TR1=1; if(temp=min)/當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 w=1;TR1=1; if
29、(tempmin)/當(dāng)測(cè)量值小于最小值時(shí)不報(bào)警 w=0; if(f_ma*=1) /假設(shè)下限值是負(fù)值 if(f_min=1) /假設(shè)下限值是負(fù)值 if(f=1) /假設(shè)測(cè)量值是負(fù)值 if(temp=min) w=1;TR1=1; /當(dāng)測(cè)量值小于最大值或大于最小值時(shí)報(bào)警 if(tempma*) w=0; /當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警 if(f=0)w=1;TR1=1; /假設(shè)測(cè)量值是正值時(shí)報(bào)警 *endif程序名; ds18b20鍵盤(pán)頭文件* 功 能: 通過(guò)鍵盤(pán)設(shè)定設(shè)定上下限報(bào)警溫度* 編程者: ZPZ* 編程時(shí)間:2009/10/2*/*ifndef _keyscan_H_/定義頭
30、文件*define _keyscan_H_sbit key1=P22; /可位尋址變量定義,用key1表示P2.2口sbit key2=P21; /用key2表示P2.1口sbit key3=P20;/用key3表示P2.0口sbit key4=P33;/用key4表示P3.3口uchar i=0;/定義全局變量i用于不同功能模式的選擇,0正常模式,1上限調(diào)節(jié)模式,2下限調(diào)節(jié)模式uchar a=0; /定義全局變量a用于不同模式下數(shù)碼管顯示的選擇bit k4=0;/K4按鍵雙功能選擇位,k4=0時(shí)K4按鍵選擇消按鍵音的功能,k4=1時(shí)K4按鍵選擇正負(fù)溫度設(shè)定功能bit v=0;/K2、K3按鍵
31、雙功能選擇位,v=0時(shí)選擇上下限查看功能,v=1時(shí)選擇上下限溫度加減功能bit v1=0;/v1=1時(shí)定時(shí)1250ms時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能bit v2=0; /消按鍵音功能調(diào)整位,為0時(shí)開(kāi)按鍵音,為1時(shí)關(guān)按鍵音/*讀鍵盤(pán)延時(shí)子函數(shù)*/void keyscan_delay(uint z)/延時(shí)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開(kāi)按鍵音,否則消按鍵
32、音keyscan_delay(10);/延時(shí)10msif(key2=0)/再次判斷K2是否按下實(shí)現(xiàn)按按鍵時(shí)消抖 beer=1;/K2按下關(guān)按鍵音 if(f=0)/假設(shè)溫度為正 count+;/每按一下K2溫度上調(diào)1 if(a=1)if(count125) count=125;/當(dāng)溫度值大于125時(shí)不上調(diào) if(a=2)if(count125) count=125; if(f!=0)/假設(shè)溫度為負(fù) count+;/每按一下K2溫度下調(diào)1 if(a=1)if(count55) count=55;/當(dāng)溫度值小于-55時(shí)不再下調(diào) if(a=2)if(count55) count=55; while(k
33、ey2=0);/K2松開(kāi)按鍵時(shí)消抖keyscan_delay(10);if(key3=0) if(v2=0)beer=0;keyscan_delay(10);if(key3=0) /K3按按鍵時(shí)消抖 beer=1; count-;/每按一下K3溫度為正時(shí)下調(diào)1,為負(fù)時(shí)上調(diào)1if(a=1)if(count0) count=0;/當(dāng)溫度值到達(dá)0時(shí)不再調(diào)if(a=2)if(count2)/K1按下三次后退出調(diào)節(jié)模式 i=0;/進(jìn)入正常模式 TR1=0;/關(guān)定時(shí)器1 k4=0;/在正常模式下選擇K4的消按鍵音功能 v=0;/在正常模式下選擇K2、K3的查看上下限報(bào)警溫度功能 store_t();/存儲(chǔ)調(diào)整后的上下限報(bào)警溫度 switch(i)/顯示選擇 case 0:a=0;break;/a=0選擇顯示測(cè)得的溫度 case 1:a=1;break; /a=1選擇顯示上限溫度 case 2:a=2;break; /a=2選擇顯示下限溫度 default:break; while(key1=0);/K1松按鍵時(shí)消抖keyscan_delay(10);if(a=1&v=1)/a=1選擇顯示上限溫度且v=1時(shí)選擇上下限溫度加功能led=0;ma*=te
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 實(shí)習(xí)報(bào)告數(shù)據(jù)錄入
- 二零二五年度廠房出售附帶產(chǎn)業(yè)園區(qū)入駐協(xié)議合同2篇
- 科學(xué)本質(zhì)內(nèi)容在百年高中化學(xué)教科書(shū)的變遷與啟示
- 二零二五版辦公樓施工進(jìn)度調(diào)整與延期承包協(xié)議3篇
- 2025年滬教新版選擇性必修1歷史下冊(cè)月考試卷
- 2024版勞動(dòng)合同主體變更說(shuō)明3篇
- 2024年黃石市中心醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024年電動(dòng)車(chē)租賃平臺(tái)用戶協(xié)議3篇
- 二零二五年車(chē)用起重機(jī)租賃及綠色能源適配合同3篇
- 2025年冀少新版選修2地理下冊(cè)月考試卷
- 小學(xué)英語(yǔ)時(shí)態(tài)練習(xí)大全(附答案)-小學(xué)英語(yǔ)時(shí)態(tài)專項(xiàng)訓(xùn)練及答案
- 矩形磚砌渠道施工方案
- 大數(shù)據(jù)與人工智能ppt
- 中醫(yī)科特色診療規(guī)范
- 建筑工程一切險(xiǎn)條款版
- PEP小學(xué)六年級(jí)英語(yǔ)上冊(cè)選詞填空專題訓(xùn)練
- 古建筑修繕項(xiàng)目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學(xué)元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經(jīng)理的人力資源管理培訓(xùn)(新版)課件
- 鉬氧化物還原過(guò)程中的物相轉(zhuǎn)變規(guī)律及其動(dòng)力學(xué)機(jī)理研究
評(píng)論
0/150
提交評(píng)論