- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ds1820 源程序网上有很多这样的例程啊。给你一个STC的,STC的下载程序方便,上手也比较快CPU:STC12C5A48S2 #include 18B20.h #includeintrins.h#include math.h //要用到取绝对值函数abs()/**************************************延时X微秒(STC12C5A60S2@12M)不同的工作环境,需要调整此函数此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同**************************************/ sbit DQ=P1^0; //定义18B20数据脚为P1.0端口void DelayXus(uint n){ while (n--) { _nop_(); _nop_(); }}void getTmp_Update(){ uint TPL,TPH,tmpvalue,value; float t; Room_tmep=0; DS18B20_Reset(); //设备复位 DS18B20_WriteByte(0xCC); //跳过ROM命令 DS18B20_WriteByte(0x44); //开始转换命令 while (!DQ){}; //等待转换完成 DS18B20_Reset(); //设备复位 DS18B20_WriteByte(0xCC); //跳过ROM命令 DS18B20_WriteByte(0xBE); //读暂存存储器命令 TPL = DS18B20_ReadByte(); //读温度低字节 TPH = DS18B20_ReadByte(); //读温度高字节tmpvalue = TPH; tmpvalue = 8; tmpvalue |= TPL; value = tmpvalue;t = value * 0.0625; //使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度 /* 如果将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入, 如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度, 如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度 */ Room_tmep=t; //得到最终温度}/**************************************复位DS18B20,并检测设备是否存在**************************************/void DS18B20_Reset(){ uchar i=0; CY = 1; while (CY) { DQ = 0; //送出低电平复位信号 DelayXus(240); //延时至少480us DelayXus(240); DQ = 1; //释放数据线 DelayXus(60); //等待60us CY = DQ; //检测存在脉冲 DelayXus(240); //等待设备释放数据线 DelayXus(180);i++;if (i50){AD_Error_code=1;return;}else{if (AD_Error_code==1){AD_Error_code=0;}} }}/**************************************从DS18B20读1字节数据**************************************/uint DS18B20_ReadByte(){ uchar i; uchar dat = 0; for (i=0; i8; i++) //8位计数器 { dat = 1; DQ = 0; //开始时间片 DelayXus(1); //延时等待 DQ = 1; //准备接收 DelayXus(1); //接收延时 if (DQ) dat |= 0x80; //读取数
文档评论(0)