最近帮别人计划了一下结业计划,就是温度检测、报警体系,详细的标题就不贴出来了。果真这个计划的缘故起因也在于最近有许多人都在问我相同的课题,声名这个课题之广泛。着实早年就给伴侣做过一个DS18B20温度计,大同小异,这次加上了报警体系就会越发适用了。
成果简介:温度丈量范畴0~99.9摄氏度,可配置上限报警温度、下限报警温度(即高于上限值可能低于下限值时蜂鸣器报警),默认上限报警温度为38℃、默认下限报警温度为5℃。报警值可配置范畴:最低上限报警值便是当前下限报警值,最高下限报警值便是当前上限报警值。将下限报警值调为0时为封锁下限报警成果。他的结业计划较量简朴,以上这些成果就已经超额完成根基要求了。
视频演示:
![DS18B20温度丈量、报警体系的计划](/uploads/allimg/121229/1I2504O7-0.jpg)
![DS18B20温度丈量、报警体系的计划](/uploads/allimg/121229/1I2505129-1.jpg)
![DS18B20温度丈量、报警体系的计划](/uploads/allimg/121229/1I2505J9-2.jpg)
![DS18B20温度丈量、报警体系的计划](/uploads/allimg/121229/1I2504494-3.jpg)
硬件计划:
电源电压VCC为5V,可以焊一只USB座到板上,然后用响应的USB线毗连至电脑,通过电脑USB供词电;数码管选用四位共阳赤色数码管;DS18B20也可以按照必要用屏障电缆引出来。K1为进入/退出配置键;K2为增进键;K3为镌汰键。电路道理图点击放大。
![DS18B20温度丈量、报警体系的计划](/uploads/allimg/121229/1I2503428-4.jpg)
Hex文件供下载:DS18B20.txt(右键方针另存为,必要将扩展名txt改为hex)
软件计划:
有两个文件,DS18B20.c和DS18B20.h,将这两个文件添加到工程里即可。
DS18B20.c:
/******************************************************************
措施名称:DS18B20温度丈量、报警体系
扼要声名:DS18B20温度计,温度丈量范畴0~99.9摄氏度
可配置上限报警温度、下限报警温度
即高于上限值可能低于下限值时蜂鸣器报警
默认上限报警温度为38℃、默认下限报警温度为5℃
报警值可配置范畴:最低上限报警值便是当前下限报警值
最高下限报警值便是当前上限报警值
将下限报警值调为0时为封锁下限报警成果
编 写:JiangX.net
最后更新:09/04/16晚于睡房
******************************************************************/
#include <AT89X52.h>
#include "DS18B20.h"
#define uint unsigned int
#define uchar unsigned char //宏界说
#define SET P3_1 //界说调解键
#define DEC P3_2 //界说镌汰键
#define ADD P3_3 //界说增进键
#define BEEP P3_7 //界说蜂鸣器
bit shanshuo_st; //闪烁隔断符号
bit beep_st; //蜂鸣器隔断符号
sbit DIAN = P2^7; //小数点
uchar x=0; //计数器
signed char m; //温度值全局变量
uchar n; //温度值全局变量
uchar set_st=0; //状态符号
signed char shangxian=38; //上限报警温度,默认值为38
signed char xiaxian=5; //下限报警温度,默认值为38
uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*****延时子措施*****/
void Delay(uint num)
{
while( --num );
}
/*****初始化按时器0*****/
void InitTimer(void)
{
TMOD=0x1;
TH0=0x3c;
TL0=0xb0; //50ms(晶振12M)
}
/*****按时器0间断处事措施*****/
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
x++;
}
/*****外部间断0处事措施*****/
void int0(void) interrupt 0
{
EX0=0; //关外部间断0
if(DEC==0&&set_st==1)
{
shangxian--;
if(shangxian<xiaxian)shangxian=xiaxian;
}
else if(DEC==0&&set_st==2)
{
xiaxian--;
if(xiaxian<0)xiaxian=0;
}
}
/*****外部间断1处事措施*****/
void int1(void) interrupt 2
{
EX1=0; //关外部间断1
if(ADD==0&&set_st==1)
{
shangxian++;
if(shangxian>99)shangxian=99;
}
else if(ADD==0&&set_st==2)
{
xiaxian++;
if(xiaxian>shangxian)xiaxian=shangxian;
}
}
/*****读取温度*****/
void check_wendu(void)
{
uint a,b,c;
c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂偏差
a=c/100; //计较获得十位数字
b=c/10-a*10; //计较获得个位数字
m=c/10; //计较获得整数位
n=c-a*100-b*10; //计较获得小数位
if(m<0){m=0;n=0;} //配置温度表现上限
if(m>99){m=99;n=9;} //配置温度表现上限
(责任编辑:admin) |