基于红外传感器人体测温系统设计(STC89C51单片机)
发布时间:2026/8/28 13:43:45 作者:尧图编辑部 阅读量:1,286
)
目 录摘 要 IABSTRACT II目 录 III1绪论 11.1选题背景及依据 11.2国内外研究现状 11.3研究内容 32 红外传感器人体测温系统原理及方案设计 42.1温度测量技术的概述 42.2 红外测温原理及方法 42.3 红外传感器人体测温系统的方案介绍 53 红外传感器人体测温系统的硬件设计 93.1 单片机处理模块 93.2 红外测温模块 113.3 电源模块 113.4 键盘模块 123.5 LCD显示模块 124 红外传感器人体测温系统的软件设计 134.1 主程序模块的设计 134.2 红外测温程序模块 144.3 键盘扫描程序模块 154.4 显示程序模块 155 红外传感器人体测温系统仿真调试与分析 175.1系统调试 175.2 结果分析 18结 论 20致 谢 21参考文献 22附录一 原理图 23附录二 元器件清单 24附录三 程序 251.3研究内容本设计主体采用TN901红外测温模块接收被测人体温度信号交由51单片机程序处理之后变成准确文字信号在1602液晶显示屏上显示具体读数。红外测温模块负责温度的测量、采集并将采集的数据通过数据端口传送到单片机。单片机负责控制启动温度测量接受测量数据计算温度值并输出显示以实现红外测温目的的非接触式电子体温计。红外传感器测量被测者体表温度能直接测量被测者体表实际温度测量精度高抗干扰能力强并运用此方法制造高性能的非接触式电子体温计。2 红外传感器人体测温系统原理及方案设计本设计将对硬件选择以及结构进行设计并且采用新型的可编程温度传感器TN901它的优点是能直接与单片机完成数据采集和处理实现方便、精度高性能稳定并且不需复杂的信号调理电路和A/D转换电路。不需要使传感器TN901与人体接触进行温度感应后TN901就可以感应温度并且直接送入AT89S51单片机中经过单片机的信号处理并将其送出通过LCD1602进行显示。这样的好处是可以快速并精准的测量出人体体温与传统的水银体温计相比它的优点是测量精准度高、测量时间短、并且方便读数。2.1温度测量技术的概述体温计是一种测量人体体温、辅助治疗和诊断疾病的常用医疗工具。随着现代科技的发展新材料、新工艺的运用各式各样的体温计陆续出现探测方式在不断改进但是人们最常用的依然是水银接触式体温计。水银接触式体温计是根据汞受热膨胀的原理制成的由于受到体温的影响水银的体积膨胀使体温计内水银柱的高度发生变化达到一定的设定刻度实现测量体温。由于人体体温一般变化范围在35摄氏度到42摄氏度之间所以水银接触式体温计刻度通常设定是35℃到42℃。每度的范围分成10份因此水银接触式体温计可精确到0.1度。近年来电子体温计越来越多的应用于各个行业比如冶金、玻璃制造及体温测量等领域。许多医院也采用了部分电子体温计虽然其性能和使用范围暂时不能与传统水银体温计相比但是因其拥有快速便捷、无需接触被测者等优点被广泛采用并且在未来会被应用的越来越广。3 红外传感器人体测温系统的硬件设计本红外传感器人体测温系统采用模块化的设计思想它的硬件结构由STC89C51单片机模块红外测温模块电源模块键盘模块和LCD显示模块组成。STC89C51单片机是本系统的控制中心它负责控制启动温度测量、接收测量数据、计算温度值、并根据取得的键值控制显示过程红外测温模块负责温度数据的采集、测量并将采集到的数据通过数据端口传送给STC89C51单片机 LCD显示模块把测量的温度值直观地显示给观测者电源模块负责本红外传感器人体测温系统电源的供应。图3-1 红外传感器人体测温系统的硬件方案设计框图//宏定义 #define uchar unsigned char #define uint unsigned int //头函数 #include reg52.h //全局变量定义 float Temp; float HJTemp,MBTemp; //TN9温度传感器头函数 #include TN9.h //LCD头函数 #include LCD.h //按键 sbit K P1^0; sbit LRP1^7; sbit LGP1^1; void delay1(uint x) { uint a,b; for(a0;a20;a) { for(bx;b0;b--); } } void delay(uint x) { uint a,b; for(a0;a20;a) { for(bx;b0;b--); } } //主函数 void main() { // while(1) //if(K1) //屏幕初始化 Init_LCD(); //开启指示灯 LR1; LG0; delay1(20); //开始按键 //while(K1); //温度显示初始化 // Init_T(); //循环读码 //while(1) while(1) { // Display(MBTemp,HJTemp); if(K0) { Init_T(); while(K0) { LR~LR; //读取目标温度 TN_IRACK_UN(); TN_IRACK_EN(); TN_GetData(0x4c); MBTempTemp; LR~LR; //读取环境温度 TN_IRACK_UN(); TN_IRACK_EN(); TN_GetData(0x66); HJTempTemp; //显示 Display(MBTemp,HJTemp);} } } }