1课程设计报告项目名称:脉搏心率测试仪测试与制作课程名称:单片机技术二级学院:电气与电子工程学院系:电气工程系班级:14电气5班学号:2014010143501学生姓名:陈灿小组成员:陈灿何涛罗炜辉指导教师:钟立华成绩:报告完成日期2016年12月16日2摘要脉搏测试仪是用来测量一个人脉搏跳动次数的电子仪器,也是心电图的主要组成部分,因此,在现代医学上具有重要的作用。随着心脏的搏动,人体组织半透明度随之改变:当血液送到人体组织时,组织的半透明度减小;当血液流回心脏,组织则半透明度增大。在人体组织较薄的手指尖通过红外对管来获得采集信号。脉搏测量仪在我们的日常生活中已经得到了非常广泛的应用。为了提高脉搏测量仪的简便性和精确度,本课题设计了一种基于51单片机的脉搏测量仪。系统以STC89C52单片机为核心,以红外发光二极管和光敏二极管为传感器,并利用单片机系统内部定时器来计算时间,由光敏二极管感应产生脉冲,单片机通过对脉冲累加得到脉搏跳动次数,时间由单片机定时器定时而得。系统运行中能显示脉搏次数,系统停止运行时,能够显示总的脉搏次数。结果最终可以把采集到的脉搏信号显示在LCD1602上。经测试,系统工作基本正常。关键词:STC89C52;脉搏测量仪;LCD显示器;光电传感器3目录第一章绪论.............................................41.1系统背景............................................4第二章系统电路设计.....................................62.1系统总体设计框架结构................................62.2系统硬件单元电路设计................................62.2.1时钟电路设计......................................92.2.2复位电路设计......................................92.3系统硬件总电路.....................................12第三章系统软件设计....................................133.1系统软件流程图.....................................133.2系统程序设计.......................................15第四章调试.............................................25结束语.................................................27参考文献...............................................28附录...................................................294第一章绪论1.1系统背景随着社会经济水平和人们的物质生活水平的不断提高,人们的生活方式和饮食结构发生着巨大变化。快节奏的生活方式和不良的饮食结构,使得现代的人们不得不面临着更大的健康威胁,高血压、冠心病、动脉硬化等各种各样的心血管疾病正不断威胁着人类。而这些疾病的早期监测,对疾病的防治和控制有着十分重要的意义,所以结合着现代电子技术的电子心率计对心率的检测和疾病的控制也对人们的健康有着十分重要的意义。正因为如此,本设计利用现代电子技术、传感器技术等,设计出一款测量准确、简单易用,造价便宜的电子心率计。此心率计总体包括了红外心率检测电路、前端信号处理电路、控制电路和电源转换电路。并用C语言编写控制程序,实现对电路的控制。通过不断的修改和调试,最终设计这种基于红外线传感器检测心率,通过运算放大电路和整形滤波电路对检测到的小信号进行处理,形成可被单片机处理的数字信号,最后用STC89C52单片机控制,实现心率显示和异常报警的多功能电子心率计。本设计的一大特点是,心率计控制程序对心率的两种算法可使得该心率计工作在测量平均心率和瞬时心率两种状态,这两种心率可以从不同方面反映人体的健康状况。1、设计内容脉搏主要由人体动脉舒张和收缩产生的,在人体指尖,组织中的动脉成分含量比较高,而且指尖厚度相对人体其他组织而言比较薄,透过手指后检测到的光强相对较大,因此光电式脉搏传感器的测量部分通常在人体指尖,手指组织可以分成皮肤、肌肉、骨骼等非血液组织,其中非血液组织的光吸收量是恒定的,而在血液中,静脉血的搏动相对动脉血是十分微弱的,可以忽略,因此可以认为光透过手指后的变化仅有与动脉血的充盈而引起的,那么在恒定波长的光源的照耀下,通过检测透过手指的光强将可以间接的测量到人体的脉搏信号。2、采取的方法红外管采集端,对采集到的信号进行处理放大。形成稳定的脉冲,传给单片机处理。在单位时间内(一分钟)进行计数,并用数码管显示其计数值,从而直5接得到每分钟的脉搏数。3、设计要求:以STC89C52单片机为核心控制芯片,光电式脉搏波传感器采集信号,以四断数码管作为显示系统,经信号处理电路后脉搏冲送进单片机,能够实现报警、数码管显示心率的频率等功能。4、基本功能是:用传感器将脉搏的跳动转换为电信号,并加以放大,整形和滤波。在短时间内(60s)测出每分钟的脉搏数。它的作用可以在60S内测量脉搏数,并且显示其数字。正常人脉搏为60-80次每分钟,婴儿为90-100次每分钟,老人为100-150次每分钟。6第二章系统电路设计2.1系统总体设计框架结构(1)传感器的选择:选择红外发光二极管和光敏二极管为传感器组成一红外对管,由光敏二极管感应产生脉冲,单片机通过对脉冲累加得到脉搏跳动次数。(2)信号处理:选用LM324对光敏二极管产生的信号进行放大、滤波、整形再去触发单片机。(3)单片机电路:利用单片机自身的定时中断进行计时,利用单片机的外部中断功能对输入的脉冲电平进行计数(包括STC89C52、外部晶振、外部中断等)。(4)显示电路:把单片机得出的结果用8位共阳LED数码管动态扫描来显示,便于直接读出数据。(5)电源:选用LM7805三端稳压器进行稳压得到的电压提供给整个系统供电(包括传感器部分、单片机系统、数码管显示部分)。2.2系统硬件单元电路设计1、系统电源电路如图1本电源采用LM7805三端稳压器中的电子手册的典型电路设计,将稳压源提供的7~8V的电源进行稳压成5V左右后提供给整体系统。STC89C52单片机外部中断复位电路外部晶振数码管显示电路蜂鸣器传感器信号处理7图12、传感器电路图2是脉搏信号的采集电路图23、波形整形电路8图34、单片机处理电路如图4所示,本部分运用了STC公司的STC89C52单片机作为核心元件,在这里运用单片机能更快更准确地对数据进行运算,而且可以根据实际情况进行编程,所用外围元件少,轻巧省电,故障率低。来自传感和整形输出电路的脉冲电平输入单片机STC89C52的/INTO脚,单片机设为下降沿中断触发模式,故每次脉冲下降沿到达时触发单片机产生中断并进行计数,来一个脉冲脉搏次数就加一;定时器中断主要完成一分钟的定时功能。单片机对一分钟内的脉冲次数进行累加,通过P0、P2口把测量过程和结果送到数码管显示出来。9图4(1)时钟电路:时钟电路是一个振荡电路,它的作用是:给单片机提供工作频率。振荡电路的两个电容的作用是起振。10(2)复位电路:按下弹片开关时开始测量,再次按下时复位,从新测量(3)报警电路:当心率大于199次/分钟或小于50次/分钟,蜂鸣器报警115、显示电路如图5本设计的显示采用8位共阳LED数码管动态扫描来显示。动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)共阳极LED数码管组成4位显示,其中0、1、2两位显示测量中的脉搏次数,单片机的P0口控制显示字型,P2口中的高四位控制显示段位。图5122.3系统硬件总电路13第三章系统软件设计3.1系统软件流程图3.1.1主程序流程图程序初始化是单片机程序必需的,它的主要任务是确定中断入口地址和程序入口。然后显示全零,目的是为了区分是否有信号送入,当没有信号送入时,显示全零,则说明心率计没有正常工作,反之,则正常工作。设计中比较重要的一部分是定时l00ms,它主要是为采样6s建立基础。系统运用定时器T1定时来实现100ms的定时,中断等待占用程序执行的绝大部分时间,是一个死循环语句,只有当中断满足条件时,才执行中断服务子程序,进行累加计数的结果,累加之后,判断采样的次数,如果采样未满60次,说明不到6s,返回继续采样、等待中断,直到采样60次为止,之后把6s内采样得到的次数由二进制数转化为十进制数,送到液晶进行显示。143.1.2中断程序流程图心率的有效测量范围为40次—120次/分钟,为了消除外界信号的干扰,在定时器中断程序中加入了对频率大小的判断,滤除掉小于40次/分钟和大于120次/分钟的脉冲信号3.1.3定时器T0和T1的中断服务程序图153.2系统程序设计#includereg52.h#includeintrins.h//包含头文件#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlong//宏定义#defineLCD_DATAP0//定义P0口为LCD_DATAsbitLCD_RS=P2^5;sbitLCD_RW=P2^6;sbitLCD_E=P2^7;//定义LCD控制引脚sbitXintiao=P3^2;//脉搏检测输入端定义sbitspeaker=P2^4;//蜂鸣器引脚定义voiddelay5ms(void);//误差0usvoidLCD_WriteData(ucharLCD_1602_DATA);/********LCD1602数据写入***********/voidLCD_WriteCom(ucharLCD_1602_COM);/********LCD1602命令写入***********/voidlcd_1602_word(ucharAdress_Com,ucharNum_Adat,uchar*Adress_Data);/*1602字符显示函数,变量依次为字符显示首地址,显示字符长度,所显示的字符*/voidInitLcd();//液晶初始化函数voidTim_Init();ucharXintiao_Change=0;//uintXintiao_Jishu;ucharstop;ucharView_Data[3];ucharView_L[3];ucharView_H[3];ucharXintiao_H=100;//脉搏上限ucharXintiao_L=40;//脉搏下限ucharKey_Change;ucharKey_Value;//按键键值ucharView_Con;//设置的位(0正常工作,1设置上限,2设置下限)ucharView_Change;16voidmain()//主函数{InitLcd();Tim_Init();lcd_1602_word(0x80,16,HeartRate:);//初始化显示TR0=1;TR1=1;//打开定时器while(1)//进入循环{if(Key_Change)//有按键按下并已经得出键值{Key_Change=0;//将按键使能变量清零,等待下次按键按下View_Change