找回密码
 注册
关于网站域名变更的通知
查看: 485|回复: 2
打印 上一主题 下一主题

基于51单片机的心率脉搏计仿真及源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-4 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机的心率脉搏计仿真及源程序7 y% O4 i2 }8 N  l- g
% c, a* Y4 ^7 g. p

, d4 d3 v, A' ^0 z, X7 G- i+ A5 ^心率脉搏计的仿真原理图:
$ m7 v* ^4 M% @* k- s
/ T3 O  P9 U+ N" J
#include <reg52.h>
. ?' l; X" r7 O# t- d" p8 }#include "lcd1602.h"
% ?6 @- \9 o3 F( S; x1 u9 s
1 v6 ]6 g7 W  [2 V#define uchar unsigned char
: l, j! B* P0 C4 {; ^( J* J, c+ r#define uint  unsigned int
. y3 a* V3 A6 W1 K5 K. W& W4 {% X
. N, B% N& B3 e; k, d: C4 iunsigned char num=0,timecount=0,displayOK=0,rate=0;
1 f. H  }: J1 A1 Uunsigned int time[6]={0};
" ^7 m& @: b* M+ T, z3 P$ }" |& T# _
/***********************1ms延时函数*****************************/
/ F% n, e  ?' t+ G- ~* Xvoid delay_1ms(uint q)
) H8 f. `& R, c{
: u1 H0 q( x! N5 h9 o5 q% I        uint i,j;4 l7 [' Z8 l% G/ @
        for(i=0;i<q;i++)& X+ L7 ~$ i7 n, M3 h4 |
                for(j=0;j<110;j++);
( R- o: ~4 c$ |}9 {/ Z4 ^. O; J2 S% T/ Y

" D( z4 f2 k$ ~; i! c, c$ U1 j( a8 ]! A5 K  C
void main()
; W( L+ W% F2 u9 j) E{        . A; }' A$ s3 K, w
        init_1602();, K; n( ^* ~6 Z; [  A
        TCON=0x01;//设置外部中断0& h$ S! j4 k" Y# l6 T7 b% q
                EX0=1;
  D, j! m" F& L' ^# p* Y0 [                TMOD=0x01;//定时器0初始化5 T  j* Y1 H6 _) [9 N* h
                TH0=(65536-50650)/256;//实测每50ms中断的定时值
$ F1 ~! d/ D8 Q% B- R1 b& ^" L" K! h                TL0=(65536-50650)%256;/ g# r& Q- o! {8 k  I# L
                ET0=1;//开定时器中断
. N# w: ?) O* T9 I5 [% ~+ C                //显示基本文字: l8 z9 H0 Z/ P8 Q
                write_string(1,0,"   Heart Rate   ");0 D, J+ t7 i: \+ D) ^# d( q
                write_string(2,0,"        /min    ");- {$ A( }& j& f1 t
                TR0=0;//定时器停止
. R# W4 x& @) h  d                EA=1;//开总中断                    
! m4 a: ~% c: b) J1 b           while(1)& N5 m8 J' \3 u
           {) `) e. ^& ]: X

3 z) X2 G5 Y7 A9 A3 U9 q! J! A                   if(displayOK==1)
& m( x  \7 ]( X                   {3 V- {6 |: }# H
                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);6 U6 g+ m% l( p" w
                        write_sfm3_18B20(2,5,rate);% _8 t% D; m. K. C
0 q* T3 m8 k) H0 ^, a) J
                      }        
0 v( |" R/ `" K& ^9 ~  x. j0 M                        else9 Y5 d4 X4 K5 m' V
                        {2 z; s8 }& k2 V2 M/ [
                                     write_string(2,5,"   ");/ y, K( N( j( i! \0 S6 W1 |# Q
                        }
+ J! K6 \* a& z$ J+ B                   delay_1ms(300);, X1 r1 g$ f& P0 N6 Q$ L  o

; `! W- |! o9 |: _" D8 Z
% w, r4 |* c* P; ~' ]3 c) m" S0 ]        }
: g" q7 x3 j* H8 R+ p}! Q7 l, A( h* ^/ B1 ^
5 S: o6 D, h) I. Q" r5 p! v8 u
void ex0() interrupt 0
% z  x3 S" v( u4 k& L: s5 E& \{
; W' o6 J, Y) n. A                EX0=0;//暂时关外部中断+ w  W9 n# D, I8 W
                if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理5 h* _( B* |9 {) F( g
                {; C- }3 i# B3 C8 m, \$ ?/ M6 A, H4 s7 y
                                TR0=1;//开定时器; X7 t$ j3 I# A% s) Q3 O# C
                }, |5 Y" O( }) d- M: d
                else& p$ @/ M1 B6 _: [2 L6 l1 k
                {, R6 ^" m" W2 Y- M$ P" m+ t% U
                                time[num]=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间; w" [) U" q4 N
                                TL0=(65536-50650)%256;//重新设置定时器. P: g& J+ L% N$ f
                                TH0=(65536-50650)/256;
( x0 a! B' l6 _) ~  \- K; z                                timecount=0;//50ms计数清零
8 }$ c8 Y9 w6 [, q1 v0 q7 m                                num++;
; z& L6 q  F% p9 c/ s                                if(num==6)//记录到超过等于6次时间
6 a( A1 {; s1 V0 I5 r8 U% c                                {
8 h) Q6 f$ E1 U                                                num=1;//计数从1开始
% l. g- ~$ U! d* I                                                displayOK=1;    //测得5次开始显示! m% j0 s2 q4 o. X1 D( m: f
                                }        
7 l; p( ~7 K( R- f
. K& A2 i, F) K5 F# f3 `8 t7 w0 \                }% x+ ~# `/ |$ w+ x1 p
                EX0=1;
4 h  H: V  t& h5 r2 ^! L% i}
  L, {1 ?: C1 n0 a3 J' f; ]# o/ yvoid et0() interrupt 1  `& M0 T! _& \$ t. R
{
+ i& F7 V: Y6 T& d5 p                TL0=(65536-50650)%256;
, |$ q+ W- d; a3 |9 ^/ z                TH0=(65536-50650)/256;
5 C4 ]9 Z$ J' e9 D1 \" o. o% x- S! G8 X1 }! C9 h
                timecount++;//每50ms一次计数) y# E9 i, w% k. s5 p
                if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示
1 d' e# `+ {2 y4 s5 P, O                {
- d8 q/ B- Y8 m" N/ U                                num=0;//数据个数清零
. a' B$ Q# Z' j3 d' H7 N  U
# n4 U! S5 S8 i8 E; W# T! c
* b4 x# O% p- x4 d& o, G0 I; \…………限于本文篇幅 余下代码请从论坛下载附件…………; k, F7 y3 Q, ^$ E+ }9 c
游客,如果您要查看本帖隐藏内容请回复

4 H- M1 I$ t/ V/ D4 e3 x5 S

+ a( O9 r5 i& t

该用户从未签到

2#
发表于 2018-12-4 10:18 | 只看该作者
路过捧场,谢谢分享!

该用户从未签到

3#
发表于 2019-2-26 17:35 | 只看该作者
看看楼主的代码,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-16 08:03 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表