DS18B20报警 c程序.pdf

上传人:罗晋 文档编号:8936963 上传时间:2021-01-26 格式:PDF 页数:10 大小:847.54KB
返回 下载 相关 举报
DS18B20报警 c程序.pdf_第1页
第1页 / 共10页
DS18B20报警 c程序.pdf_第2页
第2页 / 共10页
DS18B20报警 c程序.pdf_第3页
第3页 / 共10页
DS18B20报警 c程序.pdf_第4页
第4页 / 共10页
DS18B20报警 c程序.pdf_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《DS18B20报警 c程序.pdf》由会员分享,可在线阅读,更多相关《DS18B20报警 c程序.pdf(10页珍藏版)》请在三一文库上搜索。

1、 /* 程序名称:DS18B20 温度测量、报警系统 简要说明:DS18B20 温度计,温度测量范围 099.9 摄氏度 可设置上限报警温度、下限报警温度 即高于上限值或者低于下限值时蜂鸣器报警 默认上限报警温度为 38、默认下限报警温度为 5 报警值可设置范围:最低上限报警值等于当前下限报警值 最高下限报警值等于当前上限报警值 将下限报警值调为 0 时为关闭下限报警功能 */ #include #include DS18B20.h #define uint unsigned int #define uchar unsigned char/宏定义 #define SETP3_1/定义调整键 #

2、define DECP3_2/定义减少键 #define ADDP3_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 shangxian=38;/上限报警温度,默认值为 38 signed char xiaxian=5;/下限报警温度,默认值为 38 uchar codeLE

3、DData=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x ff; /*延时子程序*/ void Delay(uint num) while( -num ); /*初始化定时器 0*/ void InitTimer(void) TMOD=0 x1; TH0=0 x3c; TL0=0 xb0;/50ms(晶振 12M) /*定时器 0 中断服务程序*/ void timer0(void) interrupt 1 TH0=0 x3c; TL0=0 xb0; x+; /*外部中断 0 服务程序*/ void int0(v

4、oid) interrupt 0 EX0=0;/关外部中断 0 if(DEC=0 if(shangxianxiaxian)shangxian=xiaxian; else if(DEC=0 if(xiaxian99)shangxian=99; else if(ADD=0 if(xiaxianshangxian)xiaxian=shangxian; /*读取温度*/ void check_wendu(void) uint a,b,c; c=ReadTemperature()-5;/获取温度值并减去 DS18B20 的温漂误差 a=c/100;/计算得到十位数字 b=c/10-a*10;/计算得到个

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

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

7、0); P2 =LEDDatabaojing/10; /显示百位 P1 = 0 xfd; Delay(200); if(set_st=1)P2 =0 x89; else if(set_st=2)P2 =0 xc7; /上限 H、下限 L 标示 P1 = 0 xfe; Delay(200); P1 = 0 xff;/关闭显示 /*报警子程序*/ void Alarm() if(x=10)beep_st=beep_st;x=0; if(m=shangxian else BEEP=1; /*主函数*/ void main(void) uint z; InitTimer();/初始化定时器 EA=1;

8、/全局中断开关 TR0=1; ET0=1;/开启定时器 0 IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z2)set_st=0; if(set_st=0) EX0=0;/关闭外部中断 0 EX1=0;/关闭外部中断 1 check_wendu(); Disp_Temperature(); Alarm();/报警检测 else if(set_st=1) BEEP=1;/关闭蜂鸣器 EX0=1;/开启外部中断 0 EX1=1;/开启外部中断 1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshu

9、o_st) Disp_alarm(shangxian); else if(set_st=2) BEEP=1;/关闭蜂鸣器 EX0=1;/开启外部中断 0 EX1=1;/开启外部中断 1 if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian); /*END*/ DS18B20.hDS18B20.h: #include #defineDQP3_6/定义 DS18B20 总线 I/O /*延时子程序*/ void Delay_DS18B20(int num) while(num-) ; /*初始化 DS18B2

10、0*/ void Init_DS18B20(void) unsigned char x=0; DQ = 1;/DQ 复位 Delay_DS18B20(8);/稍做延时 DQ = 0;/单片机将 DQ 拉低 Delay_DS18B20(80);/精确延时,大于 480us DQ = 1;/拉高总线 Delay_DS18B20(14); x = DQ;/稍做延时后,如果 x=0 则初始化成功,x=1 则初始化失 败 Delay_DS18B20(20); /*读一个字节*/ unsigned char ReadOneChar(void) unsigned char i=0; unsigned cha

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

12、 char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0 xCC);/跳过读序号列号的操作 WriteOneChar(0 x44);/启动温度转换 Init_DS18B20(); WriteOneChar(0 xCC);/跳过读序号列号的操作 WriteOneChar(0 xBE);/读取温度寄存器 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备18001539号-1