ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换

ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换

ID:35733213

大小:16.32 KB

页数:8页

时间:2019-04-15

ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换_第1页
ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换_第2页
ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换_第3页
ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换_第4页
ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换_第5页
资源描述:

《ds18b20程序包含温度设置、报警、华氏温度和摄氏温度转换》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、#include#includefloatflag=0;unsignedintup=30,down=20,kf=1,hfflag=1,hf;//up为报警温度上限值,down为报警温度下限值;//kf为报警温度设定标志位,kf为1,数码管显示温度值,kf=0,进入报警温度设定选项。//hfflag为摄氏度与华氏温度转换标志位,hfflag=1,显示的为摄氏度值,hfflag=0,显示的为华氏温度值。//hf为用来存储华氏温度。sbitDQ=P2^0;//ds18b20端口unsignedchartab[]={0x3f,0x06,

2、0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x63,0x40,0x71};//0x39,0x63用来显示摄氏度,0x40用来显示--。unsignedchartabb[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带有小数点的0-9.voiddisplayset();voiddelayms(intx)//延时1ms函数{intm,j;for(m=1;m<=x;m++)for(j=1;j<=123;j++);}voidreset()//对ds18b20进行复位

3、{unsignedinti;DQ=1;//DQ复位_nop_();//稍做延时,此为延时1ms函数DQ=0;//单片机将DQ拉低i=70;while(i>0)i--;//根据协议要满足大于480usDQ=1;//拉高总线i=4;while(i>0)i--;}voiddswait()//等待ds18b20响应的函数{while(DQ);while(~DQ);//检测到应答脉冲}bitreadone()//读取一位数据{unsignedinti;bitb;DQ=0;i++;//根据资料,进行一次unsignedint型数据的++,大约为8us时间,此处i++,符合协议要求至

4、少保持1usDQ=1;i++;i++;//延时约16us,符合协议要求的至少延时15us以上b=DQ;i=8;while(i>0)i--;//延时约64us,符合读时隙不低于60us要求return(b);}unsignedcharreadB()//读取一字节数据{unsignedinti;unsignedcharj,dat=0;for(i=0;i<8;i++){j=readone();dat=(j<<7)

5、(dat>>1);//将每一次输出的值通过移位相或送到dat}return(dat);}voidwriteB(unsignedchardat)//写操作,通过次函数

6、可以控制ds18b20进行一系列操作{unsignedinti;unsignedcharj;bitb;for(j=0;j<8;j++){b=dat&0x01;dat>>=1;if(b)//写"1",将DQ拉低15us后,在15us~60us内将DQ拉高,即完成写1{DQ=0;i++;i++;//此处延时16us。满足延时15us以后DQ=1;//将DQ拉高i=8;while(i>0)i--;//延时约64us,符合写时隙不低于60us要求}else////写"0",将DQ拉低60us~120us{DQ=0;i=8;while(i>0)i--;DQ=1;i++;i++;/

7、/整个写0时隙过程已经超过60us}}}voidsendchange()//温度转换{reset();dswait();delayms(1);writeB(0xcc);//写入跳过序列号命令字writeB(0x44);//写入温度转换命令字}voidsendread()//读取数据{reset();dswait();delayms(1);writeB(0xcc);//写入跳过序列号命令字writeB(0xbe);//写入读取数据令字}intgetvalue()//获取温度函数{unsignedinttempvalue;longtemp1,temp2;intvalue,f

8、inal;floatt;unsignedcharlow,high;sendread();//读取数据low=readB();high=readB();tempvalue=high;tempvalue<<=8;tempvalue

9、=low;value=tempvalue;t=value*(0.0625);//精度值为0.0625temp1=t*1000;temp2=t*100;if((temp1-temp2*10)>=5)//四舍五入{t=t+(0.01);final=t*100;hf=(32+t*1.8)*100;//华氏温度转换}els

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。