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; // 开启外部中断0
EA = 1; // 总中断开
}
void External_Int0(void) interrupt 0
{
pulseCount++;
}
unsigned int Get_HeartRate(void)
{
unsigned int bpm = 0;
// 假设1分钟统计脉冲数, 实际可缩短时间窗口再折算
bpm = pulseCount * 6; // 10秒统计后乘以6
pulseCount = 0;
return bpm;
}
3.3 温度测量程序(DS18B20)
通过单总线协议与 DS18B20 通信,读取温度并转换为浮点数。
float DS18B20_ReadTemp(void)
{
int temp;
float t;
DS18B20_Start();
DS18B20_WriteByte(0xCC); // 跳过ROM
DS18B20_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; // 串口模式1
TMOD |= 0x20; // 定时器1方式2
TH1 = 0xFD; // 波特率9600
TL1 = 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 端查看。
- 操作简便:使用者仅需将手指放在传感器上即可完成心率和温度采集。
- 可扩展性强:后续可增加血氧、血压等传感器,进一步扩展健康监测范围。
该系统在健康检测与远程医疗方面具有一定应用价值,同时也为学习 传感器应用、单片机控制、串口通信、无线数据传输 等技术提供了实践平台。