本来想着把他改成32的用oled屏显示的,一直没有时间,有程序,pcb图,误差还可以
可以无接触测体温,而且还能测环境温度,后期可以自己加个人体感应模块或着超声波,
制作出来的实物图如下:
布线参考(PCB工程暂不分享,大家可以参考此图自行画)
单片机源程序如下:
#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;}
}
![](http://cdn-img.sm-tc.cn/?src=l4uLj8XQ0JzRys6XmpbRnJCS0JvQmZCNipLQzc%2FNzs%2FJ0M7I0M3Py8fPxoyIiY%2BdmcuFj5jLz4mIj8zRj5GY&restype=3&from=derive&pi=&v=1)
全部C语言程序51hei下载地址:
91、程序-MLX90614.rar(65.33 KB, 下载次数: 154)
可以无接触测体温,而且还能测环境温度,后期可以自己加个人体感应模块或着超声波,
制作出来的实物图如下:
布线参考(PCB工程暂不分享,大家可以参考此图自行画)
单片机源程序如下:
#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;}
}
全部C语言程序51hei下载地址: