当前位置: 首页 > news >正文

51单片机DS18B20温度报警器proteus仿真设计_可调上下限

51单片机DS18B20温度报警器proteus仿真设计_可调上下限

(仿真+源码+原理图+报告)

原理图:Altium Designer

仿真版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0008

目录标题

  • 51单片机DS18B20温度报警器proteus仿真设计_可调上下限
    • 主要功能
    • 仿真图
    • 硬件设计:
      • 主控制模块
      • 显示模块电路
      • 数码管显示驱动电路
    • 程序设计
    • 报告
    • 资料清单

主要功能

本设计系统是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

资料下载链接(可点击)

相关文章:

  • SSRF漏洞
  • 猿创征文|平凡的应届生四年学习之路
  • mysql8忘记密码如何重置(禅道的mysqlzt服务和mysql服务冲突)
  • Nginx 配置 SSL(HTTPS)
  • 用css实现简单的动画——“奔跑的小子”(有知识梳理和图片)
  • macbook m1芯片 实现vscode下debug(解决无法读入的问题)
  • 前端:下载文件(多种方法)
  • 猿创征文|【JavaSE】 Collection集合全家桶
  • 【Coppeliasim+Add-on】附加组件-喷涂路径自动生成及喷涂仿真
  • 简易下载并使用Jupyter(Anaconda)
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记:以太坊(四):The DAO、反思、美链、总结
  • 算法与数据结构(2)--- 绪论(下)
  • 基于AAEncode编码的解密经历
  • 设定目标(1)- 为什么你每天感觉很忙却没什么拿得出手的成果?
  • 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第9章 阿里巴巴数据整合及管理体系
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • codis proxy处理流程
  • django开发-定时任务的使用
  • ECMAScript入门(七)--Module语法
  • gcc介绍及安装
  • HomeBrew常规使用教程
  • Javascript设计模式学习之Observer(观察者)模式
  • java小心机(3)| 浅析finalize()
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • PHP CLI应用的调试原理
  • Python学习之路13-记分
  • React 快速上手 - 07 前端路由 react-router
  • Spark RDD学习: aggregate函数
  • SQLServer之索引简介
  • uni-app项目数字滚动
  • 订阅Forge Viewer所有的事件
  • 如何使用 JavaScript 解析 URL
  • 深入浅出webpack学习(1)--核心概念
  • 突破自己的技术思维
  • 我建了一个叫Hello World的项目
  • k8s使用glusterfs实现动态持久化存储
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 通过调用文摘列表API获取文摘
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $NOIp2018$劝退记
  • (007)XHTML文档之标题——h1~h6
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)http-server应用
  • (转)visual stdio 书签功能介绍
  • (转)winform之ListView