【毕业设计】12-基于单片机的电子体温计(原理图工程+源码工程+仿真工程+答辩论文)

news2024/7/6 18:32:45

【毕业设计】12-基于单片机的电子体温计(原理图工程+源码工程+仿真工程+答辩论文)

文章目录

  • 【毕业设计】12-基于单片机的电子体温计(原理图工程+源码工程+仿真工程+答辩论文)
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

任务书

主要研究内容
采用单片机作为控制器、结合温度传感器、A/D转换器、显示芯片等外围元件设计出一个智能温度计系统,使其实现系统的温度的采集、显示、超温报警等功能。
1、根据智能温度计的功能要求,提出系统总体结构;
2、对系统进行硬件设计、软件设计;
3、制作实物。
研究方法:
阅读大量智能楼宇消防监控系统的相关文献资料,掌握其技术的原理和电路的结构,理解程序实现的核心思想;积累相关资料确定论文的主体内容,重点进行研究;
资料链接
原理图工程文件
源码工程文件
实物图片
答辩论文,
论文低重复率。字数22922
BOM表
实物操作视频
元器件相关资料

设计说明书

摘要

传统的额温枪是通过水银温度计来测试系统,水银温度计在应用过程中十分复杂,并且需要等待很久时间,不能及时得出测试结果.本文针对此现象设计出一款基于单片机的电子体温计,通过电子式的传感器来对数据进行读取。使用的单片机为STC89C51、MLX90614温度传感器、蜂鸣器、液晶显示器组成,将检测到的数据直接将检测到的温度显示在屏幕中,实时的显示当前的体温数据。为系统实现的功能有测量体温设置报警阈值。系统由硬件软件两部分组成。通过电路设计、程序编写,最终制作实物对实物进行测试,验证了本次系统设计功能。设计过程中充分考虑到系综合系统的性价比,保证在生产过程中有着一个较好的性价比满。社会要求。并且保证测量精度达到医疗级别系统运行稳定可靠。
本设计紧跟当前社会发展以及新冠疫情发生,设计出一款电子体温计,可以应用在市场上。并且可以将其推广。

设计框架架构

前 言 1
第一章 绪论 2
第一节 温度计的研究背景 2
第二节 温度计的研究意义 2
第三节 温度计的研究现状及趋势 4
第四节 本文的主要研究内容 5
第五节 本章小结 6
第二章 基于单片机的电子体温计的系统设计方案分析 7
第一节 电子体温计的设计要求分析 7
第二节 温度检测方案的确定 8
一、温度传感器选择 8
二、温度传感器特性 9
第三节 系统结构组成框图 10
第四节 本章小结 11
第三章 基于单片机的电子体温计系统硬件电路设计 12
第一节 单片机最小系统电路设计 12
一、单片机的简介 12
二、复位电路 14
二、晶振电路 15
第二节 温度检测电路的设计 15
第三节 按键电路设计 16
第四节 报警提示模块电路设计 17
第五节 LCD液晶显示电路设计 18
第六节 电源电路设计 19
第七节 系统总电路图 19
第八节 本章小结 20
第四章 基于单片机的电子体温计的软件设计 21
第一节 Keil软件介绍 21
第二节 系统的主程序流程设计 22
第三节 其他子程序流程设计 23
一、报警驱动程序流程图 23
二、按键驱动程序流程图 23
三、LCD液晶显示驱动程序流程图 24
四、温度传感器驱动程序流程图 25
第四节 按键模块程序设计 26
第五节 LED及蜂鸣器驱动程序设计 27
第六节 LCD液晶显示驱动程序设计 27
第七节 温度传感器驱动程序设计 28
第八节 本章小结 29
第五章 基于单片机的电子体温计的实现 30
第一节 实物调试 30
第二节 功能测试 32
一、体温读取测试 33
二、体温阈值调节功能测试 34
三、超温报警测试 36
第三节 结果分析 36
第四节 本章小结 37
结 论 38
致 谢 39
参考文献 40
附 录 42
一、英文原文 42
二、英文翻译 45
三、工程图纸 47
四、源代码 48

设计说明书及设计文件

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
论文低重复率。字数22922

在这里插入图片描述

源码展示


#include <reg52.h>
#include "LCD1602.h"
#include "MLX90614.h"
#include "keys.h"
#include "Timer0.h"
sbit LED_Green_Pin=P1^7;
sbit Speaker_Pin=P2^0;
unsigned char MS200_Con=0;
unsigned char View_Change=1;
unsigned int Set_Data=375;
unsigned char Set_View[]={0,0,'.',0,0xdf,'C'};
void main()
{
	Timer0_Init();//初始化定时器0
	MLX90614_Initial();//初始化温度传感器
	InitLcd();//初始化液晶
	Lcd_1602_word(0x80,16,"Temp:           ");
	Lcd_1602_word(0xC0,16,"SET:            ");
	while(1)
	{
		if(Key_Change)
		{
			Key_Change=0;
			if(Key_Value==1)
			{
				Set_Data++;
			}
			else
			{
				Set_Data--;
			}
		
		}
		if(MS200_Con>=20)
		{
			MS200_Con=0;
			MLX90614_Memread();
			View_Change=1;
		}
		if(View_Change)
		{
			View_Change=0;
			Lcd_1602_word(0x88,8,MLX90614_Temp_View);
			
			Set_View[0]=Set_Data/100+0x30;
			Set_View[1]=Set_Data%100/10+0x30;
			Set_View[3]=Set_Data%10+0x30;
			Lcd_1602_word(0xca,6,Set_View);
			
			if((MLX90614_Temp/10)>=Set_Data)//温度大于设定数值
			{
				Speaker_Pin=0;
				LED_Green_Pin=1;
			}
			else
			{
				LED_Green_Pin=0;
				Speaker_Pin=1;
			}
			
		}
	}
/*
  功能描述: 定时器0中断函数
  函数参数: 无
  返回说明: 无
*/
void Timer0_Interrupt(void) interrupt 1	//	定时器0中断函数
{	
	TH0 = 0xDC;	//重置定时时间,如果初始化使用的是定时方式2则不需要重置
	TL0 = 0x00;
	MS200_Con++;
  Key_Acquisition();//扫描按键
}
#include "MLX90614.h"
long MLX90614_Temp=0;
unsigned char MLX90614_Temp_View[8]={0,0,0,'.',0,0,0xdf,'C'};
//************ 数据定义**************** 
bdata unsigned char MLX90614_Flag;//可位寻址数据 
sbit MLX90614_Bit_Out= MLX90614_Flag ^7; 
sbit MLX90614_Bit_In= MLX90614_Flag ^0; 
void MLX90614_Memread(void) 
{ 
	unsigned char DataH,DataL,Pecreg;
  MLX90614_Start_Bit(); 
  MLX90614_Tx_Byte(0xB4);  //Send SlaveAddress 
  //tx_byte(0x00); 
  MLX90614_Tx_Byte(0x07);  //Send Command 
  //------------ 
  MLX90614_Start_Bit(); 
  MLX90614_Tx_Byte(0x01); 
  MLX90614_Bit_Out=0; 
  DataL=MLX90614_Rx_Byte(); 
  MLX90614_Bit_Out=0; 
  DataH=MLX90614_Rx_Byte(); 
  MLX90614_Bit_Out=1; 
  Pecreg=MLX90614_Rx_Byte(); 
  MLX90614_Stop_Bit(); 
	MLX90614_Temp=DataH*256+DataL;	
	MLX90614_Temp=MLX90614_Temp*2;
	//MLX90614_Temp=MLX90614_Temp-27315;
	MLX90614_Temp=MLX90614_Temp+MLX90614_Correct_Data;
	if(MLX90614_Temp>=27315)
	{
		MLX90614_Temp=MLX90614_Temp-27315;
		MLX90614_Temp_View[0]=MLX90614_Temp/10000+0x30;
		MLX90614_Temp_View[1]=MLX90614_Temp%10000/1000+0x30;
		MLX90614_Temp_View[2]=MLX90614_Temp%1000/100+0x30;
		MLX90614_Temp_View[4]=MLX90614_Temp%100/10+0x30;
		MLX90614_Temp_View[5]=MLX90614_Temp%10+0x30;
		
		if(MLX90614_Temp_View[0]==0x30)
		{
			MLX90614_Temp_View[0]=' ';
			if(MLX90614_Temp_View[1]==0x30)
			{
				MLX90614_Temp_View[1]=' ';
			}
		}
	}
	else
	{
		MLX90614_Temp=27315-MLX90614_Temp;
		MLX90614_Temp_View[0]='-';
		MLX90614_Temp_View[1]=MLX90614_Temp%10000/1000+0x30;
		MLX90614_Temp_View[2]=MLX90614_Temp%1000/100+0x30;
		MLX90614_Temp_View[4]=MLX90614_Temp%100/10+0x30;
		MLX90614_Temp_View[5]=MLX90614_Temp%10+0x30;
		
		if(MLX90614_Temp_View[1]==0x30)
		{
			MLX90614_Temp_View[1]=' ';
		}
		MLX90614_Temp=MLX90614_Temp-27315;
	}	
	
} 
void MLX90614_Initial()
{
	MLX90614_SCL=1;
	MLX90614_SDA=1;_nop_(); 
	_nop_();_nop_();_nop_(); 
	MLX90614_SCL=0; 
	MLX90614_Delay(1000); 
	MLX90614_SCL=1; 
}
//************************************ 
void   MLX90614_Start_Bit(void) 
{ 
   MLX90614_SDA=1; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SCL=1; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SDA=0; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SCL=0; 
   _nop_();_nop_();_nop_();_nop_();_nop_();  
} 
//------------------------------ 
void   MLX90614_Stop_Bit(void) 
{ 
   MLX90614_SCL=0; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SDA=0; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SCL=1; 
   _nop_();_nop_();_nop_();_nop_();_nop_(); 
   MLX90614_SDA=1; 
} 
//--------- 发送一个字节--------- 
void  MLX90614_Tx_Byte(unsigned char dat_byte) 
{ 
   char i,n,dat; 
   n=Nack_counter; 
TX_again: 
   dat=dat_byte; 
   for(i=0;i<8;i++) 
   { 
     if(dat&0x80) 
      MLX90614_Bit_Out=1; 
     else 
      MLX90614_Bit_Out=0; 
     MLX90614_Send_Bit(); 
     dat=dat<<1; 
   }    
   MLX90614_Receive_Bit(); 
   if(MLX90614_Bit_In==1) 
   { 
    MLX90614_Stop_Bit(); 
    if(n!=0) 
    {n--;goto Repeat;} 
    else 
     goto exit; 
   } 
   else 
    goto exit; 
Repeat: 
    MLX90614_Start_Bit(); 
    goto TX_again; 
exit: ; 
} 

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

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

相关文章

Efficient Large-Scale Language Model Training on GPU ClustersUsing Megatron-LM

Efficient Large-Scale Language Model Training on GPU ClustersUsing Megatron-LM 1 INTRODUCTION 在这篇文章中展示了 如何将 tensor &#xff0c;pipeline&#xff0c; data 并行组合&#xff0c;扩展到数千个GPU上。 提出了一个新的交错流水线调度&#xff0c;可以提升1…

卷积神经网络的工程技巧总结

参考 卷积神经网络的工程技巧(tricks) - 云社区 - 腾讯云 要成功地使用深度学习算法&#xff0c;仅仅知道存在哪些算法和解释它们为何有效的原理是不够的。一个优秀的机器学习实践者还需知道如何针对具体应用挑选一个合适的算法以及如何监控&#xff0c;并根据实验反馈改进机器…

基于 Hive 的 Flutter 文档类型存储

基于 Hive 的 Flutter 文档类型存储 原文 https://medium.com/gytworkz/document-type-storage-in-flutter-using-hive-a18ea9659d84 前言 长久以来&#xff0c;我们一直使用共享首选项以键对格式在本地存储中存储数据&#xff0c;或者使用 SQLite 在 SQL 数据库中存储数据。 存…

JSP | JSP原理深度剖析、基础语法

目录 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 二&#xff1a;JSP原理深度剖析 三&#xff1a;JSP的基础语法 一&#xff1a;分析使用纯粹Servlet开发web应用的缺陷 &#xff08;1&#xff09;在Servlet当中编写HTML/CSS/JavaScript等前端代码存在什么问题&…

基于ATX自动化测试解决方案

在整车开发中&#xff0c;诊断功能实现后需要进行测试验证。测试验证主要分为两个方面&#xff1a;诊断协议层测试和诊断功能测试。诊断协议层测试&#xff1a;需要对服务层服务定义、传输层相关时间参数进行测试验证&#xff1b;诊断功能测试&#xff1a;需要对各诊断功能项&a…

国产操作系统之银河麒麟服务器版V10安装

一、银河麒麟操作系统简介 银河麒麟是目前国内国产化操作系统主流产品之一。银河麒麟高级服务器操作系统V10是针对企业级关键业务&#xff0c;适应虚拟化、云计算、大数据、工业互联网时代对主机系统可靠性、安全性、性能、扩展性和实时性等需求&#xff0c;依据CMMI5级标准研制…

Java中的引用

Java中的引用强引用软引用弱引用虚引用终结器引用&#xff08;FinalReference)JDK 1.2版本之后&#xff0c;Java对引用的概念进行了扩充&#xff0c;将引用分为强引用&#xff08;Strongly Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#…

时间序列:时间序列模型---移动平均过程(Moving Average Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 我们从白噪声生成另一种时间序列。如下式&#xff1a; 这种时间序列的值由此刻的白噪声实现&#xff08;white noise realization)加上beta倍的前一刻的白噪声实现。注意这个beta跟CAPM模型的beta没有…

Linux redict 输入输出重定向 详细使用方法 文件描述符

Linux redict 重定向 Linux 重定向 在 Linux 系统中&#xff0c;我们需要输入和输出让系统与外部进行交互&#xff0c;比如在我们使用鼠标、键盘等输入设备时其实就是通过输入的方式让数据进行系统中。而系统输出一般就会打印在显示器上、刻录光盘等等。而我们要讲的重定向也…

【学习笔记70】数据劫持

一、 数据驱动视图 多次渲染页面&#xff0c;多的时候&#xff0c;比较麻烦和繁琐const box document.querySelector(.box)const obj {name: QF666,age: 18}box.innerHTML 名字: ${obj.name}; 年龄: ${obj.age};obj.age 99;box.innerHTML 名字: ${obj.name}; 年龄:…

RabbitMQ系列【16】AmqpTemplate接口详解

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言AmqpTemplateAPIsendconvertAndSendreceivereceiveAndConvertreceiveAndReplysendAndReceiveconvertSendAndReceive前言 RabbitTemplate 是spring-amqp提供的一个 RabbitMQ 消息操作模板类…

【Git】rebase 和 merge 的区别

前言 今天想把本地的两个提交压缩成一个提交&#xff0c;再推送到远程。用的是rebase命令解决的&#xff0c;于是乎又捡起了之前的遗留问题&#xff1a;rebase和 merge 有什么区别&#xff1f; 用的是idea内置的git插件&#xff0c;先把idea官网对 “update project” 选择 “…

postgresql使用pg_basebackup备份与恢复

postgresql可以使用pg_dump,pg_restore等命令来进行备份与恢复&#xff0c;那种情况不用停止pgsql服务&#xff0c;只需要执行备份恢复命令即可。 今天介绍的这种备份方式&#xff0c;类似于文件系统的备份与恢复&#xff0c;它需要使用pg_basebackup命令来进行备份&#xff0c…

C#医院门诊会员管理系统源码 通用会员系统源码

C#通用医院会员管理系统源码 源码分享&#xff01; 本系统使用的技术为NhibernateEF,底层完全封装&#xff0c;可二次使用快速开发。 本技术具有以下特点&#xff1a; 1.面向对象方式访问数据库&#xff0c;摆脱SQL&#xff1b; 2.可移植性强&#xff0c;支持所有流行的数据…

光格科技递交科创板上会稿:拟募资6亿 预计年营收3亿

雷递网 雷建平 11月29日苏州光格科技股份有限公司&#xff08;简称&#xff1a;“光格科技”&#xff09;日前递交上会稿&#xff0c;准备在科创板上市。光格科技计划募资6亿&#xff0c;其中&#xff0c;3.1亿元用于分布式光纤传感系统升级研发及量产项目&#xff0c;8000万元…

Java EE|多线程基本操作

文章目录一、一个简单的线程程序及运行二、线程的创建三、线程类——Thread详解常见构造方法常见几个属性线程的启动——start()线程的中断线程的等待——join()线程引用的获取线程的休眠四、多线程编程效率举例一、一个简单的线程程序及运行 在写这样一个代码之前&#xff0c…

web框架

目录 1 左右分割窗口 2 上下分割窗口 3 嵌套分割窗口 4 内联框架 框架的作用是把浏览器窗口划分成若干个小窗口&#xff0c;每个小窗口可以分别显示不同的网页。 框架的基本结构主要分为框架集和框架两个部分&#xff0c;在网页中分别用<frameset>和<frame>标记…

Netty进阶——粘包与半包(代码示例)

目录一、消息粘包和消息半包的概述1.1、消息粘包1.2、消息半包二、粘包现象代码示例2.1、粘包现象服务端示例代码2.2、粘包现象客户端示例代码2.3、分别启动服务端&#xff0c;客户端&#xff0c;查看服务端结果输出三、半包现象代码示例3.1、半包现象服务端示例代码3.2、半包现…

【JavaSE】学习异常

前言&#xff1a; 作者简介&#xff1a;爱吃大白菜1132 人生格言:纸上得来终觉浅&#xff0c;绝知此事要躬行 如果文章知识点有错误的地方不吝赐教&#xff0c;和大家一起学习&#xff0c;一起进步&#xff01; 如果觉得博主文章还不错的话&#xff0c;希望三连支持&#xff01…

D-020 SPI FLASH硬件电路设计

SPI FLASH硬件电路设计1 简介2 EEPROM 和SPI Flash的区别3 电路设计实战4 电路设计要点1 简介 SPI FLASH(Serial Peripheral Interface)是串行外设接口的缩写&#xff0c;是一种高度、全双工、同步的通信总线。一般应用在MCU与外围设备之间通讯&#xff0c;广泛应用在FLASH&am…