找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3549|回复: 4
收起左侧

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

  [复制链接]
ID:856585 发表于 2021-6-17 19:27 | 显示全部楼层 |阅读模式
本来想着把他改成32的用oled屏显示的,一直没有时间,有程序,pcb图,误差还可以
可以无接触测体温,而且还能测环境温度,后期可以自己加个人体感应模块或着超声波,
制作出来的实物图如下:
AB54B532AA7D4C7789C21F75E5E2C3CE.jpg
布线参考(PCB工程暂不分享,大家可以参考此图自行画)
51hei截图20210617192413.png
单片机源程序如下:
#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;}
}
51hei.png

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

评分

参与人数 1黑币 +50 收起 理由
admin + 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 | 显示全部楼层
测量温度准确吗?
回复

使用道具 举报

ID:1105845 发表于 2023-12-22 21:08 | 显示全部楼层
有温度补偿吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表