精华内容
下载资源
问答
  • 课程设计 DS18B20 由于DS18B20’与单片机之间采 用的是串行数据传送&在对DS18B20
  • DS18B20_单片机数码管显示原理图程序,感觉还不错
  • ds18b20单片机的应用

    2009-04-29 20:17:02
    ds18b20单片机的应用,显示整数小数点,听使用的,大家一起分享
  • DS18B20单片机应用

    2012-01-20 11:46:59
    DS18B20单片机应用 2012年01月19日  ;DS18B20温度传感器7个LED数码显示程序(原创程序,请支持)  ;版权归Luiing所有,转载请说明出处  ORG 0000H  ;LED数码管采用动态,P0口接八个数据口,P2.0-P...
    DS18B20与单片机应用 
    2012年01月19日
      ;DS18B20温度传感器和7个LED数码显示程序(原创程序,请支持)
      ;版权归Luiing所有,转载请说明出处
      ORG 0000H
      ;LED数码管采用动态,P0口接八个数据口,P2.0-P2.2采用3-8译码器控制七个LED
      TX BIT P2.3 ;DS18B20数据口接P2.3
      FLAG BIT 10H
      TEMH EQU 50H ;整数部分
      TEML EQU 51H ;小数部分
      MOV SP,#60H
      CLR EA
      AJMP MAIN
      ORG 0200H
      MAIN:
      ;MOV R0,#10
      LCALL TMP;温度传感器设置
      LCALL CHANG;温度转换为十进制
      STR:LCALL DISPLAY;温度显示
      ;DJNZ R0,STR
      AJMP MAIN
      ;//
      TMP:;温度传感器DS18B20
      LCALL RESERT
      MOV A,#0CCH
      LCALL WRITE
      MOV A,#44H
      LCALL WRITE
      ;LCALL DELAY750;延时750Ms
      LCALL RESERT
      MOV A,#0CCH
      LCALL WRITE
      MOV A,#0BEH
      LCALL WRITE
      LCALL READ
      MOV 30H,A
      LCALL READ
      MOV 31H,A
      RET
      DELAY750:;750USDELAY
      SETB RS0
      MOV R0,#20
      MS2:MOV R1,#20
      MS1:MOV R2,#20
      DJNZ R2,$
      DJNZ R1,MS1
      DJNZ R0,MS2
      CLR RS0
      RET
      ;
      CHANG:;温度转换为十进制
      PUSH A
      PUSH B
      MOV A,31H
      ANL A,#07H
      SWAP A
      MOV B,A
      MOV A,30H
      ANL A,#0F0H
      SWAP A
      ADD A,B MOV TEMH,A MOV A,30H ANL A,#0FH MOV TEML,A MOV A,31H JNB ACC.3,POSI;区分正负温度
      ;//负温度转化
      MOV A,TEML
      SWAP A
      CPL A
      ANL A,#0F0H
      ADD A,#10H
      SWAP A
      MOV 1FH,C
      MOV TEML,A
      MOV A,TEMH
      CPL A
      SUBB A,#80H
      MOV C,1FH
      ADDC A,#0
      MOV 70H,#20
      AJMP NEG
      POSI:
      MOV A,TEMH
      MOV B,#100
      DIV AB
      MOV 70H,A
      MOV A,B
      NEG:
      MOV B,#10
      DIV AB
      MOV 71H,A
      MOV A,B
      ADD A,#10
      MOV 72H,A
      ;整数部分分离
      MOV A,TEML
      MOV B,#5
      MUL AB
      MOV B,#10
      DIV AB
      MOV 76H,B
      MOV 75H,A
      MOV A,TEML
      MOV B,#2
      MUL AB
      ADD A,75H
      MOV B,#10
      DIV AB
      MOV 75H,B
      MOV 74H,A
      MOV A,TEML
      MOV B,#6
      MUL AB
      ADDC A,74H
      MOV B,#10
      DIV AB
      MOV 74H,B
      MOV 73H,A
      ;小数部分分离
      POP B
      POP A
      RET
      ;//
      DISPLAY: ;温度显示 70H---76H XXX.XXXX
      ;采用默认的12位,精度0.0625,-55~~+125
      SETB RS0
      MOV R0,#70H
      MOV R1,#7
      MOV R2,#0
      MOV DPTR,#TABLE
      DIS:
      MOV A,@R0
      MOVC A,@A+DPTR
      MOV P2,R2
      MOV P0,A
      INC R2
      INC R0
      LCALL DELAY1MS
      DJNZ R1,DIS
      CLR RS0
      RET
      ;/
      DELAY1MS:
      SETB RS1
      MOV R0,#100
      MS:MOV R1,#20
      DJNZ R1,$
      DJNZ R0,MS
      CLR RS1
      RET
      ;
      RESERT:;DS18B20初始化
      ;SETB RS0
      SETB TX
      NOP
      CLR TX
      MOV R0,#240
      ;RST:CLR TX
      DJNZ R0,$;DELAY480US
      SETB TX
      MOV R1,#30;DELAY 60US
      DJNZ R1,$
      JNB TX,RE1
      CLR FLAG
      SETB TX
      RET
      RE1:SETB FLAG
      MOV R2,#200
      DJNZ R2,$ ;DELAY 400us
      SETB TX
      RET
      ;///
      WRITE:;DS18B20写字节
      ;SETB RS0
      CLR C
      MOV R0,#8
      WW:
      MOV R1,#6
      MOV R2,#23
      RRC A
      CLR TX
      DJNZ R1,$;DELAY 12US
      MOV TX,C
      DJNZ R2,$;DELAY 46US SETB TX NOP DJNZ R0,WW SETB TX ;CLR RS0 RET ;/// READ:;DS18B20读字节
      ;SETB RS0
      CLR C
      MOV R0,#8;八位
      RE:
      SETB TX
      MOV R1,#10;延时20us
      MOV R2,#15 ;延时30us
      CLR TX
      NOP
      SETB TX;此句最重要,读取数据的时候一定要释放总线,否则读不出暂存器数据
      DJNZ R1,$
      MOV C,TX
      DJNZ R2,$
      RRC A
      DJNZ R0,RE
      SETB TX
      ;CLR RS0
      RET
      ;//
      TABLE:
      DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0-9 需要加点应用ADD 80H即可
      DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;0. -9.
      DB 40H ;-
      END
    展开全文
  • ds18b20单片机控制

    2009-10-11 20:23:52
    DS18B20测量温度,精度为0.5度,用四位7段码显示。 带有图程序
  • 为此,介绍了单线数字温度传感器DS18B20的结构、特点和工作原理,设计了一种基于DS18B20和AT89S52单片机的温度测量系统的硬件结构及汇编程序,并阐述了其在农业中的应用。该装置具有显示精度高、价格低廉、结构简单...
  • ds18b20单片机的应用

    2008-06-28 15:49:35
    主要针对18B20和51系列单片机的连接。实验温度测试功能
  • 通过运用DS18B20数字温度传感器的测温原理特性,利用它独特的单线总线接口方式,与AT89C51单片机相结合实现多点测温.并给出了测温系统中对DS18B20操作的C51编程实例.实现了系统接口简单、精度高、抗干扰能力强、工作...
  • 本文给出了DS18B20和51单片机AT89C2051的接口电路图。
  • // DS18B20传感器的引脚定义 void show(uchar screen,uchar page,uchar column,uchar *p); unsigned char code dang[]= { 0x00,0x40,0x42,0x44,0x58,0x40,0x40,0x7F,0x40,0x40,0x50,0x48,0xC6,0x00,0x...
  • DS18B20 1602 51单片机

    2020-12-17 13:49:20
    51单片机实现DS18B20采集温度,并且用1602显示出来 这里仅提供主函数部分,如果需要源代码仿真图,请联系作者qq256379446 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include "temp.h" ...

    51单片机实现DS18B20采集温度,并且用1602显示出来

    这里仅提供主函数部分,如果需要源代码和仿真图,请联系作者qq256379446

    在这里插入图片描述

    #include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    #include "temp.h"
    #include "lcd.h"	
    
    
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit k1=P3^1;
    sbit k2=P3^0;
    sbit k3=P3^2;
    sbit k4=P3^3;
    
    u8 DisplayData[8];
    u8 code ASCII[13] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
     u8 xh[]="Settemp";
     u8 tem=40;
     u8  tmp=10;
    /*******************************************************************************
    * 函 数 名         : delay
    * 函数功能		   : 延时函数,i=1时,大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
    	while(i--);	
    }
    /*******************************************************************************
    * 函 数 名         : keypros
    * 函数功能		   : 按键函数
    *******************************************************************************/
    void keypros()
    {
      if(k1==0)
      {
      delay(1000);
        if(k1==0)
    	 tem++;
      	while(!k1);
      
      }
    
    
       if(k2==0)
      {
      delay(1000);
        if(k2==0)
    	 tem--;
      	while(!k2);
      
      }
       if(k3==0)
      {
      delay(1000);
        if(k3==0)
    	 tmp++;
      	while(!k3);
      
      }
    
    
       if(k4==0)
      {
      delay(1000);
        if(k4==0)
    	 tmp--;
      	while(!k4);
      
      }
    }
    /*******************************************************************************
    * 函 数 名         : datapros()
    * 函数功能		   : 温度读取处理转换函数
    * 输    入         : temp
    * 输    出         : 无
    *******************************************************************************/
    
    void datapros(int temp) 	 
    {
       	float tp;  
    	if(temp< 0)				//当温度值为负数
      	{
    		DisplayData[0] = 0x40; 	  //   -
    		//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
    		temp=temp-1;
    		temp=~temp;
    		tp=temp;
    		temp=tp*0.0625*100;	
    	
     
      	}
     	else
      	{			
    		DisplayData[0] = 0x00;
    		tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
    		//如果温度是正的那么,那么正数的原码就是补码它本身
    		temp=tp*0.0625*100;	
    		
    	}
    
    	DisplayData[1] = (temp % 10000 / 1000);
    	DisplayData[2] = (temp % 1000 / 100);
    	DisplayData[3] = 10;
    	DisplayData[4] = (temp / 10 % 10);
    	DisplayData[5] = (temp % 10);
    }
    
    
    /*******************************************************************************
    * 函数名         :DigDisplay()
    * 函数功能		 :数码管显示函数
    * 输入           : 无
    * 输出         	 : 无
    *******************************************************************************/
    void DigDisplay()
    {		 	 DisplayOneChar(10,0,ASCII[tem/10]);
             	DisplayOneChar(11,0,ASCII[tem%10]);
    			 DisplayOneChar(13,0,ASCII[tmp/10]);
             	DisplayOneChar(14,0,ASCII[tmp%10]);
    	DisplayOneChar(4,1,ASCII[DisplayData[1]]);
    	DisplayOneChar(5,1,ASCII[DisplayData[2]]);
    	DisplayOneChar(6,1,ASCII[DisplayData[3]]);
    	DisplayOneChar(7,1,ASCII[DisplayData[4]]);
    	DisplayOneChar(8,1,ASCII[DisplayData[5]]);
    }
    
    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能		 : 主函数
    * 输    入       : 无
    * 输    出    	 : 无
    *******************************************************************************/
    void main()
    {	
    	
    	LcdInit();  //lcd初始化函数
    	LcdShowStr(2,0,xh);
    	while(1)
    	{	  keypros();
    
    		datapros(Ds18b20ReadTemp());	 //数据处理函数
    		DigDisplay();//数码管显示函数		
    	}		
    }
    
    展开全文
  • 简单描述 (1)DS18B20采用单线接口,它与微处理器连接时仅仅需要一条口线即可实现微处理器与DS18B20的双向通信。 (2)引脚 ...从此我们可以看出DS18B20和单片机的连接十分的简单,单片机用一个 ...

    一. 简单描述

    (1)DS18B20采用单线接口,它与微处理器连接时仅仅需要一条口线即可实现微处理器与DS18B20的双向通信。
    (2)引脚

    引脚 定义
    GND 接地
    VDD 电源正极
    DQ 信号的输入输出

    从此我们可以看出DS18B20和单片机的连接十分的简单,单片机用一个IO口即可以控制DS18B20
    (3)这个小测温程序中需要用到的指令

    CCH-跳过ROM。忽略64位ROM(每一个DS18B20都有一个独特的64位光刻ROM,此程序中我们仅仅使用一个DS18B20),直接向18B20**发送温度转换命令**
    44H-启动温度转换。
    0xBE-读取温度数据
    

    二. 测温程序编写

    我们在编写程序的时候一定要有模块化的思想,把复杂问题简单化,而且这种方法编写出的代码“可移植行比较强”,遇到类似项目时我们只需重新组装,稍加修改即可。
    (1.)初始化

    	uchar i;
    	DSPORT = 0;			 //对应DQ管脚,我这个单片机对应P3^7.
    	i = 70;	
    	while(i--);//延时642us
    	DSPORT = 1;			//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低,s说明初始化成功
    	i = 0;
    	while(DSPORT)	//等待DS18B20拉低总线
    	{
    		Delay1ms(1);
    		i++;
    		if(i>5)//等待>5MS
    		{
    			return 0;//初始化失败
    		}
    	
    	}
    	return 1;//初始化成功
    

    (2)写入数据

    
    {
    	uint i, j;
    
    	for(j=0; j<8; j++)
    	{
    		DSPORT = 0;	     	  //每写入一位数据之前先把总线拉低1us
    		i++;//给一点时间缓冲
    		DSPORT = dat & 0x01;  //然后写入一个数据,从最低位开始
    		i=6;
    		while(i--); //延时68us,持续时间最少60us
    		DSPORT = 1;	//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
    		dat >>= 1;
    	}
    }
    

    (3.)读入一个字节数据

    	uchar byte, bi;
    	uint i, j;	
    	for(j=8; j>0; j--)
    	{
    		DSPORT = 0;//先将总线拉低1us
    		i++;
    		DSPORT = 1;//然后释放总线
    		i++;
    		i++;//延时6us等待数据稳定
    		bi = DSPORT;	 //读取数据,从最低位开始读取
    		/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
    		byte = (byte >> 1) | (bi << 7);						  
    		i = 4;		//读取完之后等待48us再接着读取下一个数
    		while(i--);
    	}				
    	return byte;
    

    (4.)启动温度转换

    初始化函数
    写入函数(0xcc//跳过ROM指令
    写入(0x44//启动温度转换命令
    

    (5)读取温度数据

    初始化函数
    写入(0xcc//跳过ROm指令
    写入(0xbe//读取温度数据指令
    

    (6.)得到16位温度数据

    	int temp = 0;
    	uchar tmh, tml;
    	Ds18b20ChangTemp();			 	//先写入转换命令
    	Ds18b20ReadTempCom();			//然后等待转换完后发送读取温度命令
    	tml = Ds18b20ReadByte();		//读取温度值共16位,先读低字节
    	tmh = Ds18b20ReadByte();		//再读高字节
    	temp = tmh;
    	temp <<= 8;
    	temp |= tml;
    	return temp;
    

    好了到此我们已经使用使用DS18B20得到了温度的数据,此时温度以16位的形式存放在RAM中,要利用这组数据得到正确的温度我们需要:
    如果这个数据是负数,这个数据需要取反加一
    0.0625
    若为整数,我们仅仅需要0.0625即可得到所要的温度
    之后我们仅仅需要利用数码管显示数据即可

    8位动态数码管显示函数

    void DigDisplay()
    {
    	u8 i;
    	for(i=0;i<6;i++)
    	{
    		switch(i)	 //位选,选择点亮的数码管,
    		{
    			case(0):
    				LSA=1;LSB=1;LSC=1; break;//显示第0位
    			case(1):
    				LSA=0;LSB=1;LSC=1; break;//显示第1位
    			case(2):
    				LSA=1;LSB=0;LSC=1; break;//显示第2位
    			case(3):
    				LSA=0;LSB=0;LSC=1; break;//显示第3位
    			case(4):
    				LSA=1;LSB=1;LSC=0; break;//显示第4位
    			case(5):
    				LSA=0;LSB=1;LSC=0; break;//显示第5位
    		}
    		P0=DisplayData[i];//发送数据
    		delay(100); //间隔一段时间扫描	
    		P0=0x00;//消隐
    	}		
    }
    

    ok 到此简单的测温程序已经写出了。

    展开全文
  • 方案利用AT89S52单片机控制DS18B20进行数据采集并由HS1602液晶显示模块显示结果,另外,采集结果可由RS-232-C接口送入计算机显示并存储。按键控制实现过界报警温度设定实时监控,利用AT24C08芯片进行存储,实现...
  • 引言  在工业、农业医疗领域,温控系统有着... 因此,本文研究了一种方法,解决了单片机DS18B20结合的测温系统数字传感器的更换问题,系统结合了软件编程与硬件设计。在提出的解决方案中,数据采集模块采用低功
  • 代码链接 https://pan.baidu.com/s/1GlvGf9a2u5TZO57444NFTQ点击打开链接 点击打开链接 这个温度计使用的单片机是STC89C2051,测量范围-55到+125度,显示精度为0.1度,DS18B20数据脚P0.4 ,采用器件默认的12位转化...
        
    代码链接 https://pan.baidu.com/s/1GlvGf9a2u5TZO57444NFTQ

    点击打开链接 点击打开链接 这个温度计使用的单片机是STC89C2051,测量范围-55到+125度,显示精度为0.1度,DS18B20数据脚P0.4 ,采用器件默认的12位转化,显示采用4位LED共阳显示测温值,P2口为段码输入,P0~P3为位选,继电器接P1.1,蜂鸣器接P1.0,由于时间的关系,我就没有接继电器和蜂鸣器,用两个LED灯来代替,效果也是一样的。引脚也可以自己定义,下面是制作好实物图,由于我用杜邦线没有焊接,因为这样还可以玩其他小作品,请见谅,电路原理比较简单,这里就不给出,百度上一大推。        我程序设置的是  低于 等于 12° 的时候  继电器打开  开始加热功能   高于等于 13° 的时候 关闭继电器    蜂鸣器 响起 。     代码在链接上
    展开全文
  • 使用DS18B20测温,52单片机负反馈控制半导体制冷片温度的完整程序。数码管显示设定温度实时温度。
  • DS18B20 (by 51单片机

    千次阅读 2018-03-16 15:08:36
    依旧是接着蓝桥杯的机会来学习一下DS18B20和单总线技术,平台依旧是IAP15F2K61S2单片机DS18B20单线数字温度计以9位数字量的形式反映器件的温度值,DS18B20通过一个单线接口发送或者接受信息,因此在中央微处理器和DS...
  • 针对目前采用的热敏电阻测量方法,提出了采用单总线数字式温度传感器DS18B20和单片机组成的新型温度测量仪。介绍DS18B20的结构和工作原理,以及单总线工作原理,给出了由Mega8单片机和DS18B20构成的单总线温度测量仪...
  • 标题基于单片机和DS18B20的温度报警系统 温度是一个十分重要的物理量,对它的测量与控制有十分重要的意义。此温度报警器是利用温度传感器对外界的温度进行实时检测并报警的仪器。当温度超过或者低于用户所设定的上限...
  • keil环境下基于单片机ds18b20和pcf8591的LCD1602显示
  • 基于MSP430单片机和DS18B20的数字温度计pdf,基于MSP430单片机和DS18B20的数字温度计
  • 以AT89C2051和DS18B20为主的温控系统, AT89C2051单片机为控制核心, 单线智能温度传感器DS18B20负责温度的采集
  • DS18B20单片机仿真实验

    2012-03-15 16:34:07
    含工程文件及电路仿真图、和DS8B20相关资料
  • 51单片机写的ds18b20程序附加电路图
  • 这个温度计使用的单片机是STC89C2051,测量范围-55到+125度,显示精度为0.1度,DS18B20数据脚P0.4 ,采用器件默认的12位转化,显示采用4位LED共阳显示测温值,P2口为段码输入,P0~P3为位选,继电器接P1.1,蜂鸣器接P...
  • 51单片机DS18B20温度传感器详解

    万次阅读 多人点赞 2016-01-26 20:27:04
    单总线读写数据是靠控制起始时间采样时间来完成,所以时序要求很严格,这也是DS18B20驱动编程的难点。一.DS18B20温度传感器1.引脚图2.DS18B20内部结构图 主要由2部分组成:64位ROM、9字节暂存器,如图所示。(1
  • 熟练掌握键盘、显示、DS18B20温度传感器等各个模块; 训练系统综合的能力; 编写键盘、显示、DS18B20温度传感器综合程序。 二、开发环境 Keil开发环境 Proteus仿真环境。 三、制作内容用LCD、DS18B20、按键配合...
  • DS18B20及数码管显示温度介绍51单片机DS18B20温度传感器及数码管显示温度DS18B20作用怎么读取DS18B20的“1”“0”怎么让数码管显示在单片机的数码管上 DS18B20作用 我们常用的DS18B20长什么样呢 它一共...
  • 采用18B20的温度传感器源程序通信软件。控制器采用51单片机
  • 本文介绍了一套以个人电脑及80C51单片机为核心,使用DS18B20温度传感器进行温度采样,数据库进行温度存储,Matlab进行温度分析的系统。该系统可对其所处环境的温度进行实时监控,同时进行温度的采样、存储分析,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,162
精华内容 464
关键字:

ds18b20和单片机