功能介绍:采用stm32单片机作为主控cpu,采用MAX30102采集心率脉搏,采用MSP20传感器采集血压值,采用DS18B20传感器采集温度,采用LCD1602液晶显示屏显示相关数据,当温度大于38度(阈值程序可改)或者血压>140或者血压<50或者心率>130或者心率<40,蜂鸣器进行报警提醒,所有的阈值都可以通过程序进行修改,文末有资料分享:
49-基于stm32单片机心率脉搏血压体温检测报警(程序+原理图+仿真+元件清单全套资料)
程序打开办法:特别注意:下载资料包以后一定要先解压!!!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。
uint8_t Ds18b20_Init(void)
{
uint8_t ack=1;
Ds18b20_GPIO_OUT();
DQ_0();
Delay_us(500);
DQ_1();
Delay_us(60);
Ds18b20_GPIO_IN();
ack=DQ_Read();
Delay_us(180);
DQ_1();
return ack;
}
void Ds18b20_Write_Byte(uint8_t byte)
{
uint8_t i;
Ds18b20_GPIO_OUT();
for(i=0 ; i<8 ; i++)
{
if (byte&0x01)
{
DQ_0();// Write 1
Delay_us(2);
DQ_1();
Delay_us(60);
}
else
{
DQ_0();// Write 0
Delay_us(60);
DQ_1();
Delay_us(2);
}
byte=byte>>1;
}
}
uint8_t DS18B20_Read_Write()
{
uint8_t i;
uint8_t byte; //byte为要接收到的数据
for(i=0 ; i<8 ; i++)
{
Ds18b20_GPIO_OUT();//SET PG11 OUTPUT
DQ_0();
Delay_us(2);
DQ_1();
Ds18b20_GPIO_IN();//SET PG11 INPUT
Delay_us(12);
byte >>= 1;
if(DQ_Read())
byte |= 0x80;
Delay_us(50);
}
return byte;
}
/************************ 读取温度 ************************/
int16_t DS18B20_Read_Temperature(void) //启动温度转换,读取温度
{
u8 tl=0,th=0;
if(Ds18b20_Init())
return 0x7fff;
Ds18b20_Write_Byte(0xCC);
Ds18b20_Write_Byte(0x44);//启动DS18B20进行温度转换
if(Ds18b20_Init())
return 0x7fff;
Ds18b20_Write_Byte(0xCC);//忽略64位ROM地址,直接向DS18B20发温度转换命令,适用于一个从机工作
Ds18b20_Write_Byte(0xBE);//读DS18B20内部RAM中9字节的温度数据
tl=DS18B20_Read_Write();//读低8位
th=DS18B20_Read_Write();//读高8位
return (th<<8)+tl;
}
/************************ 处理温度 ************************/
void deal_Temp(void)
{
int Temp=0;
Temp=DS18B20_Read_Temperature()*0.625;
// printf("指令温度%0.2f",Temp);
// Temp=Temp*10;
//OLED_Printf_EN(0,0,"Temp:%0.2f`C",Temp);
LCD_Write_Command(0x80);//第一行的首地址
LCD_Write_Date('T');
LCD_Write_Date('E');
LCD_Write_Date('M');
LCD_Write_Date('P');
LCD_Write_Date('=');
LCD_Write_Date(Temp%1000/100+0x30);
LCD_Write_Date(Temp %100/10+0x30);
LCD_Write_Date('.');
LCD_Write_Date(Temp %10+0x30);
LCD_Write_Date(' ');
LCD_Write_Date('C');
if(Temp>380)
{
beep=0;Delay_ms(50);beep=1;Delay_ms(50);
beep=0;Delay_ms(50);beep=1;Delay_ms(50);
beep=0;Delay_ms(50);beep=1;Delay_ms(50);
beep=0;Delay_ms(50);beep=1;Delay_ms(50);
beep=0;Delay_ms(50);beep=1;Delay_ms(50);
}
}
下面是原理图展示: