关闭

关闭

关闭

封号提示

内容

首页 DS18B20报警_c程序.pdf

DS18B20报警_c程序.pdf

DS18B20报警_c程序.pdf

上传者: yuanshik812 2011-09-19 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《DS18B20报警_c程序pdf》,可适用于IT/计算机领域,主题内容包含******************************************************************程序名称:DSB符等。

******************************************************************程序名称:DSB温度测量、报警系统简要说明:DSB温度计温度测量范围~摄氏度可设置上限报警温度、下限报警温度即高于上限值或者低于下限值时蜂鸣器报警默认上限报警温度为、默认下限报警温度为报警值可设置范围:最低上限报警值等于当前下限报警值最高下限报警值等于当前上限报警值将下限报警值调为时为关闭下限报警功能******************************************************************#include<ATXh>#include"DSBh"#defineuintunsignedint#defineucharunsignedchar宏定义#defineSETP定义调整键#defineDECP定义减少键#defineADDP定义增加键#defineBEEPP定义蜂鸣器bitshanshuost闪烁间隔标志bitbeepst蜂鸣器间隔标志sbitDIAN=P^小数点ucharx=计数器signedcharm温度值全局变量ucharn温度值全局变量ucharsetst=状态标志signedcharshangxian=上限报警温度默认值为signedcharxiaxian=下限报警温度默认值为ucharcodeLEDData={xC,xF,xA,xB,x,x,x,xF,x,x,xff}*****延时子程序*****voidDelay(uintnum){while(num)}*****初始化定时器*****voidInitTimer(void){TMOD=xTH=xcTL=xbms(晶振M)}*****定时器中断服务程序*****voidtimer(void)interrupt{TH=xcTL=xbx}*****外部中断服务程序*****voidint(void)interrupt{EX=关外部中断if(DEC==setst==){shangxianif(shangxian<xiaxian)shangxian=xiaxian}elseif(DEC==setst==){xiaxianif(xiaxian<)xiaxian=}}*****外部中断服务程序*****voidint(void)interrupt{EX=关外部中断if(ADD==setst==){shangxianif(shangxian>)shangxian=}elseif(ADD==setst==){xiaxianif(xiaxian>shangxian)xiaxian=shangxian}}*****读取温度*****voidcheckwendu(void){uinta,b,cc=ReadTemperature()获取温度值并减去DSB的温漂误差a=c计算得到十位数字b=ca*计算得到个位数字m=c计算得到整数位n=ca*b*计算得到小数位if(m<){m=n=}设置温度显示上限if(m>){m=n=}设置温度显示上限}*****显示开机初始化等待画面*****Dispinit(){P=xbf显示P=xfDelay()P=xfbDelay()P=xfdDelay()P=xfeDelay()P=xff关闭显示}*****显示温度子程序*****DispTemperature()显示温度{P=xc显示CP=xfDelay()P=LEDDatan显示个位P=xfbDelay()P=LEDDatam显示十位DIAN=显示小数点P=xfdDelay()P=LEDDatam显示百位P=xfeDelay()P=xff关闭显示}*****显示报警温度子程序*****Dispalarm(ucharbaojing){P=xc显示CP=xfDelay()P=LEDDatabaojing显示十位P=xfbDelay()P=LEDDatabaojing显示百位P=xfdDelay()if(setst==)P=xelseif(setst==)P=xc上限H、下限L标示P=xfeDelay()P=xff关闭显示}*****报警子程序*****voidAlarm(){if(x>=){beepst=~beepstx=}if((m>=shangxianbeepst==)||(m<xiaxianbeepst==))BEEP=elseBEEP=}*****主函数*****voidmain(void){uintzInitTimer()初始化定时器EA=全局中断开关TR=ET=开启定时器IT=IT=checkwendu()checkwendu()for(z=z<z){Dispinit()}while(){if(SET==){Delay()do{}while(SET==)setstx=shanshuost=if(setst>)setst=}if(setst==){EX=关闭外部中断EX=关闭外部中断checkwendu()DispTemperature()Alarm()报警检测}elseif(setst==){BEEP=关闭蜂鸣器EX=开启外部中断EX=开启外部中断if(x>=){shanshuost=~shanshuostx=}if(shanshuost){Dispalarm(shangxian)}}elseif(setst==){BEEP=关闭蜂鸣器EX=开启外部中断EX=开启外部中断if(x>=){shanshuost=~shanshuostx=}if(shanshuost){Dispalarm(xiaxian)}}}}*****END*****DSBh:#include<ATXh>#defineDQP定义DSB总线IO*****延时子程序*****voidDelayDSB(intnum){while(num)}*****初始化DSB*****voidInitDSB(void){unsignedcharx=DQ=DQ复位DelayDSB()稍做延时DQ=单片机将DQ拉低DelayDSB()精确延时大于usDQ=拉高总线DelayDSB()x=DQ稍做延时后如果x=则初始化成功x=则初始化失败DelayDSB()}*****读一个字节*****unsignedcharReadOneChar(void){unsignedchari=unsignedchardat=for(i=i>i){DQ=给脉冲信号dat>>=DQ=给脉冲信号if(DQ)dat|=xDelayDSB()}return(dat)}*****写一个字节*****voidWriteOneChar(unsignedchardat){unsignedchari=for(i=i>i){DQ=DQ=datxDelayDSB()DQ=dat>>=}}*****读取温度*****unsignedintReadTemperature(void){unsignedchara=unsignedcharb=unsignedintt=floattt=InitDSB()WriteOneChar(xCC)跳过读序号列号的操作WriteOneChar(x)启动温度转换InitDSB()WriteOneChar(xCC)跳过读序号列号的操作WriteOneChar(xBE)读取温度寄存器a=ReadOneChar()读低位b=ReadOneChar()读高位t=bt<<=t=t|att=t*t=tt*放大倍输出并四舍五入return(t)}*****END*****

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/10
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部