基于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