单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3461|回复:4
打印上一主题下一主题

51单片机无接触测温程序mlx90614+lcd1602显示

 [复制链接]
跳转到指定楼层
楼主
ID:856585发表于 2021-6-17 19:27|只看该作者|只看大图回帖奖励
本来想着把他改成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;}
}


全部C语言程序51hei下载地址:
91、程序-MLX90614.rar(65.33 KB, 下载次数: 154)

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:582255发表于 2021-6-18 08:18|只看该作者
这个传感器是去年电赛推荐的吧?
板凳
ID:990898发表于 2021-12-12 23:14|只看该作者
这些头文件是怎么调用的?
#include "delay.h"
#include "1602.h"
#include "mlx90614.h"
地板
ID:697056发表于 2023-5-26 21:03|只看该作者
测量温度准确吗?
5#
ID:1105845发表于 2023-12-22 21:08|只看该作者
有温度补偿吗

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网