【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图+源码+仿真工程+论文)
创始人
2024-02-02 03:25:48

【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图+源码+仿真工程+论文)

文章目录

  • 【毕业设计】14-基于单片机的健康检测仪/心跳/温度/血压设计(原理图+源码+仿真工程+论文)
    • 资料下载链接
    • 任务书
    • 设计说明书
      • 摘要
      • 设计框架架构
      • 设计说明书及设计文件
      • 源码展示

资料下载链接

资料下载链接
资料链接:https://www.cirmall.com/circuit/29877/
包含此题目毕业设计全套资料:
原理图工程文件
源码工程文件
仿真工程文件
论文低重复率,26851字

任务书

人们对自身健康的关注促进了健康状态检测仪的发展,本课题设计一款具备心跳、体温、血压检测的多功能健康状态检测仪。
1.完成整个系统结构的设计,绘制系统框图;
2.选择主控芯片,及合适的传感器来分别完成心跳检测、温度检测、血压检测及相关电路设计;
3.完成主、子程序流程图设计;
4.运用Protues软件对健康状态检测仪进行系统仿真测试。

设计说明书

摘要

本次系统主要有硬件和软件两个部分组成。硬件部分由STC89C51单片机最小系统单元,温度检测电路单元,压力检测单元,体温检测单元,报警单元,人机交互单元,电源单元,液晶显示器单元组成,在设计上硬件需要考虑到系统的稳定性以及可靠性。软件部分通过对系统软件总流程图绘制,并绘制各个子控制驱动再对驱动程序编写完成系统程序的设计。在硬件与软件的设计上选择按照功能性分区设计,使设计有条理运行可靠。系统设计没有制作实物而是通过仿真方式调试完成。使用仿真软件Proteus来搭建系统硬件电路,调试测试。最后完成了血压检测,脉搏检测,体温检测并,并可以调节阈值实现对系统的报警自定义设置防止误报。

设计框架架构

在这里插入图片描述

设计说明书及设计文件

在这里插入图片描述

在这里插入图片描述

论文低重复率,26851字
在这里插入图片描述

源码展示

在这里插入图片描述

#include 
#include 
#include "adc0832.h"
#define uint		unsigned int
#define uchar		unsigned char
#define ulong		unsigned long  /* 宏定义 */
#define LCD_DATA	P0/* 定义P0口为LCD_DATA */
sbit	LCD_RS	= P2 ^ 5;
sbit	LCD_RW	= P2 ^ 6;
sbit	LCD_E	= P2 ^ 7;    /* 定义LCD控制引脚 */
sbit	Xintiao = P1 ^ 0;     /* 心率检测输入端定义 */
sbit	speaker = P2 ^ 4;     /* 蜂鸣器引脚定义 */
sbit	DQ	= P3 ^ 7;
uchar blood = 0;
voiddelay5ms(void);                                                          /* 误差 0us */
voidLCD_WriteData(ucharLCD_1602_DATA);                                      /********LCD1602数据写入***********/
voidLCD_WriteCom(ucharLCD_1602_COM);                                        /********LCD1602命令写入***********/
void lcd_1602_word( uchar Adress_Com, uchar Num_Adat, uchar *Adress_Data );     /*1602字符显示函数,变量依次为字符显示首地址,显示字符长度,所显示的字符*/
voidInitLcd();                                                                 /* 液晶初始化函数 */
void Tim_Init();
uchar	Xintiao_Change=0;  /*  */
uint	Xintiao_Jishu;
uchar	stop;
uchar	View_Data[3];
uchar	View_L[3];
uchar	View_H[3];
uchar	Xintiao_H	= 100;          /*上限 */
uchar	Xintiao_L	= 40;         /*下限 */
uint	wendu		= 0;
uchar	Key_Change;
uchar	Key_Value;                                                              /*按键键值 */
uchar	View_Con;                                                               /* 设置的位(0正常工作,1设置上限,2设置下限) */
uchar	View_Change;
uchar bloodL = 139;
uchar bloodH = 160;
uint tempL = 360;
uint tempH = 373;
/*****延时子程序*****/
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 );
}
/*****读一个字节*****/
unsigned char ReadOneChar( void )
{unsigned char	i	= 0;unsigned char	dat	= 0;for ( i = 8; i > 0; i-- ){DQ	= 0;    /* 给脉冲信号 */dat	>>= 1;DQ	= 1;    /* 给脉冲信号 */if ( DQ )dat |= 0x80;Delay_DS18B20( 4 );}return(dat);
}
void WriteOneChar( unsigned char dat )
{unsigned char i = 0;for ( i = 8; i > 0; i-- ){DQ	= 0;DQ	= dat & 0x01;Delay_DS18B20( 5 );DQ	= 1;dat	>>= 1;}
}
/*****读取温度*****/
unsigned int ReadTemperature( void )
{unsigned char	a	= 0;unsigned char	b	= 0;unsigned int	t	= 0;float		tt	= 0;Init_DS18B20();WriteOneChar( 0xCC );           /* 跳过读序号列号的操作 */WriteOneChar( 0x44 );           /* 启动温度转换 */Init_DS18B20();WriteOneChar( 0xCC );           /* 跳过读序号列号的操作 */WriteOneChar( 0xBE );           /* 读取温度寄存器 */a	= ReadOneChar();        /* 读低8位 */b	= ReadOneChar();        /* 读高8位 */t	= b;t	<<= 8;t	= t | a;tt	= t * 0.0625;t	= tt * 10 + 0.5;        /* 放大10倍输出并四舍五入 */return(t);
}
void main()                                                     /* 主函数 */
{InitLcd();Tim_Init();lcd_1602_word( 0x80, 16, "Heart Rate:     " );          /* 初始化显示 */lcd_1602_word( 0xC0, 16, "Te:      BP:    " );          /* 显示第二行数据 */TR0	= 1;TR1	= 1;                                            /* 打开定时器 */while ( 1 )                                             /* 进入循环 */{	  if ( View_Con == 0 ){wendu = ReadTemperature();lcd_1602_word( 0xC0, 3, "Te:" );        /* 显示第二行数据 */if ( wendu != 0 && wendu !=850){LCD_WriteCom( 0x80 + 0x40 + 3 );LCD_WriteData( wendu / 100 + 0x30 );LCD_WriteData( wendu % 100 / 10 + 0x30 );LCD_WriteData( '.' );LCD_WriteData( wendu % 100 % 10 + 0x30 );LCD_WriteData( 0xdf );if(wendu>350 && wendu<450) {if (wendu >= tempH || wendu < tempL ) /* 不在范围内报警 */speaker=0;                                                                            /* 蜂鸣器响 */elsespeaker = 1;}}lcd_1602_word( 0xC0 + 8, 4, " BP:" ); /* 显示第二行数据 */LCD_WriteCom( 0x80 + 0x40 + 12 );LCD_WriteData( blood / 100 + 0x30 );LCD_WriteData( blood % 100 / 10 + 0x30 );LCD_WriteData( blood % 100 % 10 + 0x30 );lcd_1602_word( 0xC0 + 15, 1, " " ); /* 显示第二行数据 */if (blood >= bloodH || blood < bloodL )       /* 不在范围内报警 */speaker=0;                          /* 蜂鸣器响 */elsespeaker = 1;}if ( Key_Change )            /*有按键按下并已经得出键值 */{Key_Change	= 0;          /* 将按键使能变量清零,等待下次按键按下 */View_Change	= 1;switch ( Key_Value )      /* 判断键值 */{case 1:                  /* 设置键按下 */{View_Con++;          /* 设置的位加 */if ( View_Con == 3 )    /* 都设置好后将此变量清零 */View_Con = 0;break;         /* 跳出,下同 */}case 2:               /* 加键按下 */{if ( View_Con == 2 )      /* 判断是设置上限 */{if ( Xintiao_H < 150 )  /*上限数值小于150 */Xintiao_H++;     /*上限+ */}if ( View_Con == 1 )    /* 如果是设置下限 */{if ( Xintiao_L < Xintiao_H - 1 )  /*下限值小于上限-1(下限值不能超过上限) */Xintiao_L++;     /*下限值加 */}break;}case 3:          /* 减键按下 */{if ( View_Con == 2 )      /* 设置上限 */{if ( Xintiao_H > Xintiao_L + 1 ) /*上限数据大于下限+1(同样上限值不能小于下限) */Xintiao_H--;                    /*上限数据减 */}if ( View_Con == 1 )                      /* 设置下限 */{if ( Xintiao_L > 30 )                   /*下限数据大于30时 */Xintiao_L--;                    /*下限数据减 */}break;}}}if ( View_Change )               /* 开始显示变量 */{View_Change = 0;          /* 变量清零 */if ( stop == 0 )            /* 心率正常时 */{if ( View_Data[0] == 0x30 ) /* 最高位为0时不显示 */View_Data[0] = ' ';}else   { /* 心率不正常(计数超过5000,也就是两次信号时间超过5s)不显示数据 */View_Data[0]	= ' ';View_Data[1]	= ' ';View_Data[2]	= ' ';}switch ( View_Con ){case 0:                         /* 正常显示 */{lcd_1602_word( 0x80, 16, "Heart Rate:     " );  /* 显示一行数据 */lcd_1602_word( 0x8d, 3, View_Data );     /* 第1行显示心率 */break;}case 1:                     /* 设置下限时显示 */{lcd_1602_word( 0x80, 16, "Heart Rate:     " );  /* 第一行显示心率 */lcd_1602_word( 0x8d, 3, View_Data );View_L[0]	= Xintiao_L / 100 + 0x30;       /* 将下限数据拆字 */View_L[1]	= Xintiao_L % 100 / 10 + 0x30;View_L[2]	= Xintiao_L % 10 + 0x30;if ( View_L[0] == 0x30 )         /* 最高位为0时,不显示 */View_L[0] = ' ';lcd_1602_word( 0xC0, 16, "Warning L : " );/* 第二行显示下限数据 */lcd_1602_word( 0xCd, 3, View_L );break;}case 2:  /* 设置上限时显示(同上) */{lcd_1602_word( 0x80, 16, "Heart Rate:     " );lcd_1602_word( 0x8d, 3, View_Data );View_H[0]	= Xintiao_H / 100 + 0x30;View_H[1]	= Xintiao_H % 100 / 10 + 0x30;View_H[2]	= Xintiao_H % 10 + 0x30;if ( View_H[0] == 0x30 )View_H[0] = ' ';lcd_1602_word( 0xC0, 16, "Warning H :     " );lcd_1602_word( 0xCd, 3, View_H );break;}}}}
}

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...