导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→基于89C2051单片机技术的心率计[阿水]

 *第36003篇: 基于89C2051单片机技术的心率计

  
楼 主:阿水 2005年11月25日00:39
 基于89C2051单片机技术的心率计
请各大侠帮看看行得通吗?

基于89C2051单片机技术的心率计    看不到图请下载附件!!!!

                  

本使用方便,只需将手指端轻轻放在传感器上,即可实时显示出你的每分钟脉搏次数.
本心率计采用红外光学检测法,摒弃了不便于运动状态下测量脉搏的听诊器和吸附在人体上的电极等老式测量方法。检测的基本原理是:随着心脏的搏动,人体组织半透明度随之改变:当血液送到人体组织时,组织的半透明度减小;当血液流回心脏,组织则半透明度增大。这种现象在人体组织较薄的手指尖、耳垂等部位最为明显。因此,本心率计将红外发光二极管产生的红外线照射到人体的上述部位,并用装在该部位另一侧或旁边的红外光电管来检测机体组织的透明程度并把它转换成电信号。由于此信号的频率与人体每分钟的脉搏次数成正比,故只要把它转换成脉沖并进行整形、计数和显示,即可实时地测出脉搏的次数。

本心率计的取样整形电路图 
如上图所示,D1和Q1组成红外发射和接受装置,该传感器输出的低频信号,经无极性隔直流电容C6、C7加到线性放大端输入端。因为传感器输出信号的频率很低,如当脉搏为50次/分钟时,只有0.78Hz,200次/分钟时也只有3.33Hz,因此信号首先经R14、C8滤波以滤除高频干扰。当传感器与K2断开或检测到较强的干扰光线时,K2输入端C的直流电压会出现很大变化,为了使它不致泄漏到IC1a输入端而造成错误指示,用C6、C7背靠背串联组成的双极性耦合电容把它隔断。运放IC1a将信号放大200倍,并与R11、C5组成截止频率为10Hz左右的低通滤波器以进一步滤除残留的干扰。
   IC1a输出的信号是叠加有噪声的脉动正弦波,此信号由比较器IC1d转换成方波。该比较器的阈值可用P2调定在正弦波的幅值范围之内,但对P2的调定要求并不严格,因为IC1d   的输出信号经C4、C7的微分后总是将正、负相间的尖脉冲加到单稳多谐振荡器IC1c的反相输入端,不会造成很大的触发误差。
  当有输入信号时,IC1c在比较器输入信号的每个后沿到来时输出高电平,使C3通过R6充电。大约持续20ms之后,因C3充电电流减小而使IC1c同相输入端的电位降低到低于反相输入端的电位(尖脉冲已过去很久),于是IC1c改变状态并再次输出低电平。这长的脉冲是与脉搏同步的,并由红色发光二极管D14的闪亮指示出来。同时,该脉冲电平通过R17送到单片机P3.3脚,进行对心率的计算和显示。
9v电源电压由R3、R4分压成4.5v,再经IC1b缓冲后用作IC1 a、IC1d、 IC1c的参考电压,这样即使电池电电压降低到6v本电路也能正常工作。
(注:取样整形电路图以及其原理参考自:1、 1996年《电子报》第31期,江明编译.《脉搏测试器》;2、1994年《电子报》第43期,周安.《便携式快速心率计》 )

单片机处理与显示部分的电路图
电路图如下:
 
如图,本部分运用了ATMEL公司的89C2051单片机作核心元件,在这里运用了单片机能更快更准确地对数据进行运算,而且可根据实际情况进行编程,所用外围元件少,轻巧省电,故障率低。ULN2003为内置达林顿管集成电路,作动态扫描时的选通驱动用。220Ω排阻作限流用,维持数码管正常显示。本部分电源电压为+5V稳压。
来自传感和整形输出电路的脉冲电平输入单片机89C2051的P3.3脚,单片机设为负跳变中断触发模式,故每次脉冲下降沿到达时触发单片机产生中断并进行计时;当下一次脉冲的下降沿到达时,单片机对两次脉冲间的时间进行运算得出心率,通过P1口把结果送到数码管显示出来。同时,对每次脉冲的到来均响铃,与脉搏同步。这样,就可以通过声光的形式形象地把脉搏的快慢显示出来。
为避免干扰的影响,单片机对两个脉冲之间的时间间距进行检测,若发现有干扰则忽略该干扰而不显示。本测试器的有效测量范围为50次-199次/分钟。

单片机程序流程图如下图所示:

主程序流程图: 定时器中断程序:

 

INT中断程序: 显示程序:

本测试器使用方法:
心率计通电后,数码管应显示0。把手指轻轻置于右下角的传感器中,以稍微有压迫感为宜。很快红色发光二极管会伴随你的脉搏而闪烁,并伴有蜂鸣器响,同时数码管显示出你的心率, 非常方便。如果偶尔出现显示不稳的情况,请按复位键对系统进行复位。本测试器适用于7~9V直流电压,正常工作电流约为100mA。

程序代码:


ORG  0000H
AJMP START
ORG  000BH
AJMP TIME
ORG  0013H
AJMP INT_1

TIMES    EQU 30H
MORE_200 EQU 31H
MORE200  EQU 32H
BELL     EQU 33H

ORG 00e0H
START:

         MOV SP,#50H
     MOV TMOD,#01H   ;方式1,定时时间为6ms
  MOV TH0,#0E8H   ;
  MOV TL0,#90H


  SETB EA           ;开总中断
  SETB IT1   ;INT1 负跳变触发
  SETB EX1   ;INT1 开中断
         SETB ET0
  ;SETB IE1

  MOV R1,#00H
  MOV R2,#00H
  MOV R3,#02H

         setb tr0
org 0100h
         mov r3,#06h
  ajmp main
  org 0110h

MAIN:    ACALL SHOW
      AJMP MAIN

;*************************************************************
ORG 0200H
TIME:    clr ex1
         PUSH ACC
  push psw
         MOV TH0,#0E8H
  MOV TL0,#90H
  CLR C
  MOV A,R6   ;大于200既是小于50次每分,清r6,并置标志位MORE200为1
  SUBB A,#0c8H
  JC   T_TEMP1
  MOV R6,#00H
  MOV MORE200,#01H
  AJMP T_TEMP2

T_TEMP1:INC R6
T_TEMP2:CLR C
  MOV A,BELL
  SUBB A,#01H   ;响铃18ms,与脉搏脉冲同步
  JC STOPBELL
  ;SETB P3.7
  AJMP SSSS
STOPBELL:;CLR P3.7
SSSS:  setb ex1
         pop psw
         POP ACC
  RETI

  nop
  nop
  ljmp 0100h

;*************************************************************
ORG 0300H

INT_1:   PUSH PSW                        ;
         PUSH ACC
         MOV TIMES,R6   ;保存r6的时间
  MOV R6,#00H   ;令r6为0,重新计时
  MOV MORE_200,MORE200  ;保存MORE200标志位
  MOV MORE200,#00H  ;令MORE200为0

  MOV BELL,#03H   ;设响铃

         MOV A,MORE_200   ;判断是否大于200,即是否小于50次
    CJNE A,#00H,TOKEEP  ;大于200,即小于50次,保持原来的显示

  CLR C
  MOV A,TIMES   ;判断是否小于50,即是否大于200次
  SUBB A,#32H   ;
         JC  TOKEEP                 ;小于50,保持原来的显示
         AJMP CALCULATE


  TOKEEP:         POP ACC
    POP PSW
    AJMP C_TORETI

CALCULATE:    push psw
              push acc


  mov r1,times
         mov r7,#0h
  mov r3,#27h
         mov r2,#10h
         clr c
subs1:  mov a,r2
  subb a,r1
  mov r2,a
  mov a,r3
  subb a,#0h
      inc r7
  mov r3,a
  clr c
  cjne r3,#0h,subs1
subs2:  mov a,r2
  subb a,r1
  mov r2,a
  jc chg2dec
     inc r7
  ajmp subs2


CHG2DEC:           MOV A,R7    ;  由r7 的值转换成3位十进制,其中
                                          ;     r1为百位,r2为十位,r3为个位
                    CLR C    ;
      SUBB A,#0C7H    ;大于200次每分钟,令为199次每分钟
      JC CHANGE
      MOV R7,#0C7H

       CHANGE:      MOV A,R7
                    MOV R0,A

                    MOV A,R0
      CLR C                         ;减100
      SUBB A,#64H
      JC NO_MINUS    ;
      MOV R0,A    ;大于等于100次每分钟,令百位为1
      mov r1,#01h
                    ajmp divv

     NO_MINUS:      mov r1,#00h
          divv:
             MOV A,R0    ;
      MOV B,#0AH    ;
      DIV AB
       MOV R2,a
      MOV R3,b


                    Pop ACC
      POP PSW
      AJMP C_TORETI


    C_TORETI:      RETI

         nop
  nop
  ljmp 0100h


;************************************************************************
ORG 0500H

;SHOW的子程序                                           
r1为百位数字,r2为十位,r3为个位
;                                                       
p3。0接百位,p3。1接十位,p3。2接个位


SHOW:             MOV A,R1    ;
                  CJNE A,#00H,S_TEMP1   ;
    ACALL DELAY    ;
    AJMP S_TEMP2    ;

      S_TEMP1:    MOV A,R1    ;显示百位
                  MOV DPTR,#TABLE
    MOVC A,@A+DPTR
    MOV P1,A
                  SETB P3.0
    ACALL DELAY
    CLR P3.0

      S_TEMP2:    MOV A,R1
                  CJNE A,#00H,S_TEMP2_2   ;百位为0,十位又为0时,十位的0消隐
    MOV A,R2
    CJNE A,#00H,S_TEMP2_2   ;
    ACALL DELAY
    AJMP S_TEMP3

      S_TEMP2_2:  MOV A,R2                              ;显示十位
                  MOV DPTR,#TABLE
    MOVC A,@A+DPTR
    MOV P1,A
    SETB P3.1
    ACALL DELAY
    CLR P3.1

      S_TEMP3:    MOV A,R3    ;显示个位
                  MOV DPTR,#TABLE
    MOVC A,@A+DPTR
    MOV P1,A
    SETB P3.2
    ACALL DELAY
    CLR P3.2

    RET

    nop
           nop
           ljmp 0100h

;*****************************************************************************
ORG 0600H
DELAY:            PUSH ACC
                  MOV A,R5
                  PUSH ACC

                  MOV R5,#0AH                           ;延时1ms
          D2_1:   MOV R4,#32H
   D2_2:   DJNZ R4,D2_2
           DJNZ R5,D2_1

                  POP ACC
    MOV R5,A
    POP ACC
    RET


    nop
                  nop
    ljmp 0100h

;******************************************************************************

ORG 0700H
TABLE:      DB 03FH            ;LED 显示码0,共阴
            DB 006H            ;          1
            DB 05BH            ;          2
            DB 04FH            ;          3
            DB 066H            ;          4
            DB 06DH            ;          5
            DB 07DH            ;          6
            DB 007H            ;          7
            DB 07FH            ;          8
            DB 06FH            ;          9


         nop
  nop
  ljmp 0100h
    END

  
2楼:songhui 2005年11月25日18:44
 ?????


  
3楼:hezuo 2005年11月26日14:57
 看了~~~
我看过了,觉得还可以,有可行性。
其实已经有很成熟的应用了,医院里的生命监视仪就是。
我也看不到图和附件,麻烦贴出来或者 wanghz@vslun.com                 
  
4楼:hstdj 2006年1月14日12:18
 附件在哪儿下载?
附件在哪儿下载?
  
5楼:applegril 2006年3月22日14:38
 你好啊
好啊,你的文章写的很不错,可以让我参考一下你的电路图吗,如果可以的话可以的话,可以给我发到邮箱里吗?lylyyk1984@126.com 谢谢
  
6楼:bluefly2005 2006年6月20日14:15
 ???????????????????????
???????????????????????????????????????????
  
7楼:happyccy 2007年4月25日12:09
 2222222
hao
  
8楼:island 2008年10月9日11:21
 看不到附件
我也看不到图和附件,麻烦贴出来 或者 island_006@163.com 
谢谢了!!
  
9楼:pceveryday 2008年10月9日13:08
 [讨论]
怎么没有原理图呢
  
10楼:cutter00 2008年10月21日19:25
 跪谢
附件啊,大侠,回yuzuguo1987@sina.com
跪谢
  
11楼:spadgeletov 2008年10月31日01:40
 回复
这种原理还是很少见的。只要是机体组织比较薄的部位都行吗?
  
12楼:dugunv 2009年2月26日17:05
 [求助]
麻烦大哥把电路图发过来吧,我的邮箱jyjliuchuanfeng@126.com  万分感谢。。
  
13楼:ilxxj0 2009年5月18日14:20
 [求助]
大哥 能把图发我吗 急~~~!!! 万分感激 ~~~~ilxxj007@sina.com
  
14楼:xiaoyuyu 2009年6月16日21:23
 55
我也看不到。俺也很急,。。能发到我油箱吗?1030959822@qq.com
  
15楼:lhbzx1984 2009年6月20日17:09
 treterterte
  
16楼:asjut 2011年4月6日09:44
 。。。
看不到图啊

>>>>>>对该主题发表你的看法

本主题贴数16,分页: [第1页]


[上一篇主题]:ad676的问题求助,有图和程序。

[下一篇主题]:PCB过孔全介绍,精华!推荐!!!