50、基于51单片机的心率计(上下限报警+蓝牙)(全套资料)

该博客介绍基于51单片机的心率计,由51单片机最小系统等模块组成。以51单片机为主控制器,用心率传感器测心率,LCD1602显示数值,独立按键设定上下限,超出范围声光报警,还能通过蓝牙发送数据。同时提供仿真图、源码及相关软件下载地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编号:50

基于51单片机的心率计(上下限报警+蓝牙)

功能描述:

50、基于51单片机的心率计(上下限报警+蓝牙)
        由 51单片机最小系统+心率模块 +LCD1602显示模块+独立按键+声光报警模块+串口模拟蓝牙模块组成
1、采用51单片机为主控制器
2、采用心率传感器PulseSensor测量心率。
3、LCD1602显示测得的心率值。
4、三个独立按键可设定心率上下限值。
5、当测得心率超出范围时,声光报警。
6、通过串口蓝牙模块将心率发送至串口。

视频演示链接:

50、基于51单片机的心率计(上下限报警+蓝牙)

仿真图:

PCB图:

实物图:

程序源码:

/***********************************************

***********************************************/
#include "reg52.h"
#include "lcd1602.h"
#include "delay.h"
#include "KEY.h"
#include "lcd1602.h"
#include "pulsesensor.h"
#include "uart.h"

sbit beep = P2^3;				//蜂鸣器控制脚

sfr T2MOD = 0xc9;          	 	//timer2 mode register

bit flag_beep = 0;				//报警标志位
bit flag_timer = 0;				//600ms定时时间到标志位

short Htup = 150,Htdw = 50;		//心率上限 默认150  下限默认50


/************************************************************************
* 函数: void Timer2Init(void)
* 描述: 定时器1初始化函数
* 参数: none.
* 返回: none.
* 备注:定时50ms 11.0592MHz
************************************************************************/  
void Timer2Init(void)	//50毫秒@11.0592MHz
{
	T2MOD = 0;			//初始化模式寄存器
	T2CON = 0;			//初始化控制寄存器
	TL2 = 0x00;			//设置定时初值
	TH2 = 0x4C;			//设置定时初值
	RCAP2L = 0x00;		//设置定时重载值
	RCAP2H = 0x4C;		//设置定时重载值
	TR2 = 1;			//定时器2开始计时
	ET2 = 1;			//开始计数
	EA = 1;				//开总中断
}


void main(void)
{
	
	unsigned char keyvalue = 0;		//键值 
	unsigned char Dis_mode = 0;		//显示状态标志 0:显示传感器数据  1:显示日期时间
	short heart = 0;				//定义心率变量
	Lcd1602_Init();		  			//LCD1602液晶初始化
	EXIT0_Init();					//外部中断初始化
 	Timer0Init();					//10毫秒@11.0592MHz
	Timer2Init();					//50毫秒@11.0592MHz
	UartInit();						//9600bps@11.0592MHz
	Lcd1602_String(0,0,"Heart Rate:     ");		//从第11行第0列开始显示	
	Lcd1602_String(0,1,"        ---r/min");
	while(1)
	{	
		heart =Pulsesensor_Read(); 		//获取心率值			
		if(heart==0)		 			//未检测到心率信号  		
		{
			Lcd1602_Write_Com(0xc0+8);	//设定显示位置第二行 第13列
			Lcd1602_Write_Data('-');
			Lcd1602_Write_Data('-');
			Lcd1602_Write_Data('-');
			Lcd1602_Write_Data('r');
			Lcd1602_Write_Data('/');
			Lcd1602_Write_Data('m');
			Lcd1602_Write_Data('i');
			Lcd1602_Write_Data('n');
			flag_beep = 0;				//关报警标志位
		}
		else	 						//检测到心率信号
		{
		 	Lcd1602_Write_Com(0xc0+8);	//设定显示位置第二行 第13列
			Lcd1602_Write_Data(heart/100+0X30);
			Lcd1602_Write_Data(heart%100/10+0X30);
			Lcd1602_Write_Data(heart%100%10+0X30);
			Lcd1602_Write_Data('r');
			Lcd1602_Write_Data('/');
			Lcd1602_Write_Data('m');
			Lcd1602_Write_Data('i');
			Lcd1602_Write_Data('n');
			if(heart>(Htup)
			||heart<(Htdw))				//当前超过上下限  
			{
				flag_beep = 1;			//开报警标志 执行报警程序在定时器中断	
			}
			else
			{
				flag_beep = 0;			//关报警标志位	
			}
	
		}
		KEY_Set();
		if(flag_timer==1)				//1s到
		{
			flag_timer = 0;				//清除标志位
			if(heart==0)		 		//未检测到心率信号  发送---\r\n 		
			{
				Uart_SendChar('T');		//发送到串口 通过蓝牙透传出去  字母T开头  可以自己定义
				Uart_SendChar('-');
				Uart_SendChar('-');
				Uart_SendChar('-');
				Uart_SendChar('\r');
				Uart_SendChar('\n');	
			}
			else						//检测到心跳     发送 xxx\r\\n
			{
				Uart_SendChar('T');		//发送到串口 通过蓝牙透传出去  字母T开头  可以自己定义
				Uart_SendChar(heart/100+0X30);
				Uart_SendChar(heart%100/10+0X30);
				Uart_SendChar(heart%100%10+0X30);
				Uart_SendChar('\r');
				Uart_SendChar('\n');
			}
		}

	}
}
//定时器2中断服务函数	 50ms
void tm2_isr() interrupt 5 using 1
{
	static unsigned int cnt=0;
	static unsigned int cnt1=0;						  
 	TF2 = 0;
	cnt++;
	cnt1++;
	if(cnt1%8==0)			//50ms*8 =400ms				
	{
		cnt1 = 0;
		if(flag_beep==1) 	//报警标志位打开
			beep = ~ beep; 	//蜂鸣器控制脚取反 400ms取反一次 产生滴滴滴 响声 而不是一直长鸣
		else 
			beep = 1;  		//高电平关闭报警
	}

	if(cnt%20==0)    		//50ms*20 =1000ms
	{
		cnt = 0;
		flag_timer = 1;	 	//1000ms到 赋值标志为1  1000ms赋一次 1000ms不是必须的  可以自己修改	
	}

	
}

软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756 

2、KEIL4 C51软件安装包

链接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA 
提取码:sy2a 

文件下载:

链接:https://pan.baidu.com/s/1OWXRtBQYMKJ_2-jqFjfL4A?pwd=fhwk 
提取码:fhwk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机技能设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值