加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

51单片机DS18B20温度报警器proteus仿真设计_可调上下限(源码+原理图+报告+讲解视频)

08/09 17:04
2426
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

原理图Altium Designer

仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0008

主要功能

本设计系统是18b20温度报警系统数码管显示,可设置温度上限高温报警和下限低温报警,报警温度可精确到0.1度,并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面,人性化的按键设置,按键还具有连加、减功能。

  1. 按“确定键” :有两种操作方式

1)按下就松开,高温设置、低温设置、正常显示温度,三个界面按一下就切换一次。

2)按下不松开,进入自动切换,每500ms自动切换一次,

  1. 按“加键” :有两种操作方式

1)按下就松开,设定的温度值就加0.1度。

2)按下不松开,进入按键连加功能,每500ms自动加一次,前三次自动加0.1度,之后就是自动加1度。

  1. 按“减键” :有两种操作方式

1)按下就松开,设定的温度值就减0.1度。

2)按下不松开,进入按键连减功能,每500ms自动减一次,前三次自动减0.1度,之后就是自动减1度。

  1. 第一次按下“确定键”进入高温报警设置:

按下“加、减”键可设置高温报警,最高设置成99.0度,最低可设置成比低温报警高0.1度。

  1. 第二次按下“确定键”进入低温报警设置:

按下“加、减”键可设置低温报警,最低设置成1度,最高可设置成比高温报警低0.1度。

  1. 第三次按下“确定键”进入正常温度显示。

讲解视频

包含仿真讲解和代码讲解

仿真图

image-20220902232800201

硬件设计:

img

主控制模块

主控制最系统电路如图4所示。

img

图4 单片主控电路

显示模块电路

显示采用四位数码管显示,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。显示电路如图5

img

图5 数码管显示

数码管显示驱动电路

三极管8550来驱动4位数码管,不仅简单,而且价格便宜。

img

程序设计

img

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,与设定的报警温度比较,其程序流程见图9所示。

通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。

image-20220902233650289

程序代码

/****************主函数***************/
void main()
{
	beep = 0;		                //开机叫一声   
	delay_1ms(150);
	P0 = P1 = P2 = P3 = 0xff;
	temperature = read_temp();		//先读出温度的值	
	init_eeprom();  //开始初始化保存的数据
	delay_1ms(650);				
	temperature = read_temp();		         //先读出温度的值
	dis_smg[0] = smg_du[temperature % 10];	 //取温度的小数显示
	dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示
	dis_smg[2] = smg_du[temperature / 100 % 10] ;	   //取温度的十位显示
	time_init();                    //初始化定时器 
	while(1)
	{		
		key();					//按键程序
		if(key_can < 10)
		{
			key_with();			//设置报警温度	
		}
		if(flag_300ms == 1)	    //300ms 处理一次温度程序
		{	   
			flag_300ms = 0;	
			temperature = read_temp();	//先读出温度的值
			clock_h_l();        //报警函数
			if(menu_1 == 0)
			{	
				smg_i = 3;
				dis_smg[0] = smg_du[temperature % 10];	 //取温度的小数显示
				dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示
				dis_smg[2] = smg_du[temperature / 100 % 10] ;	   //取温度的十位显示
			}
		}
	}
}

DS18B20初始化程序流程图

在DS18B20工作之前需要进行初始化,流程图如下:

image-20220902233709197


/*************读取温度的值 读出来的是小数***************/
uint read_temp()
{
	uint value;
	uchar low;			   //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序
	init_18b20();		   //初始化18b20
	write_18b20(0xcc);	   //跳过64位ROM
	write_18b20(0x44);	   //启动一次温度转换命令
	delay_uint(50);		   //500us

	init_18b20();		   //初始化18b20
	
	write_18b20(0xcc);	   //跳过64位ROM
	write_18b20(0xbe);	   //发出读取暂存器命令
	
	EA = 0;
	low = read_18b20();	   //读温度低字节
	value = read_18b20();  //读温度高字节
	EA = 1;
	value <<= 8;		   //把温度的高位左移8位
	value |= low;		   //把读出的温度低位放到value的低八位中
	value *= 0.625;	       //转换到温度值 小数
	return value;		   //返回读出的温度 带小数
}

设计报告

摘要

随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于STC89C52单片机的温度报警系统,详细描述了利用温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度控制,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B20与STC89C52结合实现最简温度控制系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度的控制,有广泛的应用前景。

**关键词:**单片机;温度控制;STC89C52;DS18B20;

image-20220902232904330

资料清单&&下载链接

img

资料下载链接

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
CP2102N-A02-GQFN28R 1 Silicon Laboratories Inc USB Bus Controller, CMOS, QFN-28

ECAD模型

下载ECAD模型
$2.5 查看
ATXMEGA32A4U-MH 1 Microchip Technology Inc IC MCU 8BIT 32KB FLASH 44VQFN
$3.4 查看
MC56F8323VFBE 1 Freescale Semiconductor 16-bit DSC, 56800E core, 32KB Flash, 60MHz, QFP 64

ECAD模型

下载ECAD模型
$14.69 查看

相关推荐

电子产业图谱