目录
一、项目成品展示
项目成品图片展示:
哔哩哔哩视频链接:
基于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;
}
}
}
五、上电演示
六、资料内容
项目分享
项目分享在哔哩哔哩主页