摘要
本文设计了一种基于单片机的脉搏体温血压检测仪,该检测仪以单片机为控制核心,集成了血压测量和体温测量的功能。系统通过压力传感器和温度传感器分别采集血压和体温信号,经过处理模块和信号处理模块后,通过显示模块展示给用户。本文详细介绍了系统的硬件设计、软件编程以及仿真验证过程,验证了该电子血压计的可操作性和实用性。
关键词:单片机;脉搏体温血压检测仪;压力传感器;温度传感器;Proteus;Keil C51
一、引言
随着人们对健康管理的日益关注,脉搏、体温和血压等生理参数的实时监测成为了重要的健康监测手段。传统的血压计和体温计功能单一,操作繁琐,无法满足现代人对健康监测的需求。因此,设计一种集成血压和体温测量功能的电子血压计具有重要意义。本文基于单片机技术,设计了一种具有体温测量功能的电子血压计,实现了血压和体温的实时监测与显示。
二、系统总体设计
本系统以单片机为控制核心,通过压力传感器和温度传感器分别采集血压和体温信号。整个系统包括处理模块、测量模块、信号处理模块、显示模块以及电源处理模块。血压和体温的测量功能通过按键进行切换。处理模块负责接收传感器的信号并进行初步处理;测量模块根据处理后的信号计算血压和体温值;信号处理模块对测量结果进行滤波和校准;显示模块用于实时显示血压和体温的数值;电源处理模块为整个系统提供稳定的电源。
三、硬件设计
1. 单片机选型
考虑到系统的复杂性和实时性要求,选用性能稳定、功耗低的单片机作为控制核心。本设计中采用常用的AT89C51单片机。
2. 传感器选型
压力传感器选用高精度、高稳定性的压力传感器,用于采集血压信号;温度传感器选用响应速度快、精度高的温度传感器,用于采集体温信号。
3. 显示模块
显示模块采用液晶显示屏,用于实时显示血压和体温的数值。液晶显示屏具有高分辨率、低功耗等特点,适用于本系统的显示需求。
4. 电源处理模块
电源处理模块采用稳压电源电路,为整个系统提供稳定的电源。同时,加入电源滤波电路,减少电源噪声对系统的影响。
5. Proteus硬件设计
使用Proteus软件完成整体硬件设计原理图的绘制。在原理图中,将单片机、传感器、显示模块等各个部件进行连接,形成完整的硬件系统。
四、软件设计
基于Keil C51编写软件程序,实现系统的控制逻辑和数据处理功能。程序主要包括初始化模块、数据采集模块、数据处理模块、显示模块以及按键处理模块。初始化模块负责初始化单片机的各个寄存器和端口;数据采集模块通过单片机读取传感器的数据;数据处理模块对采集到的数据进行处理,计算出血压和体温值;显示模块将处理后的数据通过液晶显示屏显示出来;按键处理模块负责处理用户的按键输入,实现血压和体温测量功能的切换。
五、仿真验证
在Proteus硬件原理图中,通过仿真验证的方式确定该电子血压计的可操作性。首先,设置传感器的输入信号,模拟血压和体温的变化;然后,运行仿真程序,观察液晶显示屏上的显示结果;最后,通过按键切换测量功能,验证系统的测量精度和稳定性。仿真结果表明,该电子血压计能够准确测量血压和体温,并实时显示在液晶显示屏上,满足设计要求。
六、结论
本文设计了一种基于单片机的脉搏体温血压检测仪,通过硬件设计、软件编程和仿真验证等步骤,实现了血压和体温的实时监测与显示。该电子血压计具有结构简单、操作方便、测量准确等特点,适用于家庭、医院等场所的生理参数监测。未来可以进一步优化系统的性能,提高测量精度和稳定性,以满足更多场景下的应用需求。
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long //宏定义
#define LCD_DATA P0 //定义P0口为LCD_DATA
unsigned char getdata; //获取ADC转换回来的值
unsigned char dispbuf[4];
unsigned int OverCounter = 0;
unsigned char ptemp;
bit OverFlg = 0;
unsigned int temp,ppress = 0;
float press;
char KEY_TIMES = 0;
char KEY_Set_TIMES = 0;
sbit LCD_RS =P2^5;
sbit LCD_RW =P2^6;
sbit LCD_E =P2^7; //定义LCD控制引脚
#define R24C04ADD 0xA1
#define W24C04ADD 0xA0
//ADC0832的引脚
sbit ADCS =P2^2; //ADC0832 chip seclect
sbit ADDI =P2^4; //ADC0832 k in
sbit ADDO =P2^4; //ADC0832 k out
sbit ADCLK =P2^3; //ADC0832 clock signal
sbit KEY =P1^7;
sbit KEY_Set = P3^0;
sbit KEY_ADD = P3^1;
sbit KEY_DEC = P3^2;
sbit speaker =P2^0; //蜂鸣器引脚定义
sbit DQ=P3^7;
void delay5ms(void); //误差 0us
void LCD_WriteData(uchar LCD_1602_DATA); /********LCD1602数据写入***********/
void LCD_WriteCom(uchar LCD_1602_COM); /********LCD1602命令写入***********/
void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data); /*1602字符显示函数,变量依次为字符显示首地址,显示字符长度,所显示的字符*/
void InitLcd();//液晶初始化函数
unsigned int Adc0832(unsigned char channel);
void LCD1602_Write_char( unsigned char *prointer );
uchar Xintiao_H=110; //脉搏上限
uint wendu=0;
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //精确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(34);
部分代码
资料下载地址:
https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8