温度报警系统

上传人:aa****6 文档编号:38387380 上传时间:2018-05-01 格式:DOCX 页数:11 大小:512.58KB
返回 下载 相关 举报
温度报警系统_第1页
第1页 / 共11页
温度报警系统_第2页
第2页 / 共11页
温度报警系统_第3页
第3页 / 共11页
温度报警系统_第4页
第4页 / 共11页
温度报警系统_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《温度报警系统》由会员分享,可在线阅读,更多相关《温度报警系统(11页珍藏版)》请在金锄头文库上搜索。

1、 功能简介:温度测量范围 099.9 摄氏度,可设置上限报警温度、下限 报警温度(即高于上限值或者低于下限值时蜂鸣器报警),默认上限报警温度 为 38、默认下限报警温度为 5。报警值可设置范围:最低上限报警值等于 当前下限报警值,最高下限报警值等于当前上限报警值。将下限报警值调为 0 时为关闭下限报警功能。他的毕业设计比较简单,以上这些功能就已经超额完 成基本要求了。视频演示:视频演示:硬件设计:硬件设计:电源电压 VCC 为 5V,可以焊一只 USB 座到板上,然后用相应的 USB 线 连接至电脑,通过电脑 USB 口供电;DS18B20 也可以根据需要用屏蔽电缆引出 来。K1 为进入/退出

2、设置键;K2 为增加键;K3 为减少键。电路原理图点击放大。/* 程序名称:DS18B20 温度测量、报警系统 简要说明:DS18B20 温度计,温度测量范围 099.9 摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为 38、默认下限报警温度为 5报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为 0 时为关闭下限报警功能 编 写:JiangX.net 最后更新:09/04/16 晚于寝室 */ #include #include “DS18B20.h“ #define uint unsigned

3、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 = P27; /小数点 uchar x=0; /计数器 signed char m; /温度值全局变量 uchar n; /温度值全局变量 uchar set_st=0; /状态标志 signed char shangx

4、ian=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) interr

5、upt 1 TH0=0x3c;TL0=0xb0;x+; /*外部中断 0 服务程序*/ void int0(void) interrupt 0 EX0=0; /关外部中断 0if(DEC=0if(shangxian99)shangxian=99;else if(ADD=0if(xiaxianshangxian)xiaxian=shangxian; /*读取温度*/ void check_wendu(void) uint a,b,c;c=ReadTemperature()-5; /获取温度值并减去 DS18B20 的温漂误差a=c/100; /计算得到十位数字b=c/10-a*10; /计算得到

6、个位数字m=c/10; /计算得到整数位n=c-a*100-b*10; /计算得到小数位if(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等待画面*/ Disp_init() P2 = 0xbf; /显示-P1 = 0xf7;Delay(200);P1 = 0xfb;Delay(200); P1 = 0xfd;Delay(200);P1 = 0xfe;Delay(200);P1 = 0xff; /关闭显示 /*显示温度子程序*/ Disp_Temperature() /显示温度 P2 =0xc6; /显示 CP1 = 0xf7;Delay(300);P2 =LEDData

7、n; /显示个位P1 = 0xfb;Delay(300);P2 =LEDDatam%10; /显示十位DIAN = 0; /显示小数点P1 = 0xfd;Delay(300);P2 =LEDDatam/10; /显示百位P1 = 0xfe;Delay(300);P1 = 0xff; /关闭显示 /*显示报警温度子程序*/ Disp_alarm(uchar baojing) P2 =0xc6; /显示 CP1 = 0xf7;Delay(200);P2 =LEDDatabaojing%10; /显示十位P1 = 0xfb;Delay(200);P2 =LEDDatabaojing/10; /显示百

8、位P1 = 0xfd;Delay(200);if(set_st=1)P2 =0x89;else if(set_st=2)P2 =0xc7; /上限 H、下限 L 标示P1 = 0xfe;Delay(200);P1 = 0xff; /关闭显示 /*报警子程序*/ void Alarm() if(x=10)beep_st=beep_st;x=0;if(m=shangxianif(set_st=0)EX0=0; /关闭外部中断 0EX1=0; /关闭外部中断 1check_wendu();Disp_Temperature();Alarm(); /报警检测else if(set_st=1)BEEP=1

9、; /关闭蜂鸣器EX0=1; /开启外部中断 0EX1=1; /开启外部中断 1if(x=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st) Disp_alarm(shangxian);else if(set_st=2)BEEP=1; /关闭蜂鸣器EX0=1; /开启外部中断 0EX1=1; /开启外部中断 1if(x=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st) Disp_alarm(xiaxian); /*END*/DS18B20.hDS18B20.h:#include #define DQ P3_6

10、 /定义 DS18B20 总线 I/O/*延时子程序*/ void Delay_DS18B20(int num) while(num-) ; /*初始化 DS18B20*/ void Init_DS18B20(void) unsigned char x=0;DQ = 1; /DQ 复位Delay_DS18B20(8); /稍做延时DQ = 0; /单片机将 DQ 拉低Delay_DS18B20(80); /精确延时,大于 480usDQ = 1; /拉高总线Delay_DS18B20(14);x = DQ; /稍做延时后,如果 x=0 则初始化成功,x=1 则初始化 失败Delay_DS18B

11、20(20); /*读一个字节*/ unsigned char ReadOneChar(void) unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);return(dat); /*写一个字节*/ void WriteOneChar(unsigned char dat) unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = datDelay_DS18B20(5)

12、;DQ = 1;dat=1; /*读取温度*/ unsigned int ReadTemperature(void) unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x44); /启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器a=ReadOneChar(); /读低 8 位b=ReadOneChar(); /读高 8 位t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; /放大 10 倍输出并四舍五入return(t); /*END*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号