单片机项目分享:基于STM32智能手环老年人健康检测心率血氧检测系统

目录

一、项目成品展示

二、项目介绍

1、功能介绍

2、硬件组成

三、原理图、PCB设计

四、程序设计

五、上电演示

六、资料内容

项目分享


一、项目成品展示

项目成品图片展示:

哔哩哔哩视频链接:

基于STM32智能手环老年人健康检测心率血氧检测系统

基于STM32智能手环老年人健康检测心率血氧检测系统

(项目分享在哔哩哔哩主页)

二、项目介绍

1、功能介绍

2、硬件组成

三、原理图、PCB设计

原理图 PCB展示:

四、程序设计

int main(void)
{
	char i;
	uint16_t j=0;
	DelayInit();
	LED_GPIO_Config();
	I2C_Configuration(); //IIC初始化
	OLED_Init(); //OLED初始化
	OLED_CLS();//清屏
	KEY_Init(); //按键初始化
	DelayMs(200);
	CHECK_NEW_MCU();
	DS18B20_Init();
	DS1302_Init(&SysDate);
	DelayMs(100); 
	DS1302_DateRead(&SysDate);//读时间
	for(i=0;i<8;i++)OLED_ShowCN(i*16,2,i+8,0);//测试显示中文:欢迎使用使能手环
	DelayMs(1000);DelayMs(1000);
	OLED_CLS();//清屏
	for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,0);//测试显示中文:心率
	for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,0);//测试显示中文:血氧
	for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,0);//测试显示中文:步数
	IIC_init();//IIC初始化
	adxl345_init();//ADXL345初始化
	Init_MAX30102();//MAX30102初始化
	BEEP_Init();
	Serial_Init();
	Timer_Init();
	while(1)
	{      
			KeySettings();
		  if(setn == 0)//不在设置状态下,读取相关数据
			{   
					DisplayTemperature();
					GetSteps();
					GetHeartRateSpO2();
					if((hrAvg>xinlv ) ||(spo2Avg>xuey) ||(temperature>temperature_H*10))
					{	
						BEEP=~BEEP;			
					}
					else
					{			
						BEEP = BEEP_OFF;
					}
			}
			else if(setn ==8)
			{
				for(i=0;i<2;i++)OLED_ShowCN(i*16+32,0,i+22,0);
				for(i=0;i<2;i++)OLED_ShowCN(i*16+48+16,0,i+16,0);
				for(i=0;i<3;i++)OLED_ShowCN(i*16,4,i+24,0);

				OLED_ShowChar(48,4,xinlv/100+'0',2,1);
				OLED_ShowChar(56,4,xinlv%100/10+'0',2,1);
				OLED_ShowChar(64,4,xinlv%10+'0',2,1);

			}
			else if(setn ==9)
			{
				for(i=0;i<2;i++)OLED_ShowCN(i*16+32,0,i+22,0);
				for(i=0;i<2;i++)OLED_ShowCN(i*16+48+16,0,i+18,0);
				for(i=0;i<3;i++)OLED_ShowCN(i*16,4,i+24,0);
				OLED_ShowChar(48,4,xuey/100+'0',2,1);
				OLED_ShowChar(56,4,xuey%100/10+'0',2,1);
				OLED_ShowChar(64,4,xuey%10+'0',2,1);
			}
			else if(setn ==10)
			{
				for(i=0;i<2;i++)OLED_ShowCN(i*16+32,0,i+22,0);
				for(i=0;i<2;i++)OLED_ShowCN(i*16+48+16,0,i+30,0);
				for(i=0;i<3;i++)OLED_ShowCN(i*16,4,i+24,0);

				OLED_ShowChar(48,4,temperature_H/100+'0',2,1);
				OLED_ShowChar(56,4,temperature_H%100/10+'0',2,1);
				OLED_ShowChar(64,4,temperature_H%10+'0',2,1);
			}
			if(setn <8)
			{
				for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,0);//测试显示中文:心率
				for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,0);//测试显示中文:血氧
				for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,0);//测试显示中文:步数
				DisplayTime();// //显示时间函数
			}
			if (Tim_flag==1 &&Serial_RxFlag==0)												//上传数据蓝牙
			{	
				Tim_flag = 0;

				//memset(SendString,0,sizeof(SendString));
				SendString[0]=temperature/100+'0';
				SendString[1]=temperature%100/10+'0';
				SendString[2]='.';
				SendString[3]=temperature%10+'0';
				
				SendString[4]=hrAvg/100+'0';
				SendString[5]=hrAvg%100/10+'0';
				SendString[6]=hrAvg%10+'0';
				
				SendString[7]=spo2Avg/100+'0';
				SendString[8]=spo2Avg%100/10+'0';
				SendString[9]=spo2Avg%10+'0';
				
				SendString[10]=bushu/100+'0';
				SendString[11]=bushu%100/10+'0';
				SendString[12]=bushu%10+'0';
				
				SendString[13]=temperature_H/100+'0';
				SendString[14]=temperature_H%100/10+'0';
				SendString[15]=temperature_H%10+'0';
				
				SendString[16]=xinlv/100+'0';
				SendString[17]=xinlv%100/10+'0';
				SendString[18]=xinlv%10+'0';
				
				SendString[19]=xuey/100+'0';
				SendString[20]=xuey%100/10+'0';
				SendString[21]=xuey%10+'0';
				SendString[22]='\0';
				Serial_SendString(SendString);
			}
			if(Serial_RxFlag) //下传蓝牙数据
			{
				
				AT=Serial_GetRxData();
				switch (AT)
        {
        	case 1:
						temperature_H++;
        		break;
        	case 2:
						if(temperature_H>0)
							temperature_H--;
        		break;
					case 3:
						xinlv++;
        		break;
        	case 4:
						if(xinlv>0)
							xinlv--;
        		break;
					case 5:
						xuey++;
        		break;
        	case 6:
						if(xuey>0)
							xuey--;
        		break;
					case 7:
						bushu=0;
        		break;
        	default:
        		break;
        }
				AT=0;
				salve_date[0]=xinlv;
				salve_date[1]=xuey;
				salve_date[2]=temperature_H;
				STMFLASH_Write(FLASH_SAVE_ADDR + 0x40,salve_date,3); //存储阈值
				STMFLASH_Write(FLASH_SAVE_ADDR + 0x20,&bushu,1);
				Serial_RxFlag=0;
			}
			j++;
			if(j>3)
			{
				j=0;
				LED=~LED;
			}
	}
}

五、上电演示

六、资料内容

项目分享

项目分享在哔哩哔哩主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值