1 系统功能介绍
本设计基于 STC89C52 单片机,结合 脉搏传感器、温度传感器 DS18B20、LCD1602 液晶显示器、WiFi 模块 等外设,构建了一个 WiFi 心率计脉搏体温测量仪 APP 系统。系统能够实现对人体心率与体温的实时采集、处理、显示和远程上传,既可作为个人健康监测设备,也可扩展应用于家庭健康管理和远程医疗监护场景。
系统主要功能如下:
- LCD 实时显示:LCD1602 的第一行显示系统设计信息,第二行实时显示心率和温度数据。
- 心率测量:用户将手指轻放在脉搏传感器上,单片机采集传感器的脉搏波动信号并计算心率。
- 体温测量:系统通过 DS18B20 温度传感器实时获取人体温度,并与心率一同显示在 LCD1602 上。
- 数据上传:系统通过 WiFi 模块(ESP8266)将心率与体温数据实时传输至手机 APP,实现远程监控与数据存储。
该系统不仅实现了心率与体温的基本测量,还通过无线网络扩展了远程应用的可能性,具备良好的实用性与拓展性。
2 系统电路设计
整个系统由 单片机最小系统电路、脉搏传感器电路、温度传感器 DS18B20 电路、LCD1602 显示电路、WiFi 模块电路、电源电路 等组成。
2.1 单片机最小系统电路
-
核心控制器:STC89C52 单片机作为系统的中央处理单元,负责心率信号采集、温度测量、数据处理、LCD 驱动以及 WiFi 数据上传。
-
最小系统:包括复位电路、时钟电路和电源电路。
- 时钟一般采用 11.0592 MHz 晶振,保证串口通信的波特率精度。
- 复位电路由上拉电阻和电容构成,保证上电复位可靠性。
-
I/O 资源分配:
- 定时器和外部中断用于心率信号采集;
- 单总线接口用于温度传感器 DS18B20;
- P0/P2 口控制 LCD1602;
- 串口 UART 控制 WiFi 模块。
2.2 脉搏传感器电路
- 工作原理:脉搏传感器利用光电容积脉搏波原理,检测手指血液流量变化。心脏收缩和舒张时,指尖血液容量变化,引起透射光或反射光变化,进而产生与脉搏同步的波动信号。
- 信号采集:传感器输出模拟电压信号,经放大和滤波后送入单片机的外部中断口。
- 作用:每次检测到脉搏信号的有效上升沿/下降沿,单片机计数,从而计算心率。
2.3 温度传感器 DS18B20 电路
- 传感器类型:DS18B20 为数字温度传感器,采用单总线协议。
- 优点:测温范围宽(-55℃~~+125℃)、分辨率可选(9~~12 位)、无需外接 ADC。
- 接口方式:单线接口连接至单片机 I/O 口,单片机通过时序控制获取温度数据。
2.4 LCD1602 显示电路
-
显示原理:LCD1602 为字符型液晶,可显示 2 行,每行 16 个字符。
-
功能实现:
- 第一行显示系统提示信息,如“Heart&Temp”;
- 第二行实时显示心率和体温,例如 “H:075 T:36.5”。
2.5 WiFi 模块电路
- 选用模块:ESP8266 WiFi 模块,通过串口通信与单片机连接。
- 作用:负责将心率与体温数据上传至手机 APP。
- 通信协议:常用 AT 指令配置,单片机通过 UART 发送数据,模块再将数据通过 TCP/UDP 上传至服务器或 APP。
2.6 电源电路
- 供电方式:系统采用 5V 电源,部分器件需要 3.3V(如 ESP8266),通过 AMS1117-3.3 稳压芯片提供稳定电源。
- 电源指示:使用 LED 指示电路工作状态。
3 系统程序设计
程序部分采用 模块化设计,分为:主程序、心率测量程序、温度测量程序、LCD 显示程序、WiFi 通信程序 等。
3.1 主程序框架
#include <reg52.h>
#include "lcd1602.h"
#include "ds18b20.h"
#include "uart.h"
#include "pulse.h"unsigned int heartRate = 0;
float temperature = 0;void main()
{LCD_Init();UART_Init();DS18B20_Init();Pulse_Init();LCD_ShowString(0,0,"Heart&Temp Sys");while(1){heartRate = Get_HeartRate();temperature = DS18B20_ReadTemp();LCD_ShowString(1,0,"H:");LCD_ShowNum(1,2,heartRate,3);LCD_ShowString(1,6,"T:");LCD_ShowFloat(1,8,temperature,4,1);UART_SendData(heartRate, temperature);}
}
3.2 心率测量程序
心率通过外部中断捕获脉搏信号波形,根据一定时间内的脉冲数计算。
unsigned int pulseCount = 0;
unsigned int heartRate = 0;void Pulse_Init(void)
{IT0 = 1; // 外部中断0下降沿触发EX0 = 1; // 开启外部中断0EA = 1; // 总中断开
}void External_Int0(void) interrupt 0
{pulseCount++;
}unsigned int Get_HeartRate(void)
{unsigned int bpm = 0;// 假设1分钟统计脉冲数, 实际可缩短时间窗口再折算bpm = pulseCount * 6; // 10秒统计后乘以6pulseCount = 0;return bpm;
}
3.3 温度测量程序(DS18B20)
通过单总线协议与 DS18B20 通信,读取温度并转换为浮点数。
float DS18B20_ReadTemp(void)
{int temp;float t;DS18B20_Start();DS18B20_WriteByte(0xCC); // 跳过ROMDS18B20_WriteByte(0x44); // 启动温度转换DelayMs(750); // 等待转换完成DS18B20_Start();DS18B20_WriteByte(0xCC);DS18B20_WriteByte(0xBE); // 读温度寄存器temp = DS18B20_ReadByte();temp |= DS18B20_ReadByte() << 8;t = temp * 0.0625; // DS18B20 分辨率 0.0625℃return t;
}
3.4 LCD 显示程序
void LCD_ShowFloat(unsigned char x, unsigned char y, float num, unsigned char len, unsigned char point)
{unsigned int temp = (unsigned int)(num * 10);LCD_ShowNum(x,y,temp/10,len-point);LCD_ShowString(x,y+len-point,".");LCD_ShowNum(x,y+len-point+1,temp%10,point);
}
3.5 WiFi 通信程序
单片机通过 UART 向 ESP8266 发送心率和温度数据。
void UART_Init(void)
{SCON = 0x50; // 串口模式1TMOD |= 0x20; // 定时器1方式2TH1 = 0xFD; // 波特率9600TL1 = 0xFD;TR1 = 1;
}void UART_SendByte(unsigned char dat)
{SBUF = dat;while(!TI);TI = 0;
}void UART_SendData(unsigned int hr, float temp)
{char buffer[20];sprintf(buffer,"HR:%d T:%.1f\n",hr,temp);for(unsigned char i=0; buffer[i] != '\0'; i++){UART_SendByte(buffer[i]);}
}
4 总结
本设计基于 STC89C52 单片机,实现了一个具备 心率与体温测量、LCD 显示和 WiFi 上传 功能的完整系统。其特点如下:
- 实时监测:能够同时获取心率和体温,适合日常健康管理。
- 数据可视化:LCD1602 直观显示当前心率和温度。
- 远程传输:通过 ESP8266 模块实现数据无线上传,支持手机 APP 端查看。
- 操作简便:使用者仅需将手指放在传感器上即可完成心率和温度采集。
- 可扩展性强:后续可增加血氧、血压等传感器,进一步扩展健康监测范围。
该系统在健康检测与远程医疗方面具有一定应用价值,同时也为学习 传感器应用、单片机控制、串口通信、无线数据传输 等技术提供了实践平台。