文档详情

DS18B20温度传感器测温通过数码管显示(上传).doc

发布:2017-01-31约字共13页下载文档
文本预览下载声明
DS18B20温度传感器测温通过数码管显示(详尽版) /*----------------------------------------------- 名称:DS18B20温度传感器数码管显示 编写:JR 日期:2017.12 修改:无 内容:利用DS18B20温度传感器测量温度-40~+100℃,通过数码管显示单片机开发板使用“金容电子(/item.htm?id=544540401703)”开发的JR51单片机开发板。 ------------------------------------------------*/ #includereg52.h #includestdio.h #includeintrins.h #includedelayus.h #define uchar unsigned char #define uint unsigned int sbit DQ=P2^2; //温度传感器信号线 sbit dula=P2^6; //数码管段选线 sbit wela=P2^7; //数码管位选线 sbit beep=P2^3; //数码管位选线 uint temper; uchar a1,a2,a3,a4,a5,n; uint aaa,num; uint warn_l=3000; //低温-40℃报警,测试温度乘以100 uint warn_h=10000; //高温100℃报警,测试温度乘以100 float ttt; void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5); const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x40,0x00};//不带小数点0-9编码 const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; //带小数点0-9编码 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 void delay(uint z) { uint x,y; for(x=z;x0;x--) for(y=110;y0;y--); } /******************************************************************* 18B20复位初始化函数 1、将数据线拉高到1 2、延时2us(该时间要求不是很严格,但是要尽可能短一点) 3、将数据线拉低到0 4、延时750us(该时间范围可以在480~960us) 5、将数据线拉高到1 6、延时等待(70us),如果初始化成功则在15~60us内产生一个由18B20返回的低电平0, 据该状态可以确定它的存在。但是应注意,不能无限的等待,不然会使程序进入死循环,所以要进行超时判断。 7、若CPU读到数据线上的低电平0后,还要进行延时,其延时时间从发出高电平算起(第5步的时间算起最少要480us)。 8、将数据线再次拉高到1后结束 **********************************************************************/ void dsreset() { uchar st=1; DQ=1; //拉高数据线 _nop_();_nop_(); while(st) { DQ=0; //控制器向DS18B20发低电平脉冲 delayus(81); //延时750us左右 DQ=1; ////控制器拉高总线 delay70us(); //延时70us if(DQ==1)st=1; else st=0; delayus(54); //延时500us等待 } } /******************************************************************* 向DS18B20写一个字节函数 1、将数据线置低电平0 2、延时15us 3、按从低位到高位的顺序发送数据(一次只发送一位) 4、延时45us 5、将数据线拉高到1 6、重复1~5步骤,直到发送完整个字节
显示全部
相似文档