基于stm32单片机电子血压心率脉搏体温计模拟测量仪

一:功能介绍

1、采用stm32单片机+LCD1602显示屏+蜂鸣器+DS18B20温度传感器+按键+电位器,制作一个基于stm32单片机电子血压心率脉搏体温计模拟测量仪Proteus仿真;

2、通过ds18b20传感器测量当前的体温,显示到LCD1602屏幕上面;

3、通过按键模拟调节当前的心率脉搏,显示到LCD1602屏幕上面;

4、通过电位器调节当前的血压值,经过stm32单片机ADC采集得到当前的血压值,显示到LCD1602显示屏上面;

5、当温度、心率或者血压超过程序设置阈值,蜂鸣器进行报警提醒,(阈值可以在程序中进行更改)

 

 

基于STM32单片机的电子血压心率脉搏体温计模拟测量仪毕业论文

摘要

本文设计并实现了一个基于STM32单片机的电子血压心率脉搏体温计模拟测量仪。该系统集成了DS18B20温度传感器、LCD1602显示屏、蜂鸣器、按键以及电位器等组件,通过Proteus仿真平台进行验证。系统能够实时测量并显示体温、模拟心率脉搏以及通过电位器调节的血压值,并在参数超过预设阈值时通过蜂鸣器发出报警。本文详细阐述了系统的硬件设计、软件实现以及功能验证过程。

一、功能介绍

1. 系统架构与硬件组成

本系统采用STM32单片机作为核心控制器,结合LCD1602显示屏、DS18B20温度传感器、蜂鸣器、按键以及电位器等组件,构建了一个完整的电子血压心率脉搏体温计模拟测量仪。系统硬件架构清晰,各组件之间通过合理的接口设计实现数据通信与控制。

2. 体温测量与显示

系统通过DS18B20温度传感器实时测量当前的体温数据,并将测量结果通过STM32单片机处理后显示在LCD1602显示屏上。DS18B20传感器具有高精度、低功耗等特点,能够确保体温测量的准确性。

3. 心率脉搏模拟与显示

系统通过按键模拟调节当前的心率脉搏值。用户可以通过按键输入不同的心率脉搏值,系统将这些值显示在LCD1602显示屏上,供用户查看。这一功能主要用于模拟心率脉搏的测量过程,便于系统测试和验证。

4. 血压值调节与显示

系统通过电位器调节当前的血压值。电位器的旋转角度被STM32单片机的ADC模块采集,转换为相应的电压值,再经过程序处理得到血压值。血压值同样被显示在LCD1602显示屏上,供用户实时查看。

5. 报警功能

系统设置了温度、心率和血压的阈值。当这些参数中的任何一个超过预设阈值时,蜂鸣器将发出报警声,提醒用户注意。阈值可以在程序中进行更改,以满足不同用户的需求。

6. Proteus仿真验证

在系统设计阶段,利用Proteus仿真平台对系统进行了全面的仿真测试。通过模拟各组件的工作状态和数据传输过程,验证了系统硬件电路的正确性以及软件逻辑的有效性。仿真结果表明,系统能够准确地测量和显示体温、心率脉搏以及血压值,并在参数异常时发出报警。

二、系统设计与实现

1. 硬件设计

  • STM32单片机选型与配置:选择合适的STM32型号,配置时钟系统、I/O口、ADC模块等资源。
  • DS18B20传感器接口设计:设计单总线通信接口电路,实现与DS18B20传感器的数据通信。
  • LCD1602显示屏接口设计:设计并行或串行接口电路,实现与LCD1602显示屏的数据传输。
  • 蜂鸣器驱动电路设计:设计蜂鸣器控制电路,实现报警声的发出。
  • 按键模块设计:设计按键扫描电路,实现按键输入的检测与去抖处理。
  • 电位器与ADC接口设计:选择合适的电位器,设计ADC采样电路,实现血压值的调节与采集。

2. 软件设计

  • 主程序设计:编写主程序框架,实现系统的初始化、数据采集、数据处理、显示更新以及报警控制等功能。
  • DS18B20传感器数据采集与处理:编写DS18B20传感器数据读取与处理函数,实现体温数据的准确获取与转换。
  • LCD1602显示屏驱动函数:编写LCD1602显示屏驱动函数,实现体温、心率脉搏以及血压值的显示更新。
  • 按键处理程序设计:编写按键扫描与处理函数,实现心率脉搏值的模拟调节。
  • ADC数据采集与处理:编写ADC数据采集与处理函数,实现血压值的采集与转换。
  • 报警控制程序设计:编写报警控制逻辑函数,根据当前参数与预设阈值的比较结果,控制蜂鸣器的开关状态。

三、系统性能评估与优化

  • 测量准确性测试:对系统进行多次测量实验,验证体温、心率脉搏以及血压值的测量准确性。
  • 响应速度测试:测试系统从参数变化到显示更新以及报警响应的时间间隔,评估系统的实时性能。
  • 功耗评估与优化:分析系统在运行过程中的功耗情况,提出节能降耗的优化方案。
  • 用户友好性评估:评估系统的操作界面、按键布局以及报警提示方式等是否便于用户使用和理解。

结论

本文设计并实现了一个基于STM32单片机的电子血压心率脉搏体温计模拟测量仪。该系统能够实时测量并显示体温、模拟心率脉搏以及通过电位器调节的血压值,并在参数异常时发出报警提醒。通过Proteus仿真平台的验证,系统具有较高的稳定性和测量准确性。未来工作将进一步优化系统性能,提高测量精度和实时性,并探索更多智能化功能的应用。

#include "OLED_IIC.h"
/********************************************
// fill_Picture
********************************************/
void fill_picture(uint8_t fill_Data)
{
	uint8_t m,n;
	for(m=0;m<8;m++)
	{
		IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xb0+m);		//rowe0-rowe1
		IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x00);		//low column start address
		IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x10);		//high column start address
		for(n=0;n<128;n++)
		{
			IIC_Write_Byte(OLED_Device_address,OLED_Device_Data,fill_Data);
		}
	}
}

void OLED_Printf_EN(uint8_t row,uint8_t column,const char *Str,...)//页、列、汉字
{
	uint8_t r,n,ChaNum=0;
	
	char string[100];
	va_list ap;
  va_start(ap,Str);
	vsprintf(string,Str,ap);
	va_end(ap); 
	char *ptr=string;	
	while(*ptr!='\0')
	{		
		for(r=row;r<row+2;r++)//控制页一页有8行
		{
			IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xb0+r);//行
			IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,column&0x0f);//列的低四位	
			IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x10+(column>>4));//列的高四位
			if(r==row)
			{
				for(n=0;n<8;n++)
					IIC_Write_Byte(OLED_Device_address,OLED_Device_Data,ASCII8x16_Table[*ptr-' '][n]);		
			}
			if(r==row+1)
			{
				for(n=8;n<16;n++)
					IIC_Write_Byte(OLED_Device_address,OLED_Device_Data,ASCII8x16_Table[*ptr-' '][n]);	
			}
		}
		ChaNum++;
		column+=8;	
		if(ChaNum%16==0)
			row+=2;
		if(ChaNum==64)
			break;
		ptr++;
	}
}
/******************************************
// picture用来显示一个图片
******************************************/
void OLED_Picture(uint8_t *image)
{
  uint8_t x,y;
  for(y=0;y<8;y++)
    {
      IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xb0+y);
      IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x0);
      IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x10);
      for(x=0;x<128;x++)
        {
          IIC_Write_Byte(OLED_Device_address,OLED_Device_Data,*image++);
        }
    }
}

void OLED_Init(void)
{
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xAE);   //display off
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x20);	//Set Memory Addressing Mode	
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x00);	//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,rowe Addressing Mode (RESET);11,Invalid
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xb0);	//Set rowe Start Address for rowe Addressing Mode,0-7
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xc8);	//Set COM Output Scan Direction
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x00);//---set low column address
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x10);//---set high column address
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x40);//--set start line address
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x81);//--set contrast control register
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xdf);
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xa1);//--set segment re-map 0 to 127
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xa6);//--set normal display
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xa8);//--set multiplex ratio(1 to 64)
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x3F);//
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xd3);//-set display offset
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x00);//-not offset
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xd5);//--set display clock divide ratio/oscillator frequency
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xf0);//--set divide ratio
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xd9);//--set pre-charge period
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x22); //
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xda);//--set com pins hardware configuration
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x12);
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xdb);//--set vcomh
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x20);//0x20,0.77xVcc
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x8d);//--set DC-DC enable
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0x14);//
	IIC_Write_Byte(OLED_Device_address,OLED_Device_Command,0xaf);//--turn on oled panel 
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

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

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

打赏作者

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

抵扣说明:

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

余额充值