完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
DS18b20的培训总结 DS18b20是一个美国公司的一个产品,可以显示温度,对比与DHT11芯片的话它的优势就是可以更加精准的显示温度,下面是进行简单的初始化介绍,我们可以根据以下时序图进行1602的初始化设置
先将数据位置为高电平,进行短暂的延时,再将数据位拉低,延时480us-960us之间,再将数据位拉高,延时等待15~60us之内会由DS18B20所返回的低电平(不用人为置为低电平),这这里要特别注意一下不能不限的延时等待,要进行一个超时判断。若单片机读取到了DS18b20所返回的一个低电平信号,还要做出延时至少480us,再将数据线拉高后结束。 以下就是DS18B20的代码初始化函数 假设数据为为 IO uchar DS18B20Init() { int flag = 0; IO = 1; nop(); IO = 0; delay500us(); IO = 1; delay60us(); If(IO == 0) { flag = 1; return flag; } nop(); IO = 1; return flag; } 以上这个函数就是DS18B20启动初始化函数,判断初始化是否成功我们可以设定一个标志位flag 这样比较好进行判断是否初始化成功 还要进行读取64位ROM指令,以下函数就是 void Read_ROM(void) { int i; DS18B20Init(); write_Byte(0x33); //读取ROM指令 for(i = 0; i < 8; i++) { ROM = Read_Byte(); } } 我们需要对DS18b20进行数据的写入,当然命令也是一种数据,根据上面那个时序图进行数据的写函数 void Write_byte(uchar dat) { uchar i; for(i = 0; i < 8; i++) { IO = 0; nop(); IO = dat & 0x01 ;// 将数据写入IO口中 Delay60us(); IO = 1; dat = dat >>1; } delay60us(); } 函数的讲解如下 先将数据线先置为低电平,短暂的延时,按照从低位向高位发送数据(一次只能发送一位),延时等待60us,将数据线拉到高电平。 我们可以对DS18n20进行数据和命令的写入,一般的初始化写入命令如下 Write_Byte(0xcc);//跳过读序号指令 Write_Byte(0x44); //启动温度转换 Write_Byte(0xbe); 我们也需要从芯片中读取数据,读取数据也是看时序图的 在这里通过函数进行实现 uchar Read_Byte(void) { int i; uchar byte = 0; for(i = 0; i < 8; i++) { byte >>= 1; IO = 0; delay15us(); if(IO) { byte = byte | 0x80; //每一次读取一位数据 } byte = byte>>1; delay45us(); } return byte; } 当我们读取到芯片反馈回来的数据后,我们需要对所得到的数据进行处理才可以 先获取数据 LOW_Byte = Read_Byte(); //获取温度低八位 Hight_Byte = Read_Byte(); // 获取温度高八位 由于获取的数据是十六进制,我们需要将数据进行转化成整型数据 可以通过写一个函数进行实现 uint temper_change() { uint temper; float tp; temper = Read_Byte(); if(temper < 0) { temper = temper - 1; temper = ~temper; tp = temper * 0.062; //将16位温度转换成十进制 temper = tp * 100 + 0.5 ; //留取两个小数点 } else { tp = temper * 0.0625; temper = tp * 100 + 0.5; //保留两位小数 } return temper; } 最后,将获取的temper数据进行显示即可。 |
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1124浏览 3评论
579浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1863浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 08:53 , Processed in 1.284023 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号