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

惠州专业网站建设公司哪里有互联网营销中心

惠州专业网站建设公司哪里有,互联网营销中心,如何推广一个项目,网页美工兼职目录 1设计内容 2ds18b20介绍 2.1传感器引脚及原理图 2.2寄存器配置 3程序实现 3.1配置初始化 3.2配置寄存器 3.3ROM读取 3.4温度读取 1设计内容 通过51单片机,读取总线上挂载的多个ds18b20的温度信息。 如下图,成功读取到3路温度数据。 2ds18…

目录

1设计内容

2ds18b20介绍

2.1传感器引脚及原理图

2.2寄存器配置

3程序实现

3.1配置初始化

3.2配置寄存器

3.3ROM读取

3.4温度读取


1设计内容

通过51单片机,读取总线上挂载的多个ds18b20的温度信息。

如下图,成功读取到3路温度数据。

2ds18b20介绍

2.1传感器引脚及原理图


DS18B20传感器的引脚及封装图如下:


DS18B20一共有三个引脚,分别是:

GND:电源地线
DQ:数字信号输入/输出端。
VDD:外接供电电源输入端。


单个DS18B20接线方式: VDD接到电源,DQ接单片机引脚,同时外加上拉电阻,GND接地

注意这个上拉电阻是必须的,就是DQ引脚必须要一个上拉电阻.

2.2寄存器配置

DS18B20写入的功能命令:

ROM指令:

采用多个DS18B20时,需要写ROM指令来控制总线上的某个DS18B20
如果是单个DS18B20,直接写跳过ROM指令0xCC即可
在这里插入图片描述

RAM指令,DS18B20的一些功能指令

常用的是:

温度转换 0x44

开启温度读取转换,读取好的温度会存储在高速暂存器的第0个和第一个字节中

读取温度 0xBE
读取高速暂存器存储的数据
在这里插入图片描述

3程序实现

3.1配置初始化

/**初始化DS18B20**/
bit InitDS18B20ACK(){bit ACK;//用来判断DS18B20是否初始化成功EA = 0;DS18B20_IO = 0;DS18B20_delayms(1);DS18B20_IO = 1;DS18B20_delayms(1);DS18B20_IO = 0;DS18B20_delayms(1);ACK = DS18B20_IO;DS18B20_IO = 1;DS18B20_delayms(1);while(!DS18B20_IO);//等待脉冲结束EA = 1;return ACK;
}

3.2配置寄存器

3.2.1读取ROM测试

在每个DS18B20内部都有一个唯一的64位长的序列号,这个序列号值就存在DS18B20内部的ROM中。开始的8位是产品类型编码(DS18B20是28H),接着的48位是每个器件唯一的序号,最后的8位是CRC校验码。
在这里插入图片描述

一线总线系统使用单总线主控来控制一个或多个从机设备。每个DS18B20都有独立唯一的64位-ID,此特性决定了它可以将任意多的DS18b20挂载到一根总线上,通过ROM搜索读取相应DS18B20的温度值。

/**启动DS18B20进行温度的采集以及转换,并返回读取成功与否**/
bit startDs18b201(){	bit ACK;uchar i,x,k,z;uchar MSB,LSB;uchar temp[8];
x=0;k=0;ACK = InitDS18B20ACK();//总线初始化是否完成if(ACK == 0){writeToDs18b20(0x33);//跳过ROM的验证操作//writeToDs18b20(0xbe);//发送一个读取的命令for(i=0;i<8;i++){MSB = readeToDs18b20();dis0[i]=MSB;}for(i=0;i<4;i++){k=IntToString(temp,(int)dis0[i]);for(z=0;z<k;z++){LCD_Write_Char(x++,0,temp[z]);}}/*x=0;for(i=0;i<4;i++){k=IntToString(temp,(int)dis0[i+4]);for(z=0;z<k;z++){LCD_Write_Char(x++,1,temp[z]);}}*/LCD_Write_String(0,1,dis0);while(1);//DS18B20_delayms(500);  //上电转换需要延时足够长时间,否则会读出默认值85  会造成main里面后续任务一直等待,改为通过变量控制。}return ACK;//ACK == 0 启动成功,1就不成功
}

通过连接多个温湿度测试,第一位都是( ,对应16进制28,10进制40.

3.3ROM读取

上面那个只是测试,直接用下面这个读取rom

/*************************************************************************************************************************
*函数        	:	u8 DS18B20_SearchROM(u8 (*pID)[8],u8 Num)
*功能        	:	搜索DS18B20 ROM
*参数        	:	pID:DS18B20 ID缓冲区指针Num:DS18B20数目,必须事先知道
*返回        	:	搜索到的DS18B20数目
*说明        	:	程序必须事先知道DS18B20数目,搜索的数目只会小于这个数目代码移植于互联网
*************************************************************************************************************************/
u8 DS18B20_SearchROM(u8 (*pID)[8],u8 Num)
{ unsigned char k,l,chongtuwei,m,n;unsigned char zhan[(MAXNUM)]= {0x00 };  //一定要初始化为0,否则会概率性搜错unsigned char ss[64];bit ACK;uchar MSB,LSB;uchar dis1111[16];u8 num = 0;l=0;chongtuwei=0;do{ACK = InitDS18B20ACK();writeToDs18b20(0xf0);//搜索rom//DS18B20_WriteData(0xf0);	for(m=0;m<8;m++){unsigned char s=0;for(n=0;n<8;n++){k=DS18B20_Read2Bit();//读两位数据if(n==1){sprintf(dis1111,"dis1111 %d ",(int)k);LCD_Write_String(0,0,dis1111);//while(1);}k=k&0x03;s>>=1;if(k==0x01)//01读到的数据为0 写0 此位为0的器件响应{   		DS18B20_WriteBit (0);ss[(m*8+n)]=0;}else if(k==0x02)//读到的数据为1 写1 此位为1的器件响应{s=s|0x80;DS18B20_WriteBit (1);ss[(m*8+n)]=1;}else if(k==0x00)//读到的数据为00 有冲突位 判断冲突位 {				//如果冲突位大于栈顶写0 小于栈顶写以前数据 等于栈顶写1chongtuwei=m*8+n+1;					if(chongtuwei>zhan[l]){						DS18B20_WriteBit (0);ss[(m*8+n)]=0;												zhan[++l]=chongtuwei;						}else if(chongtuwei<zhan[l]){s=s|((ss[(m*8+n)]&0x01)<<7);DS18B20_WriteBit (ss[(m*8+n)]);}else if(chongtuwei==zhan[l]){s=s|0x80;DS18B20_WriteBit (1);ss[(m*8+n)]=1;l=l-1;}}else{return num;	//搜索完成,//返回搜索到的个数}}pID[num][m]=s;		}num=num+1;}while(zhan[l]!=0&&(num<MAXNUM));	return num;		//返回搜索到的个数
}

3.4温度读取

	do{num = DS18B20_SearchROM(ID_Buff,DS18B20_NUM);sprintf(dis0,"DS18B20_NUM %d ",(int)DS18B20_NUM);LCD_Write_String(0,0,dis0);sprintf(dis1,"num %d ",(int)num);LCD_Write_String(0,1,dis1);	}while(num!=DS18B20_NUM);startDs18b20();//while(1);DelayMs(500);DelayMs(500);DelayMs(500);DelayMs(500);while(1){//温度传感器-----startif(readTemFlags == 1){readTemFlags = 0;//清零//DelayMs(500);  //启动ds18b20后一定要延时,流出转换时间,否则读出为-1temperature = DS18B20_ReadDesignateTemper(ID_Buff[i ++]);startDs18b20();temp_int = temperature/100;//取整数部分temp_dec = temperature%100;//取小数部分len = IntToString(str,(int)temp_int);}//temperature = temperature >> 4;sprintf(dis1,"temp[%d] %d.%d   ",(int)i,(int)temp_int,(int)temp_dec);LCD_Write_String(0,1,dis1);if(i>3) i=0;DelayMs(100);DelayMs(500);DelayMs(500);DelayMs(500);}

项目整体链接如下。

https://download.csdn.net/download/weixin_51248645/88797969

http://www.yayakq.cn/news/106584/

相关文章:

  • ddns做网站浙江网站建设品牌升级
  • 网站的内容包括什么河南省鹤壁市住房和城乡建设局网站
  • 最全的数据网站wordpress 内容字段
  • 全景图制作平台网站建设中山口碑seo推广
  • 建设单位经常去哪个网站WordPress 发不了文章
  • 做培训的网站泉州关键词网站排名
  • 电子商务和网络购物网站广告公司现状
  • 食品网站建设规划网站建设丨金手指谷哥14
  • 如何做微信官方网站莱芜论坛莱芜在线
  • 网站建站卖首饰侵权天水模板型网站建设
  • jsp网站购物车怎么做网站seo设置是什么
  • 论坛网站开发框架angular六种常见的网络广告类型
  • 怎么自己做个网站打开一个网站
  • 做网站的是哪类公司网站建设技术风险
  • 有设计感的网站网站建设html代码如何添加
  • 西安网站制作价格端端网站开发
  • qq音乐怎么做mp3下载网站做直播网站需要证书吗
  • 樟木头镇网站建设公司韩国女排出线
  • wordpress网站能APP吗婚庆网站开发工具
  • 网站正在建设 英文翻译开网站的是啥公司
  • 企业网站的功能网站建设文件名
  • 网站空间太小网页制作工具通常在什么上建立热点
  • 如何做一个公司网站学做川菜最好的网站
  • 网站搭建 保定广州专业网站设计定制
  • 建设银行网站用户名忘了怎么办a做片手机免费网站
  • wordpress后天地址小辉seo
  • 一个专门做海鲜的网站有哪些做汽车变速箱的门户网站
  • 门户网站内容维护流程学校建设网站费用申请报告
  • 服装网站项目的设计方案wordpress加悬浮
  • 做网站可以申请个体户么企业网站需要多大空间