基于51单片机的电子血压温度计proteus仿真设计 (仿真+程序+演示视频)
仿真图proteus 8.9
程序编译器:keil 5
编程语言:C语言
设计编号:S0026
演示视频:
主要功能:
以单片机为控制核心,设计一种电子血压计,同时具有测量体温的功能。该系统利用压力传感器采集压力信号,通过温度传感器采集温度信号,整个系统包括处理模块、测量模块、信号处理模块、显示模块以及电源处理模块;血压和体温通过按键进行切换。
(1) 可以实现温度测量,压力测量;
(2) 通过按键设置压力报警器设定值,测量压力值大于设定值时,蜂鸣器报警;低于则蜂鸣器不报警。
(3) LCD液晶显示测量的温度和压力值,可以通过按键切换显示;
主要硬件设备:51单片机、ADC0832数模转换芯片、MPX4115压力传感器、按键、LCD1602液晶屏幕、蜂鸣器。
仿真演示:
测量体温
测量血压
温度血压调节,通过箭头所指的地方调整温度大小,压力大小,单片机实时采集数据进行处理,通过LCD1602显示。
设置血压报警值
通过按键设置压力报警器设定值,测量压力值大于设定值时,蜂鸣器报警;低于则蜂鸣器不报警。
程序:
void main() //主函数
{
InitLcd();
while(1) //进入循环
{
KEY_SCAN();
getdata=Adc0832(0);
temp=getdata/2-5;
if( temp > Xintiao_H )
{
speaker = 0;
}
else
{
speaker = 1;
}
temp = 0;
if( KEY_Set_TIMES == 0 )
{
if( KEY_TIMES == 1 )
{
getdata=Adc0832(0);
if(14<getdata<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换
{
// int vary=getdata; //y=(115-15)/(243-13)*X+15kpa
temp=getdata*10/2-50; //测试时补偿值为9.3
// temp=(int)(press*10); //放大10倍,便于后面的计算
if(temp != ppress)
{
ppress = temp;
OverFlg = 1;
}
dispbuf[3]=temp/1000; //取压力值百位
dispbuf[2]=(temp%1000)/100; //取压力值十位
dispbuf[1]=((temp%1000)%100)/10; //取压力值个位
dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位
LCD_WriteCom( 0x80 );
LCD1602_Write_char( " heart rate " );
LCD_WriteCom( 0x80 + 0x40 );
LCD1602_Write_char("Rate:");
LCD_WriteData( 0x30 + dispbuf[3] );
LCD_WriteData( 0x30 + dispbuf[2] );
LCD_WriteData( 0x30 + dispbuf[1] );
LCD_WriteData( '.' );
LCD_WriteData( 0x30 + dispbuf[0] );
}
}
if( KEY_TIMES == 0 )
{
lcd_1602_word(0x80,16," temperature "); //初始化显示
wendu=ReadTemperature();
lcd_1602_word(0xc0,10," Temp: ");//显示第二行数据
LCD_WriteCom(0x80+0x40+10);
LCD_WriteData(wendu/100+0x30);
LCD_WriteData(wendu%100/10+0x30);
LCD_WriteData('.');
LCD_WriteData(wendu%100%10+0x30);
LCD_WriteData(0xdf);
LCD_WriteData('C');
}
}
else
{
KEY_Set_Rate();
dispbuf[3]=Xintiao_H/100; //取设置压力值百位
dispbuf[2]=Xintiao_H%100/10; //取设置压力值十位
dispbuf[1]=Xintiao_H%10; //取设置压力值个位
LCD_WriteCom( 0x80 );
LCD1602_Write_char( " Set heart rate " );
LCD_WriteCom( 0x80 + 0x40 );
LCD1602_Write_char("warning:");
LCD_WriteData( 0x30 + dispbuf[3] );
LCD_WriteData( 0x30 + dispbuf[2] );
LCD_WriteData( 0x30 + dispbuf[1] );
}
}
}
下载方式见文章开头视频