问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于单片机的红外非接触人体测温仪设计与实现

创作时间:
作者:
@小白创作中心

基于单片机的红外非接触人体测温仪设计与实现

引用
CSDN
1.
https://blog.csdn.net/qq_63964231/article/details/136519675

本文介绍了一种基于STC89C52单片机的红外非接触人体测温仪设计方案。该系统集成了1602液晶显示器、MLX90614ESF红外温度传感器、按键和蜂鸣器等组件,能够实时显示环境温度和物体温度,并通过按键设置温度阈值,当检测到的温度超过设定值时会触发蜂鸣器报警。文章提供了完整的硬件连接和软件编程实现,对于从事单片机开发和嵌入式系统设计的读者具有较高的参考价值。

系统组成

本设计由以下组件构成:

  • STC89C52单片机
  • 1602液晶显示器
  • MLX90614ESF红外非接触温度传感器
  • 按键电路
  • 蜂鸣器报警电路

功能要求

  1. 液晶实时显示MLX90614ESF检测的环境温度值和被测物体温度值,显示格式为:
  • E:环境温度
  • O:物体温度
  1. 通过按键设置温度阈值,当检测到的温度高于设置的阈值时,蜂鸣器报警;否则,蜂鸣器不报警。

硬件连接

硬件连接主要包括以下几个部分:

  • 单片机引脚定义:
  • P1^0:蜂鸣器控制
  • P2^0:按键1
  • P2^1:按键2

软件实现

软件部分主要包含以下几个功能模块:

初始化模块

void Init_Timer0(void)
{
    TMOD |= 0x01;  // 使用模式1,16位定时器
    TH0 = (65536 - 20000) / 256;  // 20ms定时
    TL0 = (65536 - 20000) % 256;
}

主循环模块

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;  // 防止重复按下
        }					
    }
}

总结

本文详细介绍了基于STC89C52单片机的红外非接触人体测温仪的设计方案,包括硬件连接和软件编程实现。该方案具有较高的实用价值,可以作为类似项目开发的参考。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号