基于51单片机的心率测量报警
基于51单片机的心率测量报警( proteus仿真+程序+设计报告+原理图+讲解视频)
仿真图proteus7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0103
1. 主要功能:
基于51单片机心率脉搏检测系统:
采用51单片机作为主控制器,采集心率脉搏电路信号并转化为心率显示在LCD1602显示屏,心率测量范围:20-180 BPM。
1.假定测出的脉搏数<60 BPM,测量心率不正常,则屏幕将显示“low rate”
2.如果脉搏60-100 BPM,如果检测率正常,则屏幕将显示“very good”
3.假定测出的脉搏数在100-180 BPM,心率过高,则屏幕将显示“high rate ”
4.其他数值:error(异常)
5.检测两个脉冲间的时间空隙是否是有效的数值,
6.心率检测电路具有信号检测→放大→整形→滤波→隔离作用。
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
资料下载链接:
通过网盘分享的文件:KEY_S0103
链接: https://pan.baidu.com/s/1m_EAbTRUFsjkO-GcDBxPDw?pwd=d5rn
提取码: d5rn
以下为本设计资料展示图:
2. 讲解视频:
讲解视频主要包含仿真运行讲解
3. 仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602液晶第一行显示状态信息:
very good:心率正常(60-100 BPM)
low rate:心率过低(<60 BPM)
high rate:心率过高(>100 BPM)
error:异常心率
no signal:无信号输入
第二行显示检测到的到的心率脉搏数。
通过调整信号发生器的值改变心率检测信号,如下图修改为2HZ,对应心率为118,误差2BPM,心率过高显示high rate。
4. 原理图
有原理图
5. 程序代码
使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。
/ 定时器中断服务函数 - 1ms中断
void Timer0() interrupt 1
{
完整代码见文章下载链接
u8 i;
u32 sum = 0;
u8 current_key_state;
// 重新装载定时器
TH0 = 0xFC;
TL0 = 0x18;
// 时间计数
time_ms++;
current_time++;
// 边沿检测 - 检测上升沿
current_key_state = key;
// 上升沿检测:上次为低电平,当前为高电平
if((key_last_state == 0) && (current_key_state == 1))
{
// 计算脉冲周期(单位:ms)
if(last_pulse_time > 0)
{
pulse_period = current_time - last_pulse_time;
// 放宽有效性检查范围:周期在250ms-3000ms之间(对应心率20-240BPM)
if((pulse_period >= 250) && (pulse_period <= 3000))
{
// 计算瞬时心率:60000ms / 周期(ms)
u16 instant_hr = 60000 / pulse_period;
// 滑动平均滤波
for(i = 0; i < 9; i++)
shu[i] = shu[i + 1];
shu[9] = instant_hr;
// 计算平均值
sum = 0;
for(i = 0; i < 10; i++)
sum += shu[i];
heart_rate = sum / 10;
valid_measurement = 1;
calibrate_sensor();
// 更新显示 - 移除范围限制,允许显示所有心率值
disp[6] = heart_rate / 100 + 0x30;
disp[7] = (heart_rate % 100) / 10 + 0x30;
disp[8] = heart_rate % 10 + 0x30;
write_string(2, 3, disp);
// 心率状态评估 - 调整评估范围
if((heart_rate >= 60) && (heart_rate <= 100))
{
flag = 0;
write_string(1, 3, "very good ");
}
else if(heart_rate > 0 && heart_rate < 60)
{
write_string(1, 3, "low rate ");
flag = 1; // 心率过低报警
}
else if(heart_rate > 100 && heart_rate <= 180)
{
write_string(1, 3, "high rate ");
flag = 1; // 心率过高报警
}
else
{
write_string(1, 3, "error ");
flag = 1; // 异常心率报警
}
}
}
// 更新上次脉冲时间
last_pulse_time = current_time;
}
// 保存当前按键状态
key_last_state = current_key_state;
// 超时处理:如果3秒内没有检测到脉冲,显示0并重置测量
if((current_time - last_pulse_time) > 3000)
{
// 显示心率为0
disp[6] = '0';
disp[7] = '0';
disp[8] = '0';
write_string(2, 3, disp);
write_string(1, 3, "no signal ");
last_pulse_time = 0;
valid_measurement = 0;
heart_rate = 0;
flag = 1; // 无信号报警
}
}
// 手动校准函数
void calibrate_sensor(void)
{
// 应用校准因子
heart_rate = (heart_rate * calibration_factor) / 100;
}
6. 设计报告
7530字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等
随着社会经济的快速发展和国民生活水平的显著提高,人们对于健康管理的重视程度日益提升,健康监测已成为现代生活中不可或缺的重要组成部分。心率作为评估人体心血管功能的核心生理指标,不仅能够实时反映心脏的工作状态,更能为多种疾病的早期预警提供重要参考依据。传统的心率监测设备,如医用级心电监护仪,虽然测量精度较高,但普遍存在价格昂贵、体积庞大、操作复杂等局限性,难以满足普通家庭日常健康监测的需求。这种供需矛盾催生了对于便携式、低成本、智能化健康监测设备的迫切需求。
在此背景下,基于嵌入式系统技术开发的家用级健康监测设备展现出巨大潜力。这类设备能够突破传统医疗设备的局限,实现随时随地的健康监测,让健康管理真正融入日常生活。特别是对于中老年人群、心血管疾病高危人群以及健身爱好者而言,便携式心率监测设备能够提供持续、便捷的健康状态跟踪,为预防保健和疾病管理提供有力支持。
7. 设计资料内容清单&&下载链接
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、程序代码注释
2、proteus仿真
3、功能要求
4、软硬件流程图
5、开题报告
6、设计报告
7、原理图
8、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接:
通过网盘分享的文件:KEY_S0103
链接: https://pan.baidu.com/s/1m_EAbTRUFsjkO-GcDBxPDw?pwd=d5rn
提取码: d5rn
更多资源 点击下方链接: