欢迎来到天天文库
浏览记录
ID:18766397
大小:551.50 KB
页数:10页
时间:2018-09-22
《ds18b20温度测量、报警系统的设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/******************************************************************程序名称:DS18B20温度测量、报警系统简要说明:DS18B20温度计,温度测量范围0~99.9摄氏度 可设置上限报警温度、下限报警温度 即高于上限值或者低于下限值时蜂鸣器报警 默认上限报警温度为38℃、默认下限报警温度为5℃ 报警值可设置范围:最低上限报警值等于当前下限报警值 最高下限报警值等于当前上限报警值 将下限报警值调为0时为关闭下限报警功能 *****************************************
2、*************************/#include#include"DS18B20.h" #defineuintunsignedint#defineucharunsignedchar //宏定义#defineSET P3_1 //定义调整键#defineDEC P3_2 //定义减少键#defineADD P3_3 //定义增加键#defineBEEPP3_7 //定义蜂鸣器bitshanshuo_st; //闪烁间隔标志bitbeep_st; //蜂鸣器间隔标志sbitDIAN=P2^7; //小
3、数点ucharx=0; //计数器signedcharm; //温度值全局变量ucharn; //温度值全局变量ucharset_st=0; //状态标志signedcharshangxian=38; //上限报警温度,默认值为38signedcharxiaxian=5; //下限报警温度,默认值为38ucharcode LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*****延时子程序*****/voidDelay(uintnum){ while(--num);
4、}/*****初始化定时器0*****/voidInitTimer(void){ TMOD=0x1; TH0=0x3c; TL0=0xb0; //50ms(晶振12M)}/*****定时器0中断服务程序*****/voidtimer0(void)interrupt1{ TH0=0x3c; TL0=0xb0; x++;}/*****外部中断0服务程序*****/voidint0(void)interrupt0{ EX0=0; //关外部中断0 if(DEC==0&&set_st==1) { shangxian--; if(shangxian5、gxian=xiaxian; } elseif(DEC==0&&set_st==2) { xiaxian--; if(xiaxian<0)xiaxian=0; }}/*****外部中断1服务程序*****/voidint1(void)interrupt2{ EX1=0; //关外部中断1 if(ADD==0&&set_st==1) { shangxian++; if(shangxian>99)shangxian=99; } elseif(ADD==0&&set_st==2) { xiaxian++; if(xiaxian>shangxian)xiaxian=shangxi6、an; } }/*****读取温度*****/voidcheck_wendu(void){ uinta,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;} //设置温度显示上限 }/*****显示开机初始化等待画面*****/Di7、sp_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;
5、gxian=xiaxian; } elseif(DEC==0&&set_st==2) { xiaxian--; if(xiaxian<0)xiaxian=0; }}/*****外部中断1服务程序*****/voidint1(void)interrupt2{ EX1=0; //关外部中断1 if(ADD==0&&set_st==1) { shangxian++; if(shangxian>99)shangxian=99; } elseif(ADD==0&&set_st==2) { xiaxian++; if(xiaxian>shangxian)xiaxian=shangxi
6、an; } }/*****读取温度*****/voidcheck_wendu(void){ uinta,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;} //设置温度显示上限 }/*****显示开机初始化等待画面*****/Di
7、sp_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;
此文档下载收益归作者所有