【Proteus仿真】【51单片机】人体心率监测系统设计


一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LCD1602显示模块、蜂鸣器、按键模块、NE555模块、HC05蓝牙模块等。

主要功能:
系统运行后,LCD1602显示当前时间、心率和阈值。可通过按键K3进入阈值设置界面,通过K1/K2键进行加减数据,设置好后可按K3键保存并返回主菜单。系统不断检测比较当前传感器值与阈值,若超限控制对应的设备工作。
最终可实现:
1、实时监测心率显示
2、阈值参数设置
3、超限声光报警
4、数据传输移动端


二、软件设计

/*
作者:嗨小易(QQ:3443792007)
*/



//开机界面显示
void open_show(void)
{
	lcd1602_show_string(0,0,"12:23:15");
	lcd1602_show_string(11,0,"H:120");
	lcd1602_show_string(0,1,"Rate:   ");
	lcd1602_show_string(11,1,"L: 60");
}

//参数设定
void key_set_threshold(void)
{
	u8 key=0;

	key=key_scan(0);
	//选择
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>=3)sys_ctrl.mode=0;	
	}
	//上限设置
	while(sys_ctrl.mode==1)
	{
		//加
		if(key==KEY1_PRESS)
		{
			if(sys_ctrl.rateh<250)
				sys_ctrl.rateh+=THRESHOLD_STEP;			
		}
		//减
		else if(key==KEY2_PRESS)
		{
			if(sys_ctrl.rateh>0)
				sys_ctrl.rateh-=THRESHOLD_STEP;		
		}
		lcd1602_show_nums(13,0,sys_ctrl.rateh,3,0);
		lcd1602_show_cursor(1,15,1);
		delay_ms(150);
		lcd1602_show_cursor(1,15,0);
		delay_ms(150);
		break;	
	}
	//下限设置
	while(sys_ctrl.mode==2)
	{
		//加
		if(key==KEY1_PRESS)
		{
			if(sys_ctrl.ratel<250)
				sys_ctrl.ratel+=THRESHOLD_STEP;			
		}
		//减
		else if(key==KEY2_PRESS)
		{
			if(sys_ctrl.ratel>0)
				sys_ctrl.ratel-=THRESHOLD_STEP;		
		}
		lcd1602_show_nums(13,1,sys_ctrl.ratel,3,0);
		lcd1602_show_cursor(2,15,1);
		delay_ms(150);
		lcd1602_show_cursor(2,15,0);
		delay_ms(150);
		break;	
	}
}


//数据采集
void sys_get_data(void)
{
	while(sys_ctrl.mode==0)
	{
		//读取时间
		ds1302_read_time();

		break;			
	}			
}

//采集数据显示
void sys_data_show(void)
{
	u8 buf[9];
	static u8 i=0;

	while(sys_ctrl.mode==0)
	{
		//采集完成
		if(sys_ctrl.sta==1)
		{
			lcd1602_show_nums(5,1,sys_ctrl.rate,3,0);
			sys_ctrl.sta=0;
			sys_ctrl.cnt=0;
			EX0=1;//打开计数	
		}
		//时间显示
		buf[0]=gDS1302_TIME[2]/16+0x30;
		buf[1]=gDS1302_TIME[2]%16+0x30;
		buf[2]=':';
		buf[3]=gDS1302_TIME[1]/16+0x30;
		buf[4]=gDS1302_TIME[1]%16+0x30;
		buf[5]=':';
		buf[6]=gDS1302_TIME[0]/16+0x30;
		buf[7]=gDS1302_TIME[0]%16+0x30;
		buf[8]='\0';
		lcd1602_show_string(0,0,buf);

		//阈值显示
		lcd1602_show_nums(13,0,sys_ctrl.rateh,3,0);
		lcd1602_show_nums(13,1,sys_ctrl.ratel,3,0);

		//串口数据传输
		i++;
		if(i%50==0)
		{
			buf[0]=sys_ctrl.rate/100+0x30;
			if(buf[0]==0x30)buf[0]=' ';
			buf[1]=sys_ctrl.rate%100/10+0x30;
			buf[2]=sys_ctrl.rate%100%10+0x30;
			buf[3]='\0';
			UART_SendString("\r\n检测心率:");
			UART_SendString(buf);
			UART_SendString("\r\n");
		}

		break;				
	}
}

//报警监测
void alarm_check(void)
{
	while(sys_ctrl.mode==0)
	{
		//如果检测心率高于上限,声光报警,上传上位机
		if(sys_ctrl.rate>sys_ctrl.rateh)
		{
			LEDH=0;
			beep_alarm(100,20);
		   	UART_SendString("\r\n心率异常!!!\r\n");
		}
		//如果检测心率低于下限,声光报警,上传上位机
		else if(sys_ctrl.rate<sys_ctrl.ratel)
		{
			LEDL=0;
			beep_alarm(100,20);
			UART_SendString("\r\n心率异常!!!\r\n");
		}
		//如果检测心率正常,关闭声光报警
		else
		{
			LEDH=1;LEDL=1;
		}
			
		break;				
	}	
}

//智能养殖装置的设计控制系统
void appdemo_show(void)
{
	sys_para_init();//系统参数初始化
	lcd1602_init();
	UART_Init();
	time0_init();	
	exti0_init();
	delay_ms(1000);
//	ds1302_init();
	open_show();//初始界面

	while(1)
	{
		key_set_threshold();//参数设定
		sys_get_data();//数据采集
		sys_data_show();//采集数据显示
		alarm_check();//报警监测		
	}
}




三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值