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

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

ID:59547837

大小:11.71 KB

页数:8页

时间:2020-11-10

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

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

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端口unsigned

2、chartab[]={0x3f,0x06,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(

3、j=1;j<=123;j++);}voidreset()//对ds18b20进行复位{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;bi

4、tb;DQ=0;i++;//根据资料,进行一次unsignedint型数据的++,大约为8us时间,此处i++,符合协议要求至少保持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、)

6、(dat>>1);//将每一次输出的值通过移位相或送到dat}return(dat);}voidwriteB(unsignedchardat)//写操作,通过次函数可以控制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;

7、while(i>0)i--;//延时约64us,符合写时隙不低于60us要求}else////写"0",将DQ拉低60us~120us{DQ=0;i=8;while(i>0)i--;DQ=1;i++;i++;//整个写0时隙过程已经超过60us}}}voidsendchange()//温度转换{reset();dswait();delayms(1);writeB(0xcc);//写入跳过序列号命令字writeB(0x44);//写入温度转换命令字}voidsendread()//读取数据{reset();dswait();del

8、ayms(1);writeB(0xcc);//写入跳过序列号命令字writeB(0xbe);//写入读取数据令字}intgetvalue()//获取温度函数{unsignedinttempvalue;longtemp1,temp2;intvalue,final;floatt;unsignedcharlow,high;sendread();//读取数据low=readB();high=readB();tempvalue=high;tempvalue<<=8;tempvalue

9、=low;value=tempvalue;t=valu

10、e*(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. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。