基于51單片機(jī)及DS18B20溫傳感器的數(shù)字溫計(jì)程序詳細(xì)注釋_第1頁
基于51單片機(jī)及DS18B20溫傳感器的數(shù)字溫計(jì)程序詳細(xì)注釋_第2頁
基于51單片機(jī)及DS18B20溫傳感器的數(shù)字溫計(jì)程序詳細(xì)注釋_第3頁
基于51單片機(jī)及DS18B20溫傳感器的數(shù)字溫計(jì)程序詳細(xì)注釋_第4頁
基于51單片機(jī)及DS18B20溫傳感器的數(shù)字溫計(jì)程序詳細(xì)注釋_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 基于51單片機(jī)及DS18B20溫度傳感器的數(shù)字溫度計(jì)程序(詳細(xì)注釋)電路實(shí)物圖如下圖所示:C語言程序如下所示:/* zicreate - Copyright (C) -* 程序名; 基于DS18B20的測(cè)溫系統(tǒng)* 功 能: 實(shí)時(shí)測(cè)量溫度,超過上下限報(bào)警,報(bào)警溫度可手動(dòng)調(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左右自動(dòng)* 退出;按一下K3進(jìn)入查看下限溫度模式,顯示1s左右自動(dòng)退出;按一下K4消除* 按鍵音,再按一下啟動(dòng)按鍵音。在調(diào)節(jié)上下限溫度模式下,K2是實(shí)現(xiàn)加1功能,* K1是實(shí)

2、現(xiàn)減1功能,K3是用來設(shè)定上下限溫度正負(fù)的。 * 編程者:Jason* 編程時(shí)間:2009/10/2 */#include<AT89X52.h> /將AT89X52.h頭文件包含到主程序#include<intrins.h> /將intrins.h頭文件包含到主程序(調(diào)用其中的_nop_()空操作函數(shù)延時(shí))#define uint unsigned int /變量類型宏定義,用uint表示無符號(hào)整形(16位)#define uchar unsigned char /變量類型宏定義,用uchar表示無符號(hào)字符型(8位)uchar max=0x00,min=0x00; /m

3、ax是上限報(bào)警溫度,min是下限報(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ù)#include"ds18b20.h" /將ds18b20.h頭文件包含到主程序#include"keyscan.h" /將keyscan.h頭文件包含到主程序#include"display.h" /將display.h頭文件包含到主程序/*主函數(shù)*/void mai

4、n() beer=1; /關(guān)閉蜂鳴器 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ù) /* 程序名; _

5、ds18b20_h_* 功 能: DS18B20的c51編程頭文件 * 編程者:ZPZ* 編程時(shí)間:2009/10/2 * 說 明:用到的全局變量是:無符號(hào)字符型變量temp(測(cè)得的溫度整數(shù)部分),temp_d * (測(cè)得的溫度小數(shù)部分),標(biāo)志位f(測(cè)量溫度的標(biāo)志位0表示“正溫度”1表* 示“負(fù)溫度”),標(biāo)志位f_max(上限溫度的標(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_#d

6、efine uint unsigned int /變量類型宏定義,用uint表示無符號(hào)整形(16位)#define uchar unsigned char /變量類型宏定義,用uchar表示無符號(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_max=0; /上限溫度的標(biāo)志位0表

7、示“正溫度”1表示“負(fù)溫度”)bit f_min=0; /下限溫度的標(biāo)志位0表示“正溫度”、1表示“負(fù)溫度”)bit 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;i>0;i-) for(j=120;j>0;j-);/*ds18b20初始化函數(shù)*/void ds18b20_init() / DS18B20初始化 DQ=1; /拉高數(shù)據(jù)線DQ=0; /控制器向DS18B2

8、0發(fā)低電平脈沖ds18b20_delayus(30); /延時(shí)480s左右DQ=1; /控制器拉高總線,while(DQ); /等待DS18B20拉低總線ds18b20_delayus(20); /延時(shí),等待上拉電阻拉高總線DQ=1; /拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;/*ds18b20字節(jié)讀函數(shù)*/uchar ds18b20_read() /DS18B20 字節(jié)讀取uchar i;/定義一個(gè)局部變量i(局部變量只在本函數(shù)中有效)uchar d = 0; /定義一個(gè)局部變量dDQ = 1; /準(zhǔn)備讀;for(i=8;i>0;i-) /一位一位的讀,循環(huán)8次 d >>= 1; /d左

9、移一位,低位先發(fā);DQ = 0;_nop_();_nop_();_nop_();DQ = 1; /必須寫1,否則讀出來的將是不預(yù)期的數(shù)據(jù);if(DQ) /在12us處讀取數(shù)據(jù),送給d的最高位d |= 0x80;ds18b20_delayus(10); return d; /返回讀取的值/*ds18b20字節(jié)寫函數(shù)*/void ds18b20_write(uchar d) / ds18b20字節(jié)寫 uchar i; for(i=8;i>0;i-) /一位一位的寫 DQ=0; _nop_(); _nop_();_nop_(); DQ=d&0x01;/寫數(shù)據(jù) ds18b20_delay

10、us(5); DQ=1;d >>= 1; /*獲取溫度函數(shù)*/ void get_temperature(bit f)uchar a=0,b=0,c=0,d=0; uint i;ds18b20_init(); /DS18B20初始化ds18b20_write(0xcc);/向DS18B20發(fā)跳過讀ROM命令ds18b20_write(0x44);/寫啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAMif(f=1) /首次啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是85度的錯(cuò)誤值。 display1(1);/用開機(jī)動(dòng)畫耗時(shí)elseds18b20

11、_delayms(1);ds18b20_init(); /DS18B20初始化ds18b20_write(0xcc); /向DS18B20發(fā)跳過讀ROM命令ds18b20_write(0xbe);/寫讀內(nèi)部RAM中9字節(jié)的內(nèi)容命令a=ds18b20_read();/讀內(nèi)部RAM (LSB)b=ds18b20_read();/讀內(nèi)部RAM (MSB)if(f=1)/局部位變量f=1時(shí)讀上下線報(bào)警溫度 max=ds18b20_read(); /讀內(nèi)部RAM (TH) min=ds18b20_read(); /讀內(nèi)部RAM (Tl)if(max&0x80)=0x80) /若讀取的上限溫度的最

12、高位(符號(hào)位)為1表明是負(fù)溫度f_max=1;max=(max-0x80); /將上限溫度符號(hào)標(biāo)志位置1表示負(fù)溫度,將上限溫度裝換成無符號(hào)數(shù)。 if(min&0x80)=0x80)/若讀取的下限溫度的最高位(符號(hào)位)為1表明是負(fù)溫度f_min=1;min=(min-0x80);/將下限溫度符號(hào)標(biāo)志位置1表示負(fù)溫度,將下限溫度裝換成無符號(hào)數(shù)。i=b;i>>=4;if (i=0) f=0; /i為0,表示讀取的溫度是正溫度,設(shè)立正溫度標(biāo)記 temp=(a>>4)|(b<<4);/整數(shù)部分 a=(a&0x0f); temp_d=a;/小數(shù)部分els

13、e f=1; /i為1,表示讀取的溫度是負(fù)溫度,設(shè)立負(fù)溫度標(biāo)記 a=a+1;/負(fù)數(shù)的小數(shù)部分取反加1 b=b;/負(fù)數(shù)的整數(shù)部分取反 temp=(a>>4)|(b<<4);/整數(shù)部分 a=(a&0x0f);/小數(shù)部分 temp_d=a; /*存儲(chǔ)極限溫度函數(shù)*/ void store_t() if(f_max=1) /若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)(最高1是負(fù),0是正)max=max+0x80;if(f_min=1) /若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)min=min+0x80; ds18b20_init(); /DS18B20初始化ds18b20

14、_write(0xcc); /向DS18B20發(fā)跳過讀ROM命令ds18b20_write(0x4e);/向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?和3(TH和TL)命令ds18b20_write(max); /向暫存器TH(上限溫度暫存器)寫溫度ds18b20_write(min); /向暫存器TL(下限溫度暫存器)寫溫度ds18b20_write(0xff); /向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置ds18b20_init(); /DS18B20初始化ds18b20_write(0xcc); /向DS18B20發(fā)跳過讀ROM命令ds18b20_write(0x48); /向DS18B20發(fā)將R

15、AM中2、3字節(jié)的內(nèi)容寫入EEPROM /DS18B20上電后會(huì)自動(dòng)將EEPROM中的上下限溫度拷貝到TH、TL暫存器/*溫度超限報(bào)警函數(shù)*/ void alarm() /若上限值是正值 if(f_max=0) if(f_min=0) /若下限值是正值 if(f=0) /若測(cè)量值是正值 if(temp+temp_d*0.0625)<=min|(temp+temp_d*0.0625)>=max) w=1;TR1=1; /當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 if(temp+temp_d*0.0625)<max&&(temp+temp_d*0.0625)>m

16、in) w=0; /當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警 if(f=1)w=1;TR1=1; /若測(cè)量值是負(fù)值時(shí)報(bào)警 if(f_min=1) /若下限值是負(fù)值 if(f=0) /若測(cè)量值是正值 if(temp+temp_d*0.0625)>=max)/當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 w=1;TR1=1; if(temp+temp_d*0.0625)<max )/當(dāng)測(cè)量值小于最大值時(shí)不報(bào)警 w=0; if(f=1) /若測(cè)量值是負(fù)值 if(temp+temp_d*0.0625)>=min)/當(dāng)測(cè)量值大于最小值時(shí)報(bào)警 w=1;TR1=1; if(temp+temp_d*0.0625)

17、<min)/當(dāng)測(cè)量值小于最小值時(shí)不報(bào)警 w=0; if(f_max=1) /若下限值是負(fù)值 if(f_min=1) /若下限值是負(fù)值 if(f=1) /若測(cè)量值是負(fù)值 if(temp+temp_d*0.0625)<=max|(temp+temp_d*0.0625)>=min) w=1;TR1=1; /當(dāng)測(cè)量值小于最大值或大于最小值時(shí)報(bào)警 if(temp+temp_d*0.0625)<min&&(temp+temp_d*0.0625)>max) w=0; /當(dāng)測(cè)量值小于最小值且大于最大值時(shí)不報(bào)警 if(f=0)w=1;TR1=1; /若測(cè)量值是正值時(shí)

18、報(bào)警 #endif/* 程序名; _keyscan_H_ * 功 能: ds18b20鍵盤頭文件,通過鍵盤設(shè)定設(shè)定上下限報(bào)警溫度* 編程者:ZPZ* 編程時(shí)間:2009/10/2 */#ifndef _keyscan_H_/定義頭文件#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é)模式,

19、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按鍵雙功能選擇位,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í)開按鍵音,為1時(shí)關(guān)按鍵音/*讀鍵盤延時(shí)子函數(shù)*/void keyscan_delay(uint z)/延時(shí)1ms左右 uint i,j; for(i=z;i>0;i-

20、)for(j=120;j>0;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);/延時(shí)10msif(key2=0)/再次判斷K2是否按下(實(shí)現(xiàn)按按鍵時(shí)消抖) beer=1;/K2按下關(guān)按鍵音 if(f=0)/若溫度為正 count+;/每按一下K2溫度上調(diào)1 if(a=1)if(count>125) count=125;/當(dāng)溫度值大于125時(shí)不上調(diào) if(a=2)if(count>1

21、25) count=125; if(f!=0)/若溫度為負(fù) count+;/每按一下K2溫度下調(diào)1 if(a=1)if(count>55) count=55;/當(dāng)溫度值小于-55時(shí)不再下調(diào) if(a=2)if(count>55) count=55; while(key2=0);keyscan_delay(10); /K2松開按鍵時(shí)消抖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(count<0) c

22、ount=0;/當(dāng)溫度值達(dá)到0時(shí)不再調(diào)if(a=2)if(count<0) count=0;while(key3=0); keyscan_delay(10);/K3松開按鍵時(shí)消抖return count;/*讀鍵盤函數(shù)*/void keyscan() if(key1=0) if(v2=0) beer=0; keyscan_delay(10);if(key1=0)/K1按按鍵時(shí)消抖 beer=1; TR1=1;/開定時(shí)器1,通過s標(biāo)志位的變化,實(shí)現(xiàn)在上下限溫度調(diào)整時(shí)溫度顯示時(shí)閃爍的功能 k4=1;/在上下溫度調(diào)節(jié)功能模式下選擇K4的調(diào)整上下限溫度正負(fù)的功能 v=1;/在上下溫度調(diào)節(jié)功能模式

23、下選擇K2、K3的溫度加減功能 i+;/K1按一下i加1,i=0進(jìn)入正常模式,i=1進(jìn)入調(diào)上限模式,i=2進(jìn)入調(diào)下限模式 if(i>2)/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選擇顯示下限溫度 d

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

25、(5);if(key4=0) beer=1; if(a=1) if(max>55) f_max=0;else f_max=f_max;/當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 if(a=2) if(min>55) f_max=0;else f_min=f_min;/當(dāng)溫度大于55度時(shí),只能設(shè)定為正溫度 while(key4=0); keyscan_delay(10);if(v=0) /v=0時(shí)選擇上下限查看功能if(key2=0) if(v2=0)beer=0; keyscan_delay(10);if(key2=0) beer=1; a=1;/選擇上限顯示 TR1=1;/開定時(shí)器1

26、開始定時(shí)一分鐘左右 s1=1; /上限顯示不閃爍,顯示一分鐘左右自動(dòng)退出while(key2=0); keyscan_delay(10);if(key3=0) if(v2=0)beer=0; keyscan_delay(10);if(key3=0) beer=1; a=2;/選擇下限顯示 TR1=1;/開定時(shí)器1開始定時(shí)1s s1=1; /下限顯示不閃爍,顯示1s自動(dòng)退出 while(key3=0); keyscan_delay(10);if(v1=1)/v1=1時(shí)定時(shí)1s時(shí)間到自動(dòng)關(guān)閉報(bào)警上下限查看功能a=0;v1=0;TR1=0; /a=0顯示實(shí)測(cè)溫度,v1清零,關(guān)定時(shí)器1if(k4=0)

27、 /k4=0時(shí)K4按鍵選擇消按鍵音的功能 if(key4=0)if(v2=0)beer=0; keyscan_delay(10);if(key4=0) beer=1; v2=v2;/為0時(shí)開按鍵音,為1時(shí)關(guān)按鍵音 while(key4=0);keyscan_delay(10); #endif/* 程序名; _ds18b20_display_H_ * 功 能: ds18b20數(shù)碼管動(dòng)態(tài)顯示頭文件,通過定時(shí)器0延時(shí)實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示* 編程者:ZPZ* 編程時(shí)間:2009/10/2 */#ifndef _ds18b20_display_H_ /定義頭文件#define _ds18b20_displ

28、ay_H_#define uint unsigned int /變量類型宏定義,用uint表示無符號(hào)整形(16位)#define uchar unsigned char /變量類型宏定義,用uchar表示無符號(hào)字符型(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為全局無符號(hào)字符型變量,賦初值為0uchar code temperature1= 0x3f,0

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

30、初始化函數(shù)*/void timer1_init(bit t) TMOD=0x10;/設(shè)定定時(shí)器1工作在方式1,最大定時(shí)65.53ms TH0=0x3c;/定時(shí)器賦初值,定時(shí)50ms TL0=0xb0; EA=1;/開總中斷 ET1=1;/開定時(shí)器1中斷 TR1=t; / 局部變量t為1啟動(dòng)定時(shí)器1,為0關(guān)閉定時(shí)器1/*定時(shí)器1中斷函數(shù)*/void timer1() interrupt 3 TH0=0x3c;/重新賦初值,定時(shí)50ms TL0=0xb0;num+;/每進(jìn)入一次定時(shí)器中斷num加1(每50ms加1一次) if(num<5) s=1;if(w=1)beer=1;led=1;el

31、sebeer=1;led=1;Else /進(jìn)入4次中斷,定時(shí)200ms時(shí)若報(bào)警標(biāo)志位w為1則啟動(dòng)報(bào)警,不為1不啟動(dòng)/實(shí)現(xiàn)間歇性報(bào)警功能s=0;if(w=1)beer=0;led=0;elsebeer=1;led=1;if(num>20)/進(jìn)入20次中斷,定時(shí)1s num=0;/num歸0,重新定開始定時(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顯示,及正負(fù)溫度的顯示選擇 if(f=0)/若為正溫度,百位為

32、0則不顯示百位,不為0則顯示 if(k/100=0) P0=temperature30; else P0=temperature1k/100; if(f=1)/若為負(fù)溫度,若十位為0,百位不顯示,否則百位顯示- if(k%100/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; e

33、lse P0=temperature1k%100/10; if(f=1)/若為負(fù)溫度,若十位為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;i<4;i+) /依次從左至右選通數(shù)碼管顯示,實(shí)現(xiàn)動(dòng)態(tài)顯示 switch(i) case 0: /選通第一個(gè)數(shù)碼管 if(a=0)selsct_1(f,t); /若a=0則在第一個(gè)數(shù)碼管上顯示測(cè)

34、量溫度的百位或- if(a=1) P0=temperature33; /若a=1則在第一個(gè)數(shù)碼管上顯示H if(a=2) P0=temperature34; /若a=2則在第一個(gè)數(shù)碼管上顯示L wei2=0; /關(guān)第二個(gè)數(shù)碼管 wei3=0; /關(guān)第三個(gè)數(shù)碼管 wei4=0; /關(guān)第四個(gè)數(shù)碼管 wei1=1; /開第一個(gè)數(shù)碼管 break; case 1: /選通第二個(gè)數(shù)碼管 if(a=0)selsct_2(f,t); /若a=0則在第二個(gè)數(shù)碼管上顯示測(cè)量溫度的十位或- if(a=1) /若a=1則在第二個(gè)數(shù)碼管上顯示上限報(bào)警溫度的百位或- if(s=0) selsct_1(f_max,max

35、);/若s=0則顯示第二個(gè)數(shù)碼管,否則不顯示 else P0=temperature30; /通過s標(biāo)志位的變化實(shí)現(xiàn)調(diào)節(jié)上下限報(bào)警溫度時(shí)數(shù)碼管的閃爍 if(s1=1) selsct_1(f_max,max);/若s1=1則顯示第二個(gè)數(shù)碼管(s1標(biāo)志位用于上下限查看時(shí)的顯示) if(a=2)/若a=2則在第二個(gè)數(shù)碼管上顯示下限報(bào)警溫度的百位或- if(s=0) selsct_1(f_min,min); else P0=temperature30; if(s1=1) selsct_1(f_min,min); wei1=0; wei3=0; wei4=0; wei2=1; break; case 2: /選通第三個(gè)數(shù)碼管 if(a=0)P0=temperature2t%10;/若a=0則在第三個(gè)數(shù)碼管上顯示測(cè)量溫度的個(gè)位 if(a=1) /若a=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論