温度报警程序.docx

上传人:b****8 文档编号:28186364 上传时间:2023-07-09 格式:DOCX 页数:19 大小:101.94KB
下载 相关 举报
温度报警程序.docx_第1页
第1页 / 共19页
温度报警程序.docx_第2页
第2页 / 共19页
温度报警程序.docx_第3页
第3页 / 共19页
温度报警程序.docx_第4页
第4页 / 共19页
温度报警程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

温度报警程序.docx

《温度报警程序.docx》由会员分享,可在线阅读,更多相关《温度报警程序.docx(19页珍藏版)》请在冰豆网上搜索。

温度报警程序.docx

温度报警程序

#include

externGetTemp();//声明引用外部函数

externunsignedintidataTemperature;//声明引用外部变量

voiddelay(unsignedinti);//普通延时函数

voiddisplay(unsignedintnum);//温度显示

voiddisplay_delay(unsignedintnum,unsignedinti);//带温度显示的延时函数

//elseIO

sbitLS138A=P2^2;//管脚定义

sbitLS138B=P2^3;

sbitLS138C=P2^4;

sbitbaojin=P1^5;

sbitled=P1^1;

sbitkey1=P3^2;//报警温度设置键

sbitkey2=P2^0;//温度加

sbitkey3=P2^1;//温度减

sbitkey4=P2^5;

sbitkey5=P2^6;//复位启动温度监测

sbitjidianq=P1^4;//继电器控制引脚

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

unsignedlongLedOut[5],LedNumVal;

unsignedintHset=25,Lset=15;//设置温度变量默认值为25度

unsignedchari;

voidsystem_Ini()

{

TMOD|=0x11;

TH1=0xD8;//10

TL1=0xF0;

IE=0x8A;

TR1=1;

}

voidsystem_Int0()//设置启动外部中断INT0

{

EA=1;

EX0=1;

IT0=0;

}

main()

{

delay(200);

system_Ini();

system_Int0();

while

(1)

{

GetTemp();//获取温度

LedNumVal=Temperature;//把实际温度送到LedNumVal变量中

if(LedNumVal>=Hset)//温度报警设备控制

{

baojin=0;//启动蜂鸣器

jidianq=1;//断开继电器

}

else

{

baojin=1;

jidianq=0;

}

if(LedNumVal<=Lset)

{

baojin=0;

jidianq=0;//启动继电器

}

else

{

baojin=1;

jidianq=0;

}

display(LedNumVal);//显示温度

P0=0;

}

}

//mainend

//延时程序

voiddelay(unsignedinti)

{

charj;

for(i;i>0;i--)

for(j=200;j>0;j--);

}

//显示温度num

voiddisplay(unsignedintnum)

{

unsignedintj;

LedOut[0]=Disp_Tab[num%10000/1000];

LedOut[1]=Disp_Tab[num%1000/100];

LedOut[2]=Disp_Tab[num%100/10];//十位

LedOut[3]=Disp_Tab[num%10];//个位

for(j=0;j<4;j++)

{

P0=LedOut[j];

switch(j)

{//138译码

case0:

LS138A=0;LS138B=0;LS138C=0;break;

case1:

LS138A=1;LS138B=0;LS138C=0;break;

case2:

LS138A=0;LS138B=1;LS138C=0;break;

case3:

LS138A=1;LS138B=1;LS138C=0;break;

}

delay(100);

}

}

//带显示的延时函数

voiddisplay_delay(unsignedintnum,unsignedinti)

{

charj;

for(i;i>0;i--)

{

for(j=200;j>0;j--);

display(num);

}

}

//外部中断INT0设置报警温度值

voidint0()interrupt0

{

while

(1)

{

while

(1)

{

if(Hset>=100||Hset<=0||Hset

Hset=25;

if(key2==0)

display_delay(Hset,20);

if(key2==0)

Hset++;

if(key3==0)

display_delay(Hset,20);

if(key3==0)

Hset--;

display(Hset);

if(key4==0)break;

}

while

(1)

{

if(Lset<=0||Lset>=100||Lset>Hset)

Lset=10;

if(key2==0)

display_delay(Lset,20);

if(key2==0)

Lset++;

if(key3==0)

display_delay(Lset,20);

if(key3==0)

Lset--;

display_delay(Lset,20);

if(key4==0)break;

}

key1=1;

if(key4==0)break;

}

}

/*************************此部分为18B20的驱动程序*************************************/

#include

#include

sbitD18B20=P3^7;

#defineNOP()_nop_()/*定义空指令*/

#define_Nop()_nop_()/*定义空指令*/

voidTempDelay(unsignedcharidataus);

voidInit18b20(void);

voidWriteByte(unsignedcharidatawr);//单字节写入

voidread_bytes(unsignedcharidataj);

unsignedcharCRC(unsignedcharj);

voidGemTemp(void);

voidConfig18b20(void);

voidReadID(void);

voidTemperatuerResult(void);

bitflag;

unsignedintidataTemperature;

unsignedcharidatatemp_buff[9];//存储读取的字节,readscratchpad为9字节,readromID为8字节

unsignedcharidataid_buff[8];

unsignedcharidata*p,TIM;

unsignedcharidatacrc_data;

unsignedcharcodeCrcTable[256]={

0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,

157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,

35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,

190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,

70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,

219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,

101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,

248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,

140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,

17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,

175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,

50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,

202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,

87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,

233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,

116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53};

//

/************************************************************

*Function:

延时处理

*parameter:

*Return:

*Modify:

*************************************************************/

voidTempDelay(unsignedcharidataus)

{

while(us--);

}

/************************************************************

*Function:

18B20初始化

*parameter:

*Return:

*Modify:

*************************************************************/

voidInit18b20(void)

{

D18B20=1;

_nop_();

D18B20=0;

TempDelay(80);//delay530uS//80

_nop_();

D18B20=1;

TempDelay(14);//delay100uS//14

_nop_();

_nop_();

_nop_();

if(D18B20==0)

flag=1;//detect1820success!

else

flag=0;//detect1820fail!

TempDelay(20);//20

_nop_();

_nop_();

D18B20=1;

}

/************************************************************

*Function:

向18B20写入一个字节

*parameter:

*Return:

*Modify:

*************************************************************/

voidWriteByte(unsignedcharidatawr)//单字节写入

{

unsignedcharidatai;

for(i=0;i<8;i++)

{

D18B20=0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);//delay45uS//5

_nop_();

_nop_();

D18B20=1;

wr>>=1;

}

}

/************************************************************

*Function:

读18B20的一个字节

*parameter:

*Return:

*Modify:

*************************************************************/

unsignedcharReadByte(void)//读取单字节

{

unsignedcharidatai,u=0;

for(i=0;i<8;i++)

{

D18B20=0;

u>>=1;

D18B20=1;

if(D18B20==1)

u|=0x80;

TempDelay

(2);

_nop_();

}

return(u);

}

/************************************************************

*Function:

读18B20

*parameter:

*Return:

*Modify:

*************************************************************/

voidread_bytes(unsignedcharidataj)

{

unsignedcharidatai;

for(i=0;i

{

*p=ReadByte();

p++;

}

}

/************************************************************

*Function:

CRC校验

*parameter:

*Return:

*Modify:

*************************************************************/

unsignedcharCRC(unsignedcharj)

{

unsignedcharidatai,crc_data=0;

for(i=0;i

crc_data=CrcTable[crc_data^temp_buff[i]];

return(crc_data);

}

/************************************************************

*Function:

读取温度

*parameter:

*Return:

*Modify:

*************************************************************/

voidGemTemp(void)

{

read_bytes(9);

if(CRC(9)==0)//校验正确

{

Temperature=temp_buff[1]*0x100+temp_buff[0];

//Temperature*=0.625;

Temperature/=16;

TempDelay

(1);

}

}

/************************************************************

*Function:

内部配置

*parameter:

*Return:

*Modify:

*************************************************************/

voidConfig18b20(void)//重新配置报警限定值和分辨率

{

Init18b20();

WriteByte(0xcc);//skiprom

WriteByte(0x4e);//writescratchpad

WriteByte(0x19);//上限

WriteByte(0x1a);//下限

WriteByte(0x7f);//set11bit(0.125)

Init18b20();

WriteByte(0xcc);//skiprom

WriteByte(0x48);//保存设定值

Init18b20();

WriteByte(0xcc);//skiprom

WriteByte(0xb8);//回调设定值

}

/************************************************************

*Function:

读18B20ID

*parameter:

*Return:

*Modify:

*************************************************************/

voidReadID(void)//读取器件id

{

Init18b20();

WriteByte(0x33);//readrom

read_bytes(8);

}

/************************************************************

*Function:

18B20ID全处理

*parameter:

*Return:

*Modify:

*************************************************************/

voidTemperatuerResult(void)

{

p=id_buff;

ReadID();

Config18b20();

Init18b20();

WriteByte(0xcc);//skiprom

WriteByte(0x44);//Temperatureconvert

Init18b20();

WriteByte(0xcc);//skiprom

WriteByte(0xbe);//readTemperature

p=temp_buff;

GemTemp();

}

voidGetTemp()

{

if(TIM==100)//每隔1000ms读取温度

{TIM=0;

TemperatuerResult();

}

}

/*************************************

[t1(10ms)中断]中断

*************************************/

voidT1zd(void)interrupt3

{

TH1=0xD8;//10

TL1=0xF0;

TIM++;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1