proteus论坛|仿真论坛
直播中

jf_25153831

未满1年用户 65经验值
擅长:嵌入式技术
私信 关注
[经验]

基于51单片机的多点温度检测网络,DS18B20传感器,代码,仿真,原理图等资料

设计概述
基于DS18B20的多点温度测量监控系统设计,以AT89C52单片机作为主控制器,不断循环读取4组DS18B20(T1、T2、T3和T4)温度数据,同时使用LCD1602液晶循环显示4组测取的温度值以及每组设定的温度上下限值,通过按键可设置每组温度报警上下限和液晶显示的模式(循环显示模式和手动切换显示模式)。

当前组的温度值若不在设定范围内,则蜂鸣器报警,对应的LED灯点亮;具体过程为:温度高于上限值,红色LED灯点亮;温度低于下限值,蓝色LED灯亮。

多点测温
由于每个DS18B20内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支DS18B20进行控制,读取他们的温度。

单总线本身也可以向所挂接的多个DS18B20供电,而无需额外电源。4组温度传感器的连接网络如下。

传感器网络.jpg

系统框架.jpg

Proteus仿真电路

完整电路图.jpg

多点温度操作说明.jpg

**原理图 **

原理图.jpg

仿真结果分析

把在KEIL里编译、调试生成的Multi_temp的hex文件导入到Proteus中的AT89C52里进行仿真,整体结果如下:

(1)开机LCD显示界面。

开机.png

(2)系统正常状态下,循环显示4组DS18B20的温度值以及各组设定的温度上下限值。

t1.png

t2.png

t3.png

t4.png

(3)由上图可以看出T1的温度值,低于设定的温度下限值,蜂鸣器报警,且相应的LED指示灯点亮。

报警.png

(4)用户可通过按键设置每组温度传感器的上下限值,以及从循环显示切换为手动显示。

C代码

void tmpchange2(void)     
{ 	uchar j;
    dsreset2();//初始化 DS18B20 
    delay_DS(1);//延时 
  	tmpwritebyte2(0x55);
		for(j=0;j<8;j++)
	{	tmpwritebyte2(str3[j]); }
    tmpwritebyte2(0x44); //发送温度转换命令 
} 

void tmpchange3(void)     
{ 	 uchar j;
    dsreset3();//初始化 DS18B20 
    delay_DS(1); //延时 
  	tmpwritebyte3(0x55);
		for(j=0;j<8;j++)
	{	tmpwritebyte3(str4[j]); }
    tmpwritebyte3(0x44);//发送温度转换命令 
} 


//get the temperature  获得温度
uint tmp0()                               
{ 
    float tt; 
    uchar a,b,j; 
    dsreset0(); 
    delay_DS(1); 
	 //发送读取数据命令
   tmpwritebyte0(0x55);
		for(j=0;j<8;j++)
	{	tmpwritebyte0(str1[j]); }
    tmpwritebyte0(0xbe);
	 //连续读两个字节数据          
    a=tmpread0();               
    b=tmpread0(); 
	 //two byte    compose a int variable 
	 //两字节合成一个整型变量。
    temp_DS=b; 
    temp_DS<<=8;                          
    temp_DS=temp_DS|a;                 
	 if(temp_DS&0xf800)
	 {
	   ZF1=1;
	   temp_DS=~temp_DS+1;
	 }
	 else
	 ZF1=0;
	 //得到真实十进制温度值,因为 DS18B20	
    tt=temp_DS*0.0625;               
    //可以精确到 0.0625 度,所以读回数据的最低位代表的是 
    //0.0625 度。
    //设计获取,蒋宇智QQ(2327603104)
	 //放大十倍,这样做的目的将小数点后第一位 
    temp_DS=tt*10+0.5;       
    //也转换为可显示数字,同时进行一个四舍五入操作。 
	 //返回温度值
    return temp_DS;           
}  
 uint tmp1()                               
{ 
    float tt; 
    uchar a,b,j; 
    dsreset1(); 
    delay_DS(1); 
	   	tmpwritebyte1(0x55);
		for(j=0;j<8;j++)
	{	tmpwritebyte1(str2[j]); }
    tmpwritebyte1(0xbe);
	 //连续读两个字节数据          
    a=tmpread1();               
    b=tmpread1(); 
	 //two byte    compose a int variable 
	 //两字节合成一个整型变量。
    temp_DS=b; 
    temp_DS<<=8;

资源内容

(1)基于DS18B20的多点温度测量监控系统设计论文完整版;

(2)Proteus仿真文件;

(3)C程序;

(4)原理图;

(5)Visio流程图文件;

(6)元器件清单;

(7)参考资料;

资源截图

资料1.jpg

资料2.jpg

资料3.jpg

资料4.jpg

资料5.jpg

资料6.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分