单片机设计基于51单片机的心率体温检测系统设计

概要

  随着日新月异科技发展,在心率体温测量方面,我们取得了迅速的发展,就近日而言,脉搏测量仪已经在多个领域大展身手,除了在医学领域有所建树,在人们的日常生活方面的应用也不断拓展,如检疫中心的额温枪都用到了技术先进的脉搏测量仪。在今年的疫情爆发的同时,我们可以积极应对,利用所学的知识,方便高效地检测出人体有无异常体温,在上学签到时,我们可以利用此来检测温度,预防集体性感染事件。为了在心率测量仪的精准性和便携性方面做出重大改变,我计划设计一种以51单片机为核心的心率体温测量仪。我们的心率体温检测系统以STC89C51单片机为核心,借用单片机系统的内部计时器计算时间。其大致的步骤为通过ST188光电传感器感应生成脉冲,心跳次数由单片机累计所得,其对应的时间根据定时器获取。本设计使用的时候可以展现脉搏心率次数以及时间长短,当其终止使用的时候可以展示总的脉搏心率次数以及时间长短。经过我的个人测试,系统成功运行,符合设计要求。通过软件与硬件方面的整体调试并进行实验,得出结论为在技术上可行,预期可以实现功能,准确、快速地完成测量任务。

  关键词:心率体温检测系统;STC89C51单片机;光电传感器

一、控制系统方案设计

1.1 主控系统方案设计

  方案一:单片机作为主要的控制芯片,是集成电路的一种,可以单独完成现代产业所需要的控制功能。单片机外形很小,但是所具备的功能却是很大的,它将微处理器、储存器、输入/输出接口电路通过导线焊接到板子上,集成到同一片芯片。图1.1是采用单片机作为本设计的控制部分,该系统主要有单片机、传感器和显示器构成。
人体检测心率脉搏时,通过传感器采集输出脉冲信号,传递给单片机,单片机经过计算输出给显示电路进行显示。而在液晶显示屏上的,也就是我们得到的结果。通过得到的结果,来判断我们是否处于非正常状态。
在这里插入图片描述

图1.1 基于单片机的心率脉搏检测系统结构图
  方案二:以TI公司生产的DSP芯片作为核心。SP即数字信号处理器,是一种研究用数字对信号进行分析、转换、滤波、检测、调制、解调和高速算法的元件[3]。该系统主要由光电脉搏传感器、脉搏信号调理电路和DSP实时检测及处理系统三部分组成[4]。如图1.2所示,当传感器采集到人体生理脉搏信号时,信号就会经调理电路传送到DSP系统中,实现心率脉搏的检测。
在这里插入图片描述

图1.2 基于DSP的心率脉搏检测系统结构图
  总之,DSP的运行速度很高,但与之相对应的,是它负责的控制算法。相比而言单片机系统的控制方法相对简单,可靠性高,价格低,功耗低。虽然单片机与DSP相比功能相对简单,但完全可以满足设计要求。因此,综合个人实际以及现在市面上的元器件花费情况,我们选用单片机作为这次系统研究的主控芯片。

1.2 脉搏传感器方案设计

  传感器也被称为换能器、转换器等。相当于我们身体中的五官,用来感受外界传递给我们的信息。
  脉搏传感器是脉搏检测系统的重要部分。在本次系统设计之前,我花费了大量的精力,通过广泛的社会调查,结合在大学期间所学习的知识,融汇贯通,研究出了几套方案,具体如下面三种:
方案一:光电式传感器。众所周知,人体血液是一种不透明的液体。光对一般组织的穿透力相对于血液来说,是它的几十倍。根据这项功能,我将目光放到了光电式传感器上,使用光电效应手指脉冲传感器,用它来记录我们的脉冲信号。在它的内部结构中,我们用光电二极管的来锁定装置,其光电效应特性决定了光照强度与电流成正比,光照强度越大,相对应的锁定电流也就越大。当然有固定的光强范围。
  在元器件所决定的光强范围中,光电二极管的阻断电流与光强成正比的线性关系[5]。当脉搏跳动时,人体中的血管体积和光透过血液的散发随着脉搏的跳动而变化,随之而对应的,不同强度的光传递到光电管的两极,将会得到不同强度的光流。再由模拟量转换成数字量,可以得到相对应的数字型号,再将得到的信号分别传输到通常用于测脉冲的光电传感器的红外对管和红外放射管。
下面对红外对管和红外放射管分别做简短的功能介绍,两者相互作用,得到所需的数据资料。
我们首先用手指尖按住红外对管,因为手指尖易于测量。手指的血液浓度和光头率会伴随着心脏的跳动而产生相对应的变化(一定范围内),相对应的,红外对管对应的信号也会不停改变。我们可以使用一些常规的处理方法,如放大、滤波、比较等,将采集到的模拟信号转换成我们所需要的理想的数字信号 。
  采用反射式的红外管。这是目前市面上最主流的传感器,我们通常都采用这种传感器来采集信号,因为红外线管是在手指的同一侧接收和传输的,所以就可以忽视个体的差异,通常可以适用于大部分用户。这种传感器通过接收血液散射反射的光,通过这次的采集方式,我们能够准确测量血管内部容积的变化。
  方案二:压电式传感器。目前来说,一次性心电电极是使用最多的,这种传感器通常采用接扣与敏感区分离的方法,通过这种方式我们能明显的感受到干扰量的减少,因为人体运动会产生大量干扰,这对传感器的准确性会产生极大地偏导。在考虑到人的体液会对我们的测量造成极大的干扰,所以我选择了相对贴合我们实际的电机,我们所采集到的心电信号质量起着很大程度上取决于电极的好坏,我们采用的电极必须要有强大的粘合力,能紧帖在我们所需要的测量的部位[6]。为了在实际应用中统一和比较接收到的脉冲信号,在记录脉冲信号时,我们对电极的位置、各部分元器件的连接有着极其严格的要求。
  目前,市场上已开发出一种新型高分子压电材料聚偏氟乙烯研制的压电传感器,作为压电传感器,它有着十分优良的特点:他的灵敏度较高,可以精确检测出数据;在灵敏度较高的情况下,他还能有着十分可观的频率范围;他的结构简单,易于上手并且使用相比较其他方式来说十分方便。
  当手指前端处于接触状态时,模拟信号从传感器中提取出来,转换为电信号。这样传感器通过捕捉手指脉冲的波长,可以得到人体的脉搏信号。
  方案三:集成传感器。当前,集成心电传感器在市场是数不胜数,相比于其他传感器,  它具有最高的灵敏度,并且它的集成度高,个头小巧,方便携带,它还可以比较直观地看到心率的变化,其中且已包含了滤波等抗干扰电路,波形经过放大处理后,可以直接应用在单片机之中。它的缺点也十分明显,就是它的价格非常昂贵,价格是其他传感器的数十倍,就本次设计来说,考虑到经费以及锻炼自己的目的,不会轻易选择使用该型传感器。
  综上所述,光电式传感器的实用性,便捷性抗干扰性都要优于压电式传感器,并且在价格上碾压集成传感器,经多方考虑,本次设计选用了光电式传感器来进行设计研究。

1.3 系统工作原理

  本设计控制器采用 STC89C51单片机,用于实现人体的心率体温测量系统检测。我们可以利用光电脉冲传感器收集人体脉冲和心率的数据。接收到的信号发送至STC89C51进行处理,得到的数据将会在液晶显示屏上显示,液晶显示屏上显示得到得的脉搏数和温度。若有异常,显示屏将会显示出具体的脉搏温度,得以提醒人们脉搏或提问异常。心率监测系统设计框图如图1.3所示:
在这里插入图片描述

图1.3 心率监测系统设计框图
  日常的测试操作中,我们可以将手指位于传感器的位置。当心脏跳动收缩时,血管内液体的浓度和流量也会发生变化。当光照射手指组织时,血管中血氧饱和度的变化会导致接收管中接收到的光强度发生变化,这里就呈现出线性正比的联系,从而使光脉冲和心跳相等。当接收管波长变化时,红外接收管也随之变化,电流也随之波动。此时,红外接收器可以检测转换为脉冲信号的电压变化。信号在单片机端口经过滤波、放大、成形后发射。单片机在接收到外部中断信号后执行相应的命令[7]。CPU对输入的脉冲信号进行处理,将得到的数值进行输出,输出的心率数值将会在液晶上面显示。

二、 硬件设计

2.1 主电路设计

  此次设计选用单片机当作主控芯片,为了保证系统更好的运行,STC89C51单片机掌握起来更方便,成本低廉,超强的抗干扰性,在系统中可以进行编程,不需要编程器。故本设计采用STC89C51单片机[8]。
  基于此有以下两种方案可供选择:
  方案一:STC89S51单片机作为心率监测系统的CPU是因为其低廉的价格和编程的方便性。虽然STC89S51单片机的功能是有限的,但是对于心率监测系统的功能实现是没有问题的。
  方案二:飞思卡尔公司的嵌入式芯片9S12XS128,这款单片机的最实用的优点就是可以专门计数,这对于我们本系统来说是十分有利的。
  最终,在考虑实际应用后,我选择了STC89S51单片机放弃了嵌入式芯片9S12XS128,嵌入式芯片9S12XS128对比其他的单片机功能齐全,操作也更加简单,与之相对应的是昂贵的价格。综合来说,不符合设计心率体温监测系统的设计初衷[9]。

2.1.2 STC89C51的主要功能及性能参数

  此次设计选用的STC89C51单片机,使用COMOS8作为单片机的微处理器,片内具有4KB的Flash存储器。该设备有40个管脚,速度快,价格便宜,燃录方便,通过串行口下载,在线编程一般情况下增强型是6时钟然而普通型是12时钟;工作频率范围在40MHZ以内,和8051的80MHZ以内基本相一致;STC89C1相应的Flash可以划分成4KB/8KB/15KB;内部存储器为512B;定时器一共有3个16位;中断源一共有8个;其不需要专用编程器;通用I/O口一般由32/36个;工作电压通常情况下为3.8-5.5V;外形封装可以分为40脚PDIP、44脚PLCC以及PQFP等[10]。
  2.1.3 STC89C51单片机引脚说明
在这里插入图片描述

图2.1 STC89C51封装形式
  管脚说明:STC89C51外部有32个端口可供使用,相关引脚运用说明见如表2.1所示(其中VCC是电源电压接电源,GND接地)。
表2.1 P3口的第二功能
在这里插入图片描述

  时钟振荡器:其为STC89C51里存在构成内部振荡器的高增益反相放大器,引脚XTAL1以及XTAL2是其输入端以及输出端。其能够和当作反馈元件的片外石英晶体或者陶瓷谐振器组成自激振荡器,振荡电路的详细分布如图2.2所示。
在这里插入图片描述

图2.2内部震荡电路

.

三、 主要代码

#include <reg51.h>	        
#include <intrins.h>
#include "1602.h"
#include "18b20.h"
#include "delay.h"

unsigned char i_i=0,timecount=0,displayOK=0,rate=0,aa=0;
unsigned int time[6]={0};
unsigned char tab_sk[16]="WO DE BI SHE    ";	
unsigned char tab_ht[16]=" 000/min  00.0C ";  

unsigned long time_50ms=0xaaaaaaaa;	
unsigned char sys_times=0;

void time_init(void);	
void init_int0(void);
void SendStr(unsigned char *s,unsigned char length);
void SendByte(unsigned char dat);
void UART_Init(void);

void main()
{	
	int temp;
	float temperature;

	UART_Init();
	time_init();                     
	init_int0();	  

	LCD_Init();           
	DelayMs(20);          
	LCD_Clear();          		DelayMs(10);
	LCD_Write_String(0,0,tab_sk);	
	LCD_Write_String(0,1,tab_ht);	 
	 			 				 	

	while(1)
	{			
		if(displayOK==0)		{
		 	rate = 0;
		}
		else//Èç¹ûÏÔʾ¿ª
		{
			rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);	  
		}
		if(sys_times>=15)
		{
			sys_times=0;
			temp=ReadTemperature();							  	
  			temperature=(float)temp*0.0625;				

			tab_ht[10]=((unsigned int)(temperature*10)/100)+0x30;		  
			tab_ht[11]=((unsigned int)(temperature*10)/10%10)+0x30;
			tab_ht[13]=((unsigned int)(temperature*10)%10)+0x30;

		 	tab_ht[1]=rate/100+'0';	  	
			tab_ht[2]=rate/10%10+'0';
			tab_ht[3]=rate%10+'0';
			LCD_Write_String(0,1,tab_ht);	 
			LCD_Write_String(0,0,tab_sk);	   
	
			SendStr(tab_sk,16);	  
			SendStr("\r\n",2);
			SendStr(tab_ht,16);	 
			SendStr("\r\n",2);
			
		}
		sys_times++;
		DelayMs(50);
	}
}

void time_init(void)	  
{
	EA   = 1;	 	  
	TMOD |= 0x01;	  
	ET0  = 1;		 
	TR0  = 1;		 
}

void init_int0(void)	 
{
	EX0=1;			  
	EA=1;	 		  
	IT0 = 1; 		  
}

void int0() interrupt 0
{
		EX0=0;
		if(timecount<8)  ¦Àí
		{
				TR0=1;
		}
		else
		{
			time[i_i]=timecount*50+TH0*0.256+TL0/1000;
			TH0 = 0x3c;
			TL0 = 0xb0;     
			timecount=0;
			i_i++;
			if(i_i==6)
			{
				i_i=1;
				displayOK=1;   
			}								
		}
		EX0=1;
}

void time0_int() interrupt 1
{	
	TH0 = 0x3c;
	TL0 = 0xb0;     
	timecount++;
	if(timecount>65)     
	{
			i_i=0
			timecount=0;
			displayOK=0;
			TR0=0;
			TH0 = 0x3c;
			TL0 = 0xb0;     
	}
}
void UART_Init(void)
{
    SCON  = 0x50;		       
    TMOD |= 0x20;               
    TH1   = 0xFD;              
	TL1 = TH1;  
    TR1   = 1;                                       
    EA    = 1;                 
    ES    = 1;                  
}

void SendByte(unsigned char dat)
{
	unsigned char time_out;
	time_out=0x00;
	SBUF = dat;			  
	while((!TI)&&(time_out<100))  
	{time_out++;DelayUs2x(10);}	
	TI = 0;						
}

void SendStr(unsigned char *s,unsigned char length)	  
{
	unsigned char NUM;
	NUM=0x00;
	while(NUM<length)
	{
		SendByte(*s);  
		s++;		 
		NUM++;		  
  	 }
}

void UART_SER (void) interrupt 4 	
{
	if(RI)                       
	{
		RI=0;                 
	}
	if(TI) 
	TI=0;
} 
	

四、 原理图

在这里插入图片描述

五、 软件设计

3.1编程语言的选择

  再进行编写的时候,语言的选择很重要,选择一门正确的语言可以看起来简单易懂、加快整个毕设的进程,在对比C语言和汇编语言的优缺点时,C语言具有很大的优势,例如极大地提升程序的可读性,研究开发的时间大大缩短,并且,它具有极大地库文件,为我们的程序编写提供了巨大的方便。因此选择C语言[17]。

3.2 Keil程序开发环境

  在本设计中,选择使用Keil软件、C语言进行编程,在短时间内很容易熟悉掌握其中Keil有以下特点:
(1)Keil软件在很多的电脑操作系统中都能够使用,下载方便快捷,提供了丰富的库函数,并有功能强大的开发工具为之辅助[18]。这是其他软件所不具有的;
(2)在使用Keil软件编程的过程中,写成程序进行编译的过程中,如有错误不能直接的下载,会有提示;
(3)Keil软件可以配合仿真软件使用,将编译好的程序下载到在仿真软件中,通过仿真软件可以查看程序的不足之处,方便进行修改;
(4)Keil可以完成许多开发过程,从编辑、编译到连接和调试。Keil软件界面如图3.1所示。
在这里插入图片描述

图3.1 Keil开发界面图

3.3 STC-ISP程序烧录软件介绍

  STC-ISP是为STC系列单片机开发的单片机下载编程软件。它是一个用于下载代码、在线模拟和显示串行接口的集成软件。它是在智能51系列产品开发过程中获得的。它具有广泛性和高性能。是目前51系列单片机控制系统研发中不可缺少的一部分[19]。
  可以通过下载器下载微控制器程序(即用于串行接口的编程模块,如CH340)。在连接了MCU开发板、下载程序和PC机之后,首先就是要选定单片机的型号,波特率将根据定时器的初值计算出来,在程序编写完成且编译也没有出现错误的时候,在选定的文件夹中会有系统自动存放进去的“Hex”文件,选定好之后,最后单击程序的下载按钮即可。具体下载界面如图3.2所示。
在这里插入图片描述

图3.2 烧录软件对话框

3.4 CH340串口程序烧写模块介绍

  本设计通过CH340串口烧写模块实现对单片机程序的烧写。CH340串口烧写模块使用USB接口,十分方便的解决了笔记本电脑用户对STC系列单片机的程序烧写问题,本下载器低价格、高性能,是开发STC系列单片机的首选优秀工具。模块如图3.3所示。
在这里插入图片描述

图3.3 CH340串口烧写模块
CH340串口烧写模块引脚说明:(1)电源输出,因有USB电源线,故本开发板不接,不需要。(2)VCC 本开发板不接,不需要。(3)本开发板不接,不需要。(4)TXD 接单片机的RXD引脚。(5)RXD 接单片机的RXD引脚。(6)GND 接GND。
CH340串口烧写模块与单片机的具体接线图如表3.1所示。
表3.1 CH340串口烧写模块与单片机接线
在这里插入图片描述

六、 文章目录

目 录

摘 要 I
Abstract II
引 言 1
1 控制系统设计 2
1.1 主控系统方案设计 2
1.2 脉搏传感器方案设计 3
1.3 系统工作原理 5
2 硬件设计 6
2.1 主电路 6
2.1.1 单片机的选择 6
2.1.2 STC89C51的主要功能及性能参数 6
2.1.3 STC89C51单片机引脚说明 6
2.2 驱动电路 8
2.2.1 比较器的介绍 8
2.3放大电路 8
2.4最小系统 11
3 软件设计 13
3.1编程语言的选择 13
3.2 Keil程序开发环境 13
3.3 STC-ISP程序烧录软件介绍 14
3.4 CH340串口程序烧写模块介绍 14
4 系统调试 16
4.1 系统硬件调试 16
4.2 系统软件调试 16
结 论 17
参考文献 18
附录1 总体原理图设计 20
附录2 源程序清单 21
致 谢 25

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值