温度报警程序.docx
- 文档编号:28186364
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:19
- 大小:101.94KB
温度报警程序.docx
《温度报警程序.docx》由会员分享,可在线阅读,更多相关《温度报警程序.docx(19页珍藏版)》请在冰豆网上搜索。
温度报警程序
#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++; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 报警 程序