1 系统功能介绍
本系统是一款基于 STC89C52 单片机 的智能手环脉搏与心率检测装置,并配备 GSM 短信报警功能。通过集成 DS1302 实时时钟模块、心率传感器、SIM800 GSM 模块、LCD1602 液晶显示屏 和 按键输入,该手环能够实现时间显示、心率实时监控及异常心率报警等功能。
系统可佩戴在手腕上,实时监测佩戴者的脉搏和心率数据。当检测到心率超过 120 次/分钟的危险阈值时,系统将自动通过 GSM 模块向预设的手机号码发送报警短信(内容为 “Help me!”),并且为了避免短时间重复报警,短信触发设定有 20 秒的间隔机制。
主要功能特点如下:
时间与心率双显示:
- 液晶显示屏第一行显示当前时间;
- 第二行显示实时脉搏/心率数据。
时间设置功能:
- 通过按键修改时间;
- 支持整点和半点快速调整。
心率监控开关:
- 用户可通过按键切换心率监控功能的开关;
- 液晶显示当前监控状态。
GSM 短信报警:
- 当心率监控开启且检测值超过 120 次/分钟时,SIM800 GSM 模块向绑定号码发送报警短信“Help me!”;
- 每次触发后,需等待 20 秒方可再次发送。
2 系统电路设计
2.1 单片机最小系统
系统的核心控制器为 STC89C52 单片机,其具备丰富的 I/O 口和稳定的处理能力,适用于多模块协作场景。
- 晶振电路:使用 12MHz 晶振,为单片机提供稳定的工作时钟。
- 复位电路:由电容、电阻和复位按键构成,上电时自动复位,用户可手动复位。
- 电源电路:提供稳定的 +5V 直流电压,部分外设如 SIM800 通过降压电路获得 +4V 电源。
2.2 实时时钟模块 DS1302
DS1302 是一款低功耗实时时钟芯片,内置秒、分、时、日、月、年计时单元,并带有闰年补偿功能。
- 接口方式:串行通信(3 线制),占用单片机 3 个 I/O 口。
- 优点:掉电后依靠备用电池保持时间数据不丢失。
- 作用:为 LCD 提供时间显示数据,并可通过按键对时间进行整点或半点的调整。
2.3 心率传感器
心率传感器负责检测佩戴者脉搏信号,并计算心率值。
- 原理:通过光电容积脉搏波(PPG)技术测量血流变化,将信号转换为电信号输出。
- 接口:可输出模拟信号,经过单片机内部定时与脉冲计数计算 BPM(每分钟心跳数)。
- 应用:在心率监控开启的情况下,实时采集并计算心率值,与设定阈值进行比较。
2.4 GSM 模块 SIM800
SIM800 GSM 模块用于发送报警短信。
- 接口:UART 串口,与单片机 TXD/RXD 相连,波特率一般设定为 9600bps。
- 控制方式:使用 AT 指令进行短信发送控制。
- 应用逻辑:当心率超过 120 BPM 时,模块向设定手机号码发送“Help me!”短信。
2.5 LCD1602 液晶显示模块
LCD1602 显示屏分为两行:
- 第一行:显示当前时间(格式:HH:MM:SS);
- 第二行:显示心率值(单位 BPM)和监控状态。
- 接口:8 位并行数据总线,或通过 4 位模式节省单片机 I/O 口。
2.6 按键模块
系统设计多个按键,分为:
- 时间调整键:用于修改小时、分钟,支持整点与半点跳变。
- 模式切换键:开启或关闭心率监控功能。
按键采用下拉电阻方式,按下时输出低电平,单片机检测按键状态后执行对应功能。
2.7 电源系统
手环由锂电池供电,并通过 DC-DC 转换提供稳定的 5V 和 4V 电源。
- 单片机、LCD、DS1302 使用 5V 供电;
- SIM800 使用 4V 供电,防止过压损坏模块。
3 程序设计
3.1 主程序框架
系统采用循环扫描方式,主程序不断调用时间读取、心率采集、按键检测、LCD 刷新和 GSM 短信报警等功能函数。
#include <reg52.h>
#include "ds1302.h"
#include "lcd1602.h"
#include "heartrate.h"
#include "gsm.h"
#include "key.h"
unsigned int heartRate = 0;
bit monitorOn = 0;
unsigned long lastSmsTime = 0;
void main()
{
LCD_Init();
DS1302_Init();
GSM_Init();
Key_Init();
Timer_Init();
while(1)
{
Display_Time();
Display_HeartRate(heartRate, monitorOn);
Key_Scan();
if(monitorOn)
{
heartRate = HeartRate_Read();
if(heartRate > 120 && (GetSysTime() - lastSmsTime > 20000))
{
GSM_SendSMS("Help me!");
lastSmsTime = GetSysTime();
}
}
}
}
3.2 时间显示与设置模块
void Display_Time(void)
{
Time t = DS1302_ReadTime();
LCD_SetCursor(0,0);
LCD_Printf("%02d:%02d:%02d", t.hour, t.min, t.sec);
}
void Set_Time_Hour(void)
{
// 按键触发,整点或半点调整
}
逻辑:实时读取 DS1302 时间 → 显示到 LCD 第一行 → 按键可修改整点或半点时间。
3.3 心率采集与计算模块
unsigned int HeartRate_Read(void)
{
// 读取传感器输出脉冲,计算一分钟心率
return bpm;
}
通过定时器计数脉冲数并换算为 BPM(beats per minute),结果显示在 LCD 第二行。
3.4 GSM 短信报警模块
void GSM_SendSMS(char *text)
{
GSM_SendCmd("AT\r");
GSM_SendCmd("AT+CMGF=1\r");
GSM_SendCmd("AT+CMGS=\"+8613800000000\"\r");
GSM_SendText(text);
GSM_SendCtrlZ();
}
流程:发送 AT 指令设置短信模式 → 输入短信内容 → 发送控制字符 0x1A(Ctrl+Z)发送。
3.5 按键扫描与功能切换模块
void Key_Scan(void)
{
if(Key_Pressed(KEY_MODE))
{
monitorOn = !monitorOn;
}
if(Key_Pressed(KEY_TIME))
{
Set_Time_Hour();
}
}
- 模式键:切换心率监控开关;
- 时间键:修改 DS1302 时间。
4 总结
本设计基于 STC89C52 单片机,将时间显示、心率检测与 GSM 短信报警集成在一个便携式智能手环中。通过 DS1302 提供稳定的时间显示功能,心率传感器实现实时脉搏采集,SIM800 模块完成紧急短信发送。系统支持按键调整时间与监控模式,报警逻辑简洁高效,并通过设定触发间隔避免短信轰炸。
该系统可广泛应用于老人、心脏病患者的日常健康监测,也可用于运动员的心率防护监控。未来可在此基础上加入蓝牙传输、GPS 定位等功能,实现更全面的健康与安全管理。