




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/ds18b20 模块/DS18B20 是美国 DALLAS 半导体公司生产的可组网的一线式数字温度传感器,由于 DS18B20是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。以下是常见的 DS18B20 的测温程序,其正确性笔者已经通过仿真
2、实验和实际电路验证过。在程序设计时,只要将 ds18b20.c 和主程序放在同一个工程中,且在主程序中包含头文件ds18b20.h 即可。DS18B20头文件:ds18b20.h#ifndef_DS18B20_H_#define_DS18B20_H_voiddelay_18B20(unsignedinti);Init_DS18B20(void);ReadOneChar(void);WriteOneChar(unsignedchardat);ReadTemperature(void);#endif测温 C 程序:ds18b20.c#includesbitDQ=P1A0;定义通信端口unsigne
3、dcharsign;voiddelay_18B20(unsignedinti)(while(i-);)初始化函数Init_DS18B20(void)(unsignedcharx=0;DQ=1;/DQ 复位delay_18B20(8);稍做延时DQ=0;单片机将 DQ 拉低delay_18B20(80);/精确延时大于 480usDQ=1;拉高总线delay_18B20(14);x=DQ;稍做延时后如果 x=0 则初始化成功 x=1 则初始化失败delay_18B20(20);读一个字节ReadOneChar(void)(unsignedchari=0;unsignedchardat=0;for
4、(i=8;i0;i-)(DQ=0;/给脉冲信号dat=1;DQ=1;/给脉冲信号if(DQ)dat|=0 x80;delay_18B20(4);return(dat);写一个字节WriteOneChar(unsignedchardat)(unsignedchari=0;for(i=8;i0;i-)(DQ=0;DQ=dat&0 x01;delay_18B20(5);DQ=1;dat=1;读取温度ReadTemperature(void)(unsignedchara=0;unsignedcharb=0;unsignedintt=0,temp=0;Init_DS18B20();WriteOn
5、eChar(0 xCC);/跳过读序号列号的操作WriteOneChar(0 xBE);/读取温度寄存器等(共可读 9 个寄存器)delay_18B20(100);a=ReadOneChar();b=ReadOneChar();Init_DS18B20();WriteOneChar(0 xCC);/跳过读序号列号的操作前两个就是温度WriteOneChar(0 x44);/启动温度转换传感器返回值除 16 得实际温度值为了得到 2 位小数位,先乘 100,再除 16,考虑整型数据长度,技巧处理后先乘 25,再除 4,除 4 用右移实现temp=b&0 xf0;if(temp=0 xf0
6、)sign=0 x40;a=a;b=b;elsesign=0 x3f;b=b&0 x0f;t=(b*256+a)*25/4;return(sign,t);/网上程序/就算是用软件的方式提高精度也只是虚拟的温度,18B20 精度就是 0.0625 度,符合你的要求了,下面是我写的程序,有兴趣你可以参考一下。带报警设置#include#defineucharunsignedchar#defineuintunsignedintucharcodetable=0 xc0,0 xf9,0 xa4,0 xb0,/0,1,2,3共阳0 x99,0 x92,0 x82,0 xf8,/4,5,6,70 x
7、80,0 x90,0 x88,0 x83,/8,9,A,B0 xc6,0 xa1,0 x86,0 x8e,0 xbf,0 xff,);sbitw1=P0A0;sbitw2=P0A1;sbitw3=P0A2;sbitw4=P0A3;sbitw5=P0A4;sbitw6=P0A5;sbitw7=P0A6;sbitw8=P0A7;sbitDQ=P3A7;定义 18B20 数据线sbitbeep=P3A6;/sbitbeep=P3A0;bitsflag;/正负标志位uchartimecount;/中断次数变量ucharreaddata2;/保存温度数值数组 ucharROM8;ucharICROM28
8、;uchartemperature22;/读两个 18B20 存放温度数组uchartest,test0,test1;/保存温度数值中间变量ucharyi,er,san,shi,wu,liu,qi,ba;/定义数码管显示数变量delayms(uintt)uchartt;for(;t0;t-)for(tt=50;tt0;tt-);)voiddisplay(ucharyi,ucharer,ucharsan,ucharshi,ucharwu,ucharliu,ucharqi,ucharba)w8=1;2=tableyi;*数码管扫描程序*/delayms(5);w8=0;delayms(1);w7=
9、1;2=tableer;delayms(5);w7=0;delayms(1);w6=1;2=tablesan;delayms(5);w6=0;delayms(1);w5=1;2=tableshi;delayms(5);w5=0;delayms(1);w4=1;2=tablewu;delayms(5);w4=0;delayms(1);w3=1;2=tableliu;delayms(5);w3=0;delayms(1);w2=1;2=tableqi;delayms(5);w2=0;delayms(1);w1=1;2=tableba;delayms(5);w1=0;delayms(1);/*/*18
10、B20 程序*/voiddelay18b20(uinti)for(;i0;i-);reset(void)/复位 18B20ucharx=0;DQ=1;delay18b20(8);DQ=0;delay18b20(80);DQ=1;delay18b20(14);x=DQ;delay18b20(20);voidwritebyte_18b20(ucharcommand)/写字节到 18B20(uchari=0;for(i=8;i0;i-)DQ=0;DQ=command&0 x01;delay18b20(5);DQ=1;command=command1;)ucharreadbyte_18b20(
11、)/从 18b20 读出字节uchari=0;uchartemp=0;for(i=8;i0;i-)DQ=0;temp=1;DQ=1;if(DQ)temp|=0 x80;delay18b20(5);)return(temp);)*ucharreadROM()/读 18B20 的 ROMuchari;reset();writebyte_18b20(0 x33);for(i=0;i8;i+)ROM=readbyte_18b20();return(ROM);ucharwriteROM()匹配 ROM 并读出温度存到 temperature22数组uchari,j;for(j=0;j2;j+)reset
12、();writebyte_18b20(0 x55);for(i=0;i255)/如果低八位的值转为原码后大于 11111111(255),向高八位进 1readdata1+;test0=readdata0;test1=readdata1;test=(readdata1*256)+readdata0)/16;/把高位与低位的值转成 10 进制test0=(test0&0 x0f);/取小数位,低四位switch(test0)/判断小数位的值,也可以用取表方式,精确度为 0.0625 度case0 x00:liu=0;qi=6;break;case0 x01:liu=1;qi=2;brea
13、k;case0 x02:liu=1;qi=8;break;case0 x03:liu=2;qi=5;break;case0 x04:liu=3;qi=1;break;case0 x05:liu=3;qi=7;break;case0 x06:liu=4;qi=3;break;case0 x07:liu=5;qi=0;break;case0 x08:liu=5;qi=6;break;case0 x09:liu=6;qi=2;break;case0 x0a:liu=6;qi=8;break;case0 x0b:liu=7;qi=5;break;case0 x0c:liu=8;qi=1;break;case0 x0d:liu=8;qi=7;break;case0 x0e:liu=9;qi=3;break;case0 x0f:liu=9;qi=9;break;er=test/1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动漫人物形象策划合同标准文本
- 前期车位销售合同样本
- 跨行业设备采购合同
- 医药加盟合同范例
- 职业病法律顾问服务协议
- 病毒感染机制解析-全面剖析
- 单位考察合同样本
- 中律网合同范例
- 企业采购红酒合同范例
- 传媒公司培养主播合同范例
- DL∕T 547-2020 电力系统光纤通信运行管理规程
- 切尔诺贝利核电站事故工程伦理分析
- (无线)门禁系统报价单
- 水电站水利工程施工组织设计毕业论文
- 联想EAP案例分析
- 社会工作介入老年社区教育的探索
- 国开电大-工程数学(本)-工程数学第4次作业-形考答案
- 高考倒计时30天冲刺家长会课件
- 施工项目现金流预算管理培训课件
- 时行疾病(中医儿科学课件)
- 街道计生办主任先进事迹材料-巾帼弄潮显风流
评论
0/150
提交评论