121、仿真-基于51单片机8路温度 ds18b20多路温度传感器检测仿真设计(Proteus仿真+程序+原理图+参考论文+任务书+流程图等)

news2024/12/23 12:48:31

摘  要

随着社会经济的高速发展和科技水平的不断进步,温度监控器的运用范围越来越广泛,也渐渐地发展到了核变站的温度监控。温度与人们的生活生产密切相关,比如在核变站的环境下,对温度的监控更是必不可少的,不但能保障人们的利益,还能减少不必要的资源浪费。

本文介绍一款基于上位机和下位机串口通信技术的温度监控器的设计方案,主要针对实现有线温度的实时监控,使得其运用在核变站中能拥有更利于工作的环境。监控器工作由现场采集系统和有线远程监控系统构成的。现场采集模块由8个温度传感器、AT89C52单片机、8个独立按键组成,采集数据由温度传感器实现。有线远程监控模块由232串口通信控制。两个系统通信由电脑端开发的上位机软件和用51单片机开发的下位机实现有线通信,并实现数据传送、接收、处理。

这套温度控制系统可以方便地实现温度测量、温度显示等功能,并通过与单片机连接的键盘可以实时切换,还可以连接相应的外围电路,在收到单片机发出的指令后对环境进行检测

本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件模块的功能和它的工作过程;其次,详细阐述了程序的各个模块及其实现过程。本系统的主要设计思想是以硬件为基础,软件和硬件相结合,最终实现各个模块的功能。

温度监控器的设计应用了当下较为流行的单片机技术和传感器技术,能够很好的实现温度监控器的控制。其电路结构简单、设计成本低廉、操作方便,能广泛的应用于各种各样的环境中,特别是在本文的核电站中,具有很大的实用价值。

关键词:单片机;温度传感器;上位机;核变站;232串口;硬件模块;显示屏

方案选择
单片机的选择

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

方案二:51单片机STC89C52系列的指令系统和AT89C52系列的完全兼容,但实际操作起来却存在很多问题:

(1)AT89C52不带ISP下载,要用下载器才行,STC89C52可以用你的USB转串口下载,下载软件可以到STC厂家网上去下。

(2)STC单片机执行指令的速度很快,大约是AT的3-30倍,尽管快是好事,但这样一来,你在AT上好使的程序在STC上不一定好用,最典型的例子就是那些对时序有严格要求的模块,用STC时注意得加长延时,大约是AT的10—30倍就差不多,这一点自己调试就知道了。

(3)STC单片机对工作环境的要求比较低,电压低于5伏时仍然正常工作,甚至3伏到4伏之间都还可以工作,然而这样的环境下AT肯定不行了,所以当一个系统用STC单片机好用,但用AT的单片机不工作时,直接查最小系统,看单片机的供电是否正常。

比较这两种方案,由于在学校期间学过数字电路、单片机原理、C语言程序设计,综合考虑单片机的各部分资源和作为学生能够获得的资源,还有STM32价钱比较贵方面。经过对比此次设计要求,我选择用51单片机中的STC系列芯片完成。而且学校也提供了相应的硬件操作平台,实际操作起来比较方便,故STC为更合理的选择。本系统选择STC89C52单片机作为主控芯片。足够本设计运行,且价格便宜,下载程序方便。


显示器选择方案

方案一:采用12864液晶显示屏。液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。

方案二:采用LCD1602液晶显示屏。LCD1602A 是一种工业字符型液晶,能够同时显示16x02 即32个字符。(16列2行)。1602只能显示字母、数字和符号能显示16*2个字符,但寄存器不止32个,有一些显示效果,如字符一个个显示、字符从左到右或从右到左显示等等,显示效果简单。

总结:在编程使用方面,两者难度差不多,原理差不多,都是写指令、写地址、写数据等等。当然12864液晶屏显示更全面、字符更多。相比于1602液晶屏、12864能更形象具体的实现显示功能。不过1602液晶屏也能实现设计的要求。网上买比较廉价,最低的六块钱左右。而12864液晶显示屏最便宜的也要四十块钱。从造价方面考虑,当然是价格低廉的优先。而LCD1602A就是最好的选择。

一、硬件方案

硬件电路组成:本系统采用51单片机最小系统电路(复位电路+晶振时钟电路+单片机电源电路)+232串口芯片+按键+ds18b20温度传感器+LCD1602液晶+电源设计而成。

二、设计功能

1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)。

2、用LCD 1602液晶显示屏实时显示温度值。

3、采用ds18b20温度传感器采集温度。

4、可以通过按键切换监测哪路温度。

5、焊接实物可利用232串口可对8路温度值监测。

6、仿真可以定制。有需要可以拉到文章最后面加我。

三、Proteus仿真图

单片机模块设计

单片微型计算机是随着微型计算机的发展而产生和发展的。自从1975 年美国德克萨斯仪器公司的第一台单片微型计算机( 简称单片机)TMS-1000 问世以来,迄今为止,单片机技术已成为计算机技术的一个独特分支,单片机的应用领域也越来越广泛,特别是在工业控制中经常遇到对某些物理量进行定时采样与控制的问题,在仪器仪表智能化中也扮演着极其重要的角色。

如果将8位单片机的推出作为起点,那么单片机的发展历史大致可以分为以下几个阶段:

第一阶段(1976—1978):单片机的探索阶段。以Intel公司的MCS-48为代表。MCS-48的推出是在工控领域的探索,参与这一探索的公司还有Motorola、Zilog等。都取得了满意的效果。这就是SCM的诞生年代,“单片机”一词即由此而来。

第二阶段(1978—1982):单片机的完善阶段。Intel公司在MCS-48基础上推出了完善的、典型的单片机系列MCS-51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。

(1)完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有多机通信功能的串行通信接口。

(2)CPU外围功能单元的集中管理模式。

(3)体现工控特性的地址空间及位操作方式。

(4)指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。

第三阶段(1982—1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS-96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。

第四阶段(1990—):微控制器的全面发展阶段。随着单片机在各个领域全面、深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。

单片机是在集成电路芯片上集成了各种元件的微型计算机,这些元件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口电路。由于单片机具有体积小、价格低、可靠性高、开发应用方便等特点,因此在现代电子技术和工业领域应用较为广泛,在智能仪表中单片机是应用最多、最活跃的领域之一。在控制领域中,现如今人们更注意计算机的底成本、小体积、运行的可靠性和控制的灵活性。在各类仪器、仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,提高计算机的运算速度,简化仪器仪表的硬件结构,提高其性能价格比。


四、原理图

在本设计做的过程中,硬件和软件方面都遇到了许多问题,但是相比于软件,在硬件方面还是比较快解决的方面,因为硬件是比较容易检查出来错误的,软件比较晦涩难懂,还是有一定难度。
在硬件调试问题上,首先焊接好了元器件实物板后,先用万用表测量这个工业板子的电源方面,电源方面是最重要的问题,应该是特别需要检查的地方,以防止电源的短路和正负极的错误。然后在仔细检查电路的连接是否有问题,或者有没有虚焊或者没有焊接到的地方,然后核对一下元器件的安装是否有问题,安装上去是否符合规定,由于已经是大学四年都是做过了很多实训过来了,对于这些还是游刃有余的,但是在上机调试后还是发现了很多的问题。

 

五、部分程序源码

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

DS18B20_Init();  //DS18B20初始化
	 while(1){
	 	/*获取各个站点温度值*/
	 	tem[0] = DS18B20_GetTem1() + 55;	
	 	tem[1] = DS18B20_GetTem2() + 55;
	 	tem[2] = DS18B20_GetTem3() + 55;
	 	tem[3] = DS18B20_GetTem4() + 55;
	 	tem[4] = DS18B20_GetTem5() + 55;
	 	tem[5] = DS18B20_GetTem6() + 55;
	 	tem[6] = DS18B20_GetTem7() + 55;
	 	tem[7] = DS18B20_GetTem8() + 55;
		LCD_Clear();
		Scan_Key();
		switch(Key_Code){
			case 0 : LCD_LineFeed1();                  //换屏幕第一行
					 LCD_DisplayText("The first is "); //显示文字
					 LCD_LineFeed2();                  //换屏幕第二行
					 LCD_DisplayNum(tem[Key_Code] - 55, 1); //显示温度数据
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
			case 1 : LCD_LineFeed1();
					 LCD_DisplayText("The second is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
					 
			case 2 : LCD_LineFeed1();
					 LCD_DisplayText("The third is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
					 
			case 3 : LCD_LineFeed1();
					 LCD_DisplayText("The fourth is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
			case 4 : LCD_LineFeed1();
					 LCD_DisplayText("The fifth is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
			case 5 : LCD_LineFeed1();
					 LCD_DisplayText("The sixth is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
			case 6 : LCD_LineFeed1();
					 LCD_DisplayText("The seventh is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
			case 7 : LCD_LineFeed1();
					 LCD_DisplayText("The eighth is ");
					 LCD_LineFeed2();
					 LCD_DisplayNum(tem[Key_Code] - 55, 1);
					 WriteDat(0xdf);					//显示温度单位
					 LCD_DisplayText("C");              //显示温度单位
					 break;
		}
		SendOneByte(0x55);	    //发送起始字节


 

资料包括:

 

需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59-54

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享✨ 目录 前言59. 螺旋矩阵 II54. 螺旋矩阵总结 59. 螺旋矩阵 II 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n…

ASIDE-Simulink接口预研报告

ASIDE-Simulink接口预研报告 2018年4月 1 引言 本报告描述ASIDE-Simulink接口的预先研究情况和结果。 2 目的 ASIDE-Simulink接口是ASIDE中的一个模块。它的主要功能是通过解析Simulink模型文件,把Simulink模型中的相关信息导入到ASIDE中,从而把Simu…

Vue-封装组件的案例

1.案例效果 封装要求&#xff1a; ①允许用户自定义title标题 ②允许用户自定义bgcolor背景色 ③允许用户自定义color文本颜色 ④MyHeader组件需要在页面顶部进行fixed固定定位&#xff0c;且z-index等于999 使用示例如下&#xff1a; <template><div class"…

独立、相关和正交的关系以及白噪声

注意如下边缘密度的计算&#xff1a; 第一个题&#xff1a;不独立&#xff0c;不相关&#xff0c;正交 第一个题&#xff1a;独立&#xff0c;不相关&#xff0c;正交 第一个题&#xff1a;独立&#xff0c;不相关&#xff0c;不正交

【第九天】面向程序设计_类

类 是一种数据结构&#xff0c;它可以包含数据&#xff0c;成员&#xff0c;常量和变量函数&#xff0c;成员方法&#xff0c;属性&#xff0c;构造函数和析构函数等和嵌套类型。 类的声明 在程序中类适用class关键字来声明的语法如下: class 类名 { }类的成员 类的定义包…

Coursier安装Scala报错Error downloading的解决方法

根据 Scala 官方目前的安装教程 https://docs.scala-lang.org/getting-started/index.html&#xff0c;我们下载 cs-x86_64-pc-win32.zip 并解压为 cs-x86_64-pc-win32.exe。在 PowerShell 中通过java --version确认 JVM 是否已安装&#xff0c;如果已安装&#xff0c;则切换到…

从代码到内容创作:程序员如何通过自媒体项目实现赚钱?

从代码到内容创作&#xff1a;程序员如何通过自媒体项目实现赚钱&#xff1f; 自媒体项目已成为程序员们实现赚钱的一种创新方式。通过将代码技术与内容创作结合&#xff0c;程序员可以在互联网上建立自己的品牌&#xff0c;并通过以下方式实现收入增长&#xff1a; 技术教程&a…

java学习路程之篇八、知识点、方法介绍、方法的定义和调用格式、方法常见问题、方法重载

文章目录 1、方法介绍2、方法的定义和调用格式3、方法常见问题4、方法重载 1、方法介绍 2、方法的定义和调用格式 3、方法常见问题 4、方法重载

微信小程序三脚猫功夫拿下组件注册与使用

1.局部注册组件 1.1创建components文件夹 1.2创建文件夹MyHeader 1.3选中MyHeader右键 说明&#xff1a;执行此步&#xff0c;将会自己创建四个文件 1.4MyHeader.wxml文件 说明&#xff1a;随便写点h5结构 <view class"sentence">励志语句</view> <…

实验四(双向重发布)7 14

一、配置网络地址&#xff0c;启用OSPF以及环回类型更改&#xff0c;启用RiP&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a;环回接口放置OSPF区域 R5&#xff1a; R6&#xff1a;环回接口放置RIp区域 二、重发布&#xff1a; 未重发布之前&#…

Gitee生成ssh公钥

进入 C:/Users/Administrator/.ssh &#xff0c;没有就手动创建该文件夹 打开cmd输入指令 ssh-keygen -t rsa -C "Gitee SSH Key" -f "C:\Users\.ssh\github_id_rsa"中间通过三次回车键确定查看ssh公钥 type C:\Users\Zzzy\.ssh\github_id_rsa.pub 复制放到…

[LeetCode] #118 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c; 每个数是它左上方和右上方的数的和。 杨辉三角&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<…

Linux 动态主机配置协议 DHCP

文章首发地址 如果管理的计算机有几十台&#xff0c;那么初始化服务器配置IP地址、网关和子网掩码等参数是一个繁琐耗时的过程。如果网络结构要更改&#xff0c;需要重新初始化网络参数&#xff0c;使用动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&a…

Ubuntu U盘只能读取不能写入

Ubuntu U盘只能读取不能写入 1. 问题2. 解决办法 1. 问题 Ubuntu系统下&#xff0c;U盘突然只能读取无法写入 原因是U盘的文件系统损坏&#xff0c;操作系统为了防止进一步毁坏文件系统&#xff0c;而将其设置成了只读 2. 解决办法 查看U盘分区和挂载 $ df -h 解除挂载 $ u…

微服务系列文章 之 SpringCloud中遇到的一些bug

1、There was a problem with the instance info replicator 错误原因&#xff1a; 该服务尝试将自己作为客服端注册解决办法&#xff1a; 在application.yml配置文件中&#xff0c;设置 # 注册Eureka服务 eureka:client:# Eureka服务注册中心会将自己作为客户端来尝试注册它自…

半导体热阻问题解析(Tc,Ta,Tj,Pc)

自记&#xff1a; 晶体管(或半导体)的热阻与温度、功耗之间的关系为&#xff1a; TaTj-*P(RjcRcsRsa)Tj-P*Rja 公式中&#xff0c;Ta(Ambient temperature)表示环境温度 Tj(Junction temperature)表示晶体管的结温&#xff0c;也就是封装内部半导体裸片的温度。硅片的…

RocketMQ学习笔记(实操篇)

目录 基本操作 启动 测试 双主双从集群搭建 总体架构 工作流程 服务器环境 Host添加信息 防火墙配置 环境变量配置 创建消息存储路径 broker配置文件 修改启动脚本文件 服务启动 查看进程状态 查看日志 mqadmin管理工具 使用方式 命令介绍 集群监控平台搭…

Java使用JNI实现C文件的调用

1.使用IDEA新建工程 构建最基本的maven类型就行&#xff0c;文件结构如下&#xff1a; 其中最主要的类如下&#xff1a; package org.linx;public class TestJNI {static {/*** 加载jni库&#xff0c;有一个重要的点就是生成的为libnative.so&#xff0c;下面加载代码需要消…

241:vue+openlayers绘制多边形,计算面积值

第241个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中绘制多边形,通过Polygon的getArea方法,计算出面积。 直接复制下面的 vue+openlayers示例源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共137行)相关API参考专栏目标示…

CSS3 动画 animation 入门学习笔记 之 属性详解

文章目录 简单介绍 CSS 动画CSS 动画的作用CSS 动画语法介绍CSS 动画属性animation-nameanimation-durationanimation-delayanimation-directionanimation-iteration-countanimation-play-stateanimation-timing-functionanimation-fill-modeanimation 简单介绍 CSS 动画 引用…