基于51单片机多路温度检测proteus仿真 ds18b20

这篇具有很好参考价值的文章主要介绍了基于51单片机多路温度检测proteus仿真 ds18b20。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图)

仿真图proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:C0042

功能说明:

通过对多路DS18B20温度传感器的数据采集,实现8路/4路温度采集并将数值显示在LCD显示屏上;

通过按键设置温度报警值,逐个显示传感器的温度,当lcd显示温度超过设定值时,系统声光报警。

资料下载链接(可点击)

8路仿真图(提供源文件):

主要由51单片机最小系统和温度传感器,LCD1602显示屏和按键组成。可以设置检测温度阈值,到了阈值会触发蜂鸣器报警。

ds18b20的proteus仿真csdn,51单片机,51单片机,proteus,单片机

软件工程文件

KEIL工程文件,代码有注释方便理解

main函数

void main (void)
{
	unsigned char i=0,t=0;
	delay_nms(50);
	IT0=0;
	EX0=1;
	EA=1;

    search_rom();//搜索ROM并且存储,把18B20的每一个ROM读取出来,方便下次调用


	reset();
		
	while(1) 
	{ 
		if(keyflag==0)
		{
			  for(i=0;i<num;i++)	//每一个 ds18b20 循环显示
			  {
					if(keyflag==1) break;
					read_temp(i);   //读编号 i 的ds18b20 的温度
					if(keyflag==1) break;
					temp_convert(); //调用温度转换
					if(keyflag==1) break;
				    if(tempalarm>alarm)//报警判断
					{
					  for(t=0;t<3;t++)
					  {
					  	 buzzer=0;//打开报警蜂鸣器
						 led=0;   //打开报警指示灯
						 delay_nms(100);
						 buzzer=1;//关闭报警蜂鸣器
						 led=1;   //关闭报警指示灯
						 delay_nms(100);
					  }
					}
		        	display_ds18b20(i);//显示 编号 i 的温度		
		      }
		}		  

		else//设置按键按下 进行按键扫描动作
		{ 
		   display_alarm(alarm);
		   keyflag=0;
		   while(1)
		   {
		   	 if(keyenter==0&&keyflag==0)//进入设置以后,再按设置按键,就退出设置,重新显示每一个通道温度
				{
				  delay_nms(200);
				  if(keyenter==0)
				  {
					while(keyenter==0);	 
					lcdinit();
					display_alarm_normal(alarm);//显示报警温度
					break;//退出按键扫描
				  }
				}
			if(keyup==0)//
				{
				  delay_nms(200);
				  if(keyup==0&&alarm<125)
				  {
					 alarm++;//报警温度加1
				  }
				  display_alarm(alarm);
				}
		   if(keydown==0&&alarm>-55)//
				{
				  delay_nms(200);
				  if(keydown==0)
				  {
					alarm--;//报警温度减1
				  }
				  display_alarm(alarm);
				}
				delay_nms(50);
		   }
		   EX0=1;	
		}
			      
	}//while(1)结束  
}

其他子函数

void read_temp(unsigned char num_data)//读取温度 子程序 参数表示读第几个传感器
{
	unsigned char f;	
	reset();
	write_byte(0xcc);//发送跳过ROM号命令
	write_byte(0x44);//发送温度转换命令
	delay_nms(2000);		
	reset();
	write_byte(0x55);//发送匹配ROM号命令
	for(f=0;f<8;f++) //8字节ROM号
	{
		write_byte(ID[num_data][f]);//发匹配ROM
	}
	delay_nus(100);
	write_byte(0xbe);//读寄存器命令
	delay_nus(100);
	temp_l=read_byte();
	temp_h=read_byte();
}

 
void temp_convert(void)//温度转换
{
	negetiveflag=0;
	negetiveflag=temp_h&0x80;
	if(negetiveflag)
	{
		negetiveflag=1;
		temp_h=~temp_h;
  		if(temp_l==0)
		{
		 	temp_h++;  //若低8位全为0且温度为负,取补时就要向高位进1
		}
  		temp_l=~temp_l+1; 
	}
	temp_h<<=4;
	temp_l>>=4;
	temp_over=temp_h|temp_l;
	tempalarm=temp_over;
	if(negetiveflag==1)
	{
		 tempalarm=tempalarm*(-1);
	}
}

/*******************显示***************************/
void search_cartoon(void)//搜索ROM动画
{
	lcdinit();
	LCD_write_com(0x80);//液晶第一行地址
    for(i=0;i<16;i++)
	{
		LCD_write_data(lcd0[i]);
	}
	LCD_write_com(0xc0);//液晶第二行地址
    for(i=0;i<16;i++)
	{
		LCD_write_data(0xff);//显示类似进度条的黑点
		delay_nms(num*80);
	}		 
}

void display_alarm_normal(signed char alarm_data)//显示报警温度
{
	unsigned int data_b,data_temp,l,datx[6]={0};
	data_b=alarm_data;
	negetiveflag=0;

    LCD_write_com(0x80); 
	for(l=0;l<6;l++)
	{
		LCD_write_data(pointinfo[l]);
	}   

	if(alarm_data>=0)
	{
		data_b=alarm_data/100;//百位//
	}
	else
	{
		negetiveflag=1;
		alarm_data=alarm_data*(-1);//变成正温度
	}

	data_temp=alarm_data%100;//对100取余,也就是十位数和个位数

	datx[0]=data_temp/10;//十位
	datx[1]=data_temp%10;//个位
	datx[2]=13;//空格符号
	datx[3]=13;//空格符号
	datx[4]=11;//摄氏度符号
	datx[5]=12;//摄氏度符号

	LCD_write_com(0x88);

	if(negetiveflag==1)
	{
		LCD_write_data(0x2d);//显示"-"  “负号”
	}
	else
	{
		LCD_write_data(lcd4[data_b]);//如果大于0就显示百位数,否则百位数就显示“负号”
	}

	for(l=0;l<6;l++)//显示报警值和摄氏度符号
	{
	  LCD_write_data(lcd4[datx[l]]);
	}	
}

void display_total(void)	  //显示搜索到的DS18B20传感器数目
{
	lcdinit();
	LCD_write_com(0x80);//第一行地址
    for(i=0;i<14;i++)
	{
		LCD_write_data(lcd1[i]);
	}
	LCD_write_com(0xc0);//第二行地址
    for(i=0;i<13;i++)
	{
		LCD_write_data(lcd2[i]);
	}
	LCD_write_data(lcd4[num]);
	delay_nms(2000);
	lcdinit();					//清屏,准备显示温度
	display_alarm_normal(alarm);//显示报警温度
}



void display_ds18b20(i)//显示编号为i的DS18B20的温度//
{
	unsigned int data_b,data_temp,l;
	data_b=temp_over/100;//百位//
	data_temp=temp_over%100; 
	dat[0]=data_temp/10;//十位//
	dat[1]=data_temp%10;//个位//
	dat[2]=13; //空格
	dat[3]=13; //空格
	dat[4]=11; //摄氏度符号
	dat[5]=12; //摄氏度符号

	LCD_write_com(0xc0);
	for(l=0;l<7;l++)
	{
		LCD_write_data(lcd3[l]);
	}
	LCD_write_com(0xc4);
	LCD_write_data(lcd4[++i]);
	LCD_write_com(0xc8);

	if(negetiveflag==1)
	{
		LCD_write_data(0x2d);
	}
	else
	{
		LCD_write_data(lcd4[data_b]);
	}

	for(l=0;l<6;l++)
		LCD_write_data(lcd4[dat[l]]);
	delay_nms(1000);
}




void display_alarm(signed char alarm_data)//显示报警温度
{
	unsigned int data_b,data_temp,l;
	data_b=alarm_data;
	negetiveflag=0;
	if(alarm_data>=0)
	{
	 data_b=alarm_data/100;//百位//
	}
	else
	{
	 negetiveflag=1;
	 alarm_data=alarm_data*(-1);//变成正温度
	}

	data_temp=alarm_data%100;//对100取余,也就是十位数和个位数

	dat[0]=data_temp/10;//十位
	dat[1]=data_temp%10;//个位
	dat[2]=13;//空格符号
	dat[3]=11;//摄氏度符号
	dat[4]=12;//摄氏度符号

	if(keyflag==1)//刚刚进入设置报警温度
	{
	    lcdinit();
		LCD_write_com(0x80);//第一行地址
	    for(l=0;l<16;l++)
		{
			LCD_write_data(setinfo[l]);
		}
	
		LCD_write_com(0xc0);//第二行地址
		for(l=0;l<8;l++)
		{
			LCD_write_data(pointinfo[l]);
		}
	}
	

	LCD_write_com(0xc7);

	if(negetiveflag==1)
	{
		LCD_write_data(0x2d);//显示"-"  “负号”
	}
	else
	{
		LCD_write_data(lcd4[data_b]);//如果大于0就显示百位数,否则百位数就显示“负号”
	}

	for(l=0;l<5;l++)//显示报警值和摄氏度符号
	{
	  LCD_write_data(lcd4[dat[l]]);
	}	
}

原理图(仅供参考)

ds18b20的proteus仿真csdn,51单片机,51单片机,proteus,单片机

*资料清单(提供资料清单所有文件):*

ds18b20的proteus仿真csdn,51单片机,51单片机,proteus,单片机文章来源地址https://www.toymoban.com/news/detail-520079.html

到了这里,关于基于51单片机多路温度检测proteus仿真 ds18b20的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 122、仿真-基于51单片机的电量监测电压电流和温度报警系统设计(Proteus仿真+程序+流程图+配套资料等)

    方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节的闪存程序存储器,也就是说代码量可以写到128k字

    2024年02月16日
    浏览(48)
  • 【Proteus仿真】【51单片机】温度报警控制系统设计

    本项目使用Proteus8仿真51单片机控制器,使用继电器模块、DS18B20温度传感器模块、LCD1602模块、蜂鸣器、按键模块等。 主要功能: 系统运行后,LCD1602显示DS18B20采集温度值、温度上下限阈值。可通过K1、K2键对温度上限设置,可通过K3、K4键对温度下限设置,若检测温度大于或小

    2024年02月09日
    浏览(48)
  • 7、基于51单片机智能热水器温度水温水位检测控制系统设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、Proteus仿真  七、程序源码 八、资料包括 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤

    2024年02月09日
    浏览(82)
  • 9、基于51单片机PID算法温度控制系统设计(程序+Proteus仿真+原理图+PCB图+参考论文+开题报告+任务书等)

    目录 摘要 一、硬件方案 二、设计功能 三、成品实物图 四、原理图  五、PCB图 六、Proteus仿真  七、程序源码    资料包括:     随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中 数字温度计 就是一个典型

    2024年02月05日
    浏览(52)
  • 基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)

    当前文章介绍基于51单片机和SHT30传感器设计的环境温度与湿度检测设备。设备采用IIC模拟时序通信协议,能够实时监测环境的温度和湿度,并将数据通过LCD显示屏显示出来;可以广泛应用于室内环境监测、气象观测、农业温室监测等领域。 在本项目中,使用了51单片机作为主

    2024年02月13日
    浏览(45)
  • 【022】基于51单片机的RS-485无线DHT11温湿度检测系统Proteus仿真设计

    (1)、基于51单片机的RS-485无线DHT11温湿度检测系统proteus仿真设计一份; (2)、基于51单片机的RS-485无线DHT11温湿度检测系统proteus仿真设计keli源代码一份; (3)、基于51单片机的RS-485无线DHT11温湿度检测系统proteus仿真设计视频讲解一份; (1)、要求以51系列单片机为核心,

    2024年02月06日
    浏览(59)
  • 基于51单片机的烟雾检测+温度检测+蜂鸣器报警+光耦+风扇+LCD4602液晶显示(含原理图/PCB/代码)

    讲在前面: 51单片机是大多数电子爱好者的入门级单片机,这款设计是一个比较综合的单片机设计。本文介绍了一个典型的51单片机设计,希望对各位有帮助。 本人也在其他平台开源了一些项目和分享: 点击进入B站传送门 1)产品功能: 使用51单片机作为控制器,与ADC0832(

    2024年01月22日
    浏览(50)
  • 51单片机热水器温度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

    51单片机热水器温度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0045 本设计旨在实现一个基于51单片机的简易热水壶热水器控制仿真proteus仿真设计,具备以下功能: 1、使用温度传感器

    2024年02月09日
    浏览(44)
  • 51单片机DS18B20温度报警器proteus仿真设计_可调上下限

    (仿真+源码+原理图+报告+讲解视频) 原理图:Altium Designer 仿真版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0008 本设计系统是18b20温度报警系统数码管显示,可设置温度上限高温报警和下限低温报警,报警温度可精确到0.1度,并具有掉电保存功能,数

    2024年02月11日
    浏览(44)
  • day07 51单片机-18B20温度检测

    本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。 1.2.1 硬件原理图 1.2.3 18B20工作原理 可以看到18B20有两根引脚负责供电,一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。 1)18B20工作时序 2)初始化信号 3)写数据时序 写‘1’时序 写‘0’时序

    2024年04月23日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包