0 前言
🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 毕业设计 基于单片机的红外非接触人体测温仪阈值报警液晶显示设计(源码+硬件+论文)
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
🧿 项目分享:见文末!
1 主要功能
设计要求:
本设计由STC89C52单片机电路+1602液晶显示电路+MLX90614ESF红外非接触温度检测电路
+按键电路+蜂鸣器报警电路。
1、液晶实时显示MLX90614ESF检测的环境温度值和被测物体温度值,显示中E环境温度,O物体温度。
2、可以通过按键设置温度的阈值,如果MLX90614检测到的温度高于设置的阈值,则蜂鸣器报警,否
则,蜂鸣器不报警。
设计内容
本设计由STC89C52单片机电路+1602液晶显示电路+MLX90614ESF红外非接触温度检测电路+按键电路+蜂鸣器报警电路。
1、液晶实时显示MLX90614ESF检测的环境温度值和被测物体温度值,显示中E环境温度,O物体温度。
2、可以通过按键设置温度的阈值,如果MLX90614检测到的温度高于设置的阈值,则蜂鸣器报警,否则,蜂鸣器不报警。
2 硬件设计(原理图)
烧录
核心传感器
模块接口
(1)VCC 接5V
(2)GND 接GND
(3)SCL 时钟端,接单片机引脚
(4)SDA 数据端,接单片机引脚
3 核心软件设计
本系统设计主要采用Keil uVision4软件编写与调试程序,程序语言采取易读性和移植性更高的C语言编写。系统运行流程图如下图
关键代码
#include<reg52.h> //����ͷ�ļ���һ���������Ҫ�Ķ���ͷ�ļ���������ܼĴ����Ķ���
#include<stdio.h>
#include<intrins.h>
#include "delay.h"
#include "1602.h"
#include "mlx90614.h"
sbit buzzer=P1^0; //���Ŷ���
sbit key1=P2^0;
sbit key2=P2^1;
unsigned long time_20ms; //��ʱ����
char dis0[16]; //Һ��������ʾ�ݴ�
char dis1[16];
unsigned int setNum = 37; //����ֵ
//---------------------------------------
//Name: CALTEMP
//Temperature data is T=(Data)*0.02-273.15
//---------------------------------------
bit rekey =0;//��ֹ�����ظ�����
bit disFlag =0;//������ʾ��־
unsigned int Tem; //�¶�
float objTemp,envTemp; //�����¶Ⱥͻ����¶�
void Init_Timer0(void); //��������
void main (void)
{
Init_Timer0(); //��ʱ��0��ʼ��
LCD_Init(); //��ʼ��Һ��
DelayMs(20); //��ʱ�������ȶ�
LCD_Clear();
while (1) //��ѭ��
{
if(disFlag==1) //��ʾ��־
{
Tem=ReadObjectTemp(); //��ȡʵ���¶�
objTemp=(float)(Tem)*0.02-273.15;
Tem=ReadEnvironTemp(); //��ȡ�����¶�
envTemp=(float)(Tem)*0.02-273.15;
sprintf(dis0,"E: %4.1f'C ",envTemp);//��ӡ�¶�ֵ
LCD_Write_String(0,0,dis0);//��ʾ
sprintf(dis1,"O:%5.1f'C %3d ",objTemp,setNum);//��ӡ�¶�����ֵ
LCD_Write_String(0,1,dis1);//��ʾ
if(objTemp>setNum)
{buzzer =0; } //�¶ȸ߷���������
else
{buzzer=1;} //�¶ȵ� ֹͣ
disFlag = 0;
}
if((key1 == 0)||(key2 == 0)) //�������
{
if(rekey == 0)
{
DelayMs(10);
if(key1 == 0) //����1����
{
rekey =1; //��ֹ�ظ�����
if(setNum<200) setNum++; //++
}
else if((key2 == 0))//����2����
{
rekey =1; //��ֹ�ظ�����
if(setNum>0) setNum--; //--
}
}
}
else
{
rekey = 0; //��ֹ�ظ�����
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //ʹ��ģʽ1��16λ��ʱ����ʹ��"|"���ſ�����ʹ�ö����ʱ��ʱ����Ӱ��
TH0=(65536-20000)/256; //���¸�ֵ 20ms
TL0=(65536-20000)%256;
EA=1; //���жϴ�
ET0=1; //��ʱ���жϴ�
TR0=1; //��ʱ�����ش�
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //���¸�ֵ 20ms
TL0=(65536-20000)%256;
time_20ms++;
if(time_20ms%20==0) //��ʱ������ʾ
{disFlag = 1;}
}
4 实现效果
5 最后
包含内容
🧿 项目分享:见文末!