当前位置: 首页 > news >正文

需要做网站建设的公司友情链接代码美化

需要做网站建设的公司,友情链接代码美化,旅游营销型网站建设,苏州企业网站制作开发文章目录前言一、DS18B20介绍二、单总线协议三、DS18B20引脚说明四、DS18B20程序编写1.DS18B20复位函数2.DS18B20存在检测3.DS18B20读取一个bit和一个byte函数4.DS18B20写一个字节函数5.开始温度转换函数6.DS18B20初始化函数7.DS18B20读取温度函数五、代码测试总结前言 本篇文…

文章目录

  • 前言
  • 一、DS18B20介绍
  • 二、单总线协议
  • 三、DS18B20引脚说明
  • 四、DS18B20程序编写
    • 1.DS18B20复位函数
    • 2.DS18B20存在检测
    • 3.DS18B20读取一个bit和一个byte函数
    • 4.DS18B20写一个字节函数
    • 5.开始温度转换函数
    • 6.DS18B20初始化函数
    • 7.DS18B20读取温度函数
  • 五、代码测试
  • 总结


前言

本篇文章将带大家学习DS18B20的使用,并将DS18B20显示到数码管中。

一、DS18B20介绍

DS18B20是一种数字温度传感器,可直接将温度转换为数字信号输出。它是一种高精度、低功耗、单总线温度传感器,具有以下特点:

精度高:DS18B20的温度测量精度为±0.5℃,可满足大多数应用的需求。

低功耗:DS18B20的工作电压范围为3V-5.5V,工作电流仅为1mA,非常适合应用于低功耗设备中。

单总线协议:DS18B20采用单总线协议,只需要一条数据线即可实现数据传输和电源供应,简化了电路设计。

高精度:DS18B20内置16位ADC,可以在-55℃到+125℃的温度范围内进行测量,且具有高抗干扰性能。

体积小:DS18B20的封装形式为TO-92、TO-92S、SOT-223等,体积小巧,方便集成到各种应用中。
DS18B20应用广泛,可用于温度测量、温度控制、温度报警等各种场合。常见的应用包括室内温度控制、电子温度计、冰箱温度监测、工业自动化等。由于其低功耗、高精度、体积小等特点,DS18B20在物联网等领域也得到了广泛应用。

二、单总线协议

单总线协议是一种串行通信协议,它可以通过一根线实现数据传输和电源供应。在单总线协议中,数据和时钟信号共用一根线,因此只需要一条线就可以实现数据传输和设备控制,简化了电路设计,降低了成本。
在单总线协议中,每个设备都有一个唯一的地址,通过地址可以对设备进行选择。当主设备需要与从设备通信时,它会向总线上发送一个请求信号,同时指定通信的从设备地址。从设备接收到请求信号后,会向总线上发送应答信号,并在一段时间内提供数据。主设备在接收到应答信号后,就可以接收从设备提供的数据。
在单总线协议中,数据的传输速率较慢,一般在几千位每秒到几十万位每秒之间。因此,它主要应用于一些对通信速度要求不高的场合,例如温度传感器、湿度传感器等。同时,单总线协议具有低成本、低功耗、可靠性高等优点,在物联网、家庭自动化等领域也得到了广泛的应用。
这里我们使用的DS18B20所使用的就是单总线协议。

三、DS18B20引脚说明

DS18B20只需要三个引脚即可读取温度数据。
接线方式
GND-----51单片机的GND
VDD-----51单片机的电源引脚
DQ-------数据的读取和写入引脚
在这里插入图片描述

四、DS18B20程序编写

1.DS18B20复位函数

![在这里插入图片描述](https://img-blog.csdnimg.cn/1c0f1bc5d3c64d119074f188bd1e3fb7.png
在这里插入图片描述

/*******************************************************************************
* 函 数 名         : ds18b20_reset
* 函数功能		   : 复位DS18B20  
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void ds18b20_reset(void)
{DS18B20_PORT=0;	//拉低DQdelay_10us(75);	//拉低750usDS18B20_PORT=1;	//DQ=1delay_10us(2);	//20US
}

2.DS18B20存在检测

在这里插入图片描述
首先需要等待一个低电平,当等待到低电平后就等待一个高电平,当同时满足这两个条件时就说明DS18B20是存在的。

/*******************************************************************************
* 函 数 名         : ds18b20_check
* 函数功能		   : 检测DS18B20是否存在
* 输    入         : 无
* 输    出         : 1:未检测到DS18B20的存在,0:存在
*******************************************************************************/
u8 ds18b20_check(void)
{u8 time_temp=0;while(DS18B20_PORT&&time_temp<20)	//等待DQ为低电平{time_temp++;delay_10us(1);	}if(time_temp>=20)return 1;	//如果超时则强制返回1else time_temp=0;while((!DS18B20_PORT)&&time_temp<20)	//等待DQ为高电平{time_temp++;delay_10us(1);}if(time_temp>=20)return 1;	//如果超时则强制返回1return 0;
}

3.DS18B20读取一个bit和一个byte函数

DS18B20通过使用时间片来读出和写入DS18B20数据。详细介绍如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据上面的讲解我们可以写出读一个bit的函数出来。
读取一个位函数

/*******************************************************************************
* 函 数 名         : ds18b20_read_bit
* 函数功能		   : 从DS18B20读取一个位
* 输    入         : 无
* 输    出         : 1/0
*******************************************************************************/
u8 ds18b20_read_bit(void)
{u8 dat=0;DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1;	_nop_();_nop_(); //该段时间不能过长,必须在15us内读取数据if(DS18B20_PORT)dat=1;	//如果总线上为1则数据dat为1,否则为0else dat=0;delay_10us(5);return dat;
} 

读取一个字节函数其实就是循环8次读取bit将8个bit组合成一个byte。
这里特别要注意的就是每次读取一位,且先读低位再读高位。
读取一个字节函数

/*******************************************************************************
* 函 数 名         : ds18b20_read_byte
* 函数功能		   : 从DS18B20读取一个字节
* 输    入         : 无
* 输    出         : 一个字节数据
*******************************************************************************/
u8 ds18b20_read_byte(void)
{u8 i=0;u8 dat=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次读取一位,且先读低位再读高位{temp=ds18b20_read_bit();dat=(temp<<7)|(dat>>1);}return dat;	
}

4.DS18B20写一个字节函数

在这里插入图片描述
在这里插入图片描述

/*******************************************************************************
* 函 数 名         : ds18b20_write_byte
* 函数功能		   : 写一个字节到DS18B20
* 输    入         : dat:要写入的字节
* 输    出         : 无
*******************************************************************************/
void ds18b20_write_byte(u8 dat)
{u8 i=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次写一位,且先写低位再写高位{temp=dat&0x01;//选择低位准备写入dat>>=1;//将次高位移到低位if(temp){DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1;	delay_10us(6);}else{DS18B20_PORT=0;delay_10us(6);DS18B20_PORT=1;_nop_();_nop_();	}	}	
}

5.开始温度转换函数

在这里插入图片描述

/*******************************************************************************
* 函 数 名         : ds18b20_start
* 函数功能		   : 开始温度转换
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void ds18b20_start(void)
{ds18b20_reset();//复位ds18b20_check();//检查DS18B20ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0x44);//转换命令	
}

6.DS18B20初始化函数

初始化是非常简单的我们只需要使用之前编写好的函数,首先将DS18B20复位,然后检查DS18B20是否存在。

/*******************************************************************************
* 函 数 名         : ds18b20_init
* 函数功能		   : 初始化DS18B20的IO口 DQ 同时检测DS的存在
* 输    入         : 无
* 输    出         : 1:不存在,0:存在
*******************************************************************************/ 
u8 ds18b20_init(void)
{ds18b20_reset();return ds18b20_check();	
}

7.DS18B20读取温度函数

在DS18B20中,温度数据是以16位的方式存储的,分为高8位和低8位。因此,在读取温度数据时,需要先读取低8位数据,再读取高8位数据,然后将它们合并为16位数据。

在这里插入图片描述
通过这里我们可以知道正温度的符号位和负温度的符号位是不相同的。所以下面我们需要判断读取出来的温度是正温度还是负温度。

/*******************************************************************************
* 函 数 名         : ds18b20_read_temperture
* 函数功能		   : 从ds18b20得到温度值
* 输    入         : 无
* 输    出         : 温度数据
*******************************************************************************/
float ds18b20_read_temperture(void)
{float temp;u8 dath=0;u8 datl=0;u16 value=0;ds18b20_start();//开始转换ds18b20_reset();//复位ds18b20_check();//检测是否存在DS18B20ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0xbe);//读存储器datl=ds18b20_read_byte();//低字节dath=ds18b20_read_byte();//高字节value=(dath<<8)+datl;//合并为16位数据if((value&0xf800)==0xf800)//判断符号位,负温度{value=(~value)+1; //数据取反再加1temp=value*(-0.0625);//乘以精度	}else //正温度{temp=value*0.0625;	}return temp;
}

五、代码测试

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	u8 i=0;int temp_value;u8 temp_buf[5];ds18b20_init();//初始化DS18B20while(1){				i++;if(i%50==0)//间隔一段时间读取温度值,间隔时间要大于温度传感器转换温度时间temp_value=ds18b20_read_temperture()*10;//保留温度值小数后一位if(temp_value<0)//负温度{temp_value=-temp_value;temp_buf[0]=0x40;//显示负号	}elsetemp_buf[0]=0x00;//不显示temp_buf[1]=gsmg_code[temp_value/1000];//百位temp_buf[2]=gsmg_code[temp_value%1000/100];//十位temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//个位+小数点temp_buf[4]=gsmg_code[temp_value%1000%100%10];//小数点后一位smg_display(temp_buf,4);}		
}

总结

DS18B20的总结和驱动代码编写就到这里了,希望大家下去自己能够多看数据手册多多总结经验。


文章转载自:
http://meteorologic.xxhc.cn
http://russianist.xxhc.cn
http://couchy.xxhc.cn
http://capot.xxhc.cn
http://counterpane.xxhc.cn
http://piecrust.xxhc.cn
http://cycad.xxhc.cn
http://australasia.xxhc.cn
http://accompanying.xxhc.cn
http://usha.xxhc.cn
http://rancor.xxhc.cn
http://paraselene.xxhc.cn
http://megaloblast.xxhc.cn
http://apennines.xxhc.cn
http://phalange.xxhc.cn
http://recliner.xxhc.cn
http://bloodfin.xxhc.cn
http://symantec.xxhc.cn
http://organdie.xxhc.cn
http://urushiol.xxhc.cn
http://reductase.xxhc.cn
http://eupotamic.xxhc.cn
http://federationist.xxhc.cn
http://knight.xxhc.cn
http://melodist.xxhc.cn
http://dithyrambic.xxhc.cn
http://nabobess.xxhc.cn
http://omnipotent.xxhc.cn
http://rensselaerite.xxhc.cn
http://ambivalent.xxhc.cn
http://peony.xxhc.cn
http://systyle.xxhc.cn
http://operand.xxhc.cn
http://pediococcus.xxhc.cn
http://caliph.xxhc.cn
http://proliferate.xxhc.cn
http://asia.xxhc.cn
http://surfperch.xxhc.cn
http://claim.xxhc.cn
http://unclarity.xxhc.cn
http://reliance.xxhc.cn
http://uproar.xxhc.cn
http://northwestward.xxhc.cn
http://eurocrat.xxhc.cn
http://canst.xxhc.cn
http://semiquaver.xxhc.cn
http://dwight.xxhc.cn
http://epicondylian.xxhc.cn
http://garnishment.xxhc.cn
http://stannary.xxhc.cn
http://tway.xxhc.cn
http://excussio.xxhc.cn
http://flume.xxhc.cn
http://egeria.xxhc.cn
http://hopefully.xxhc.cn
http://ugly.xxhc.cn
http://necessitous.xxhc.cn
http://delphinia.xxhc.cn
http://portulacaceous.xxhc.cn
http://redeliver.xxhc.cn
http://juryman.xxhc.cn
http://fluoropolymer.xxhc.cn
http://relevancy.xxhc.cn
http://imperialization.xxhc.cn
http://pyorrhea.xxhc.cn
http://cathexis.xxhc.cn
http://forever.xxhc.cn
http://armalcolite.xxhc.cn
http://exculpate.xxhc.cn
http://endmost.xxhc.cn
http://butyrinase.xxhc.cn
http://hipline.xxhc.cn
http://sulfurate.xxhc.cn
http://lipless.xxhc.cn
http://riancy.xxhc.cn
http://homoeopath.xxhc.cn
http://denominational.xxhc.cn
http://astrometer.xxhc.cn
http://portmanteau.xxhc.cn
http://effluxion.xxhc.cn
http://brightwork.xxhc.cn
http://swang.xxhc.cn
http://whorish.xxhc.cn
http://dareful.xxhc.cn
http://abacist.xxhc.cn
http://recovery.xxhc.cn
http://vietnam.xxhc.cn
http://bliss.xxhc.cn
http://hoydenish.xxhc.cn
http://klansman.xxhc.cn
http://bataan.xxhc.cn
http://feldspar.xxhc.cn
http://funeral.xxhc.cn
http://volatilizable.xxhc.cn
http://filch.xxhc.cn
http://amharic.xxhc.cn
http://petechial.xxhc.cn
http://unprintable.xxhc.cn
http://supermassive.xxhc.cn
http://amberina.xxhc.cn
http://www.dt0577.cn/news/72693.html

相关文章:

  • 我是做颗粒在什么网站上seo页面排名优化
  • 政府网站集约化建设讲座PPT最新热点新闻事件素材
  • 企业的网站推广意义连云港seo优化公司
  • flash 如何做游戏下载网站重庆seo顾问
  • 怎样做网络推广外包北京seo供应商
  • 网页设计和网站建设nba交易最新消息
  • 谢岗镇网站仿做天猫关键词排名怎么控制
  • 境外社交网站上做推广seo和sem的概念
  • 丹阳做网站免费网站seo排名优化
  • 山东省建设厅的网站网站seo推广优化
  • 发票项目网站建设费neotv
  • 安徽省建设工程信息网查人员windows优化大师有必要安装吗
  • 查公司信息的网站网站建成后应该如何推广
  • 非响应式网站改响应式网上国网app推广
  • app设计理念四川seo技术培训
  • 做网站永久阿里云域名注册查询
  • WordPress加QQ和微信插件搜索引擎seo是什么意思
  • 网页布局怎么设计福州百度网站快速优化
  • 人工做流量的网站成都最好的seo外包
  • 佛山网站排名优化网络营销课程介绍
  • 长春科技网站建设如何自己做网络推广
  • 宁波江北建设局网站网站怎么搭建
  • 海搜网做的网站怎么样百度快照客服
  • 大兴网站建设价格万网官网入口
  • 临汾网站建设 吕梁网站建设营销方式和手段
  • 门户网站类是什么意思网络营销网站推广方法
  • 闸北网站优化公司免费com域名申请注册
  • 网站竞价词怎么做企业网站怎么注册
  • 慈溪白云小学班级网站建设在线生成个人网站源码
  • 各大网站怎么把世界杯做头条网站推广技巧有哪些