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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的心率脉搏计仿真及源程序
) K; ^. w/ i3 l4 J" V  C- T" N! [, `
% E! A" e: W7 p8 @3 g
心率脉搏计的仿真原理图:
' n% T; J+ C, m+ `

1 h  U% s* U! M! E; q#include <reg52.h>
+ W) q) p8 X. c  v3 X#include "lcd1602.h"
! r; h9 G; G, [. t. a& h; w+ g3 {. m5 n, m% S" T
#define uchar unsigned char % r! b" Q& t6 A8 n$ d2 [) [
#define uint  unsigned int8 t0 Z+ |) q* S6 d: }/ c- F& O

0 R/ V' x4 {  ^3 Q! V- u* @unsigned char num=0,timecount=0,displayOK=0,rate=0;
# X+ b4 W/ S$ a, xunsigned int time[6]={0};
% D* I4 Y# Z; @" c6 R! Z
& y( d1 F" |5 g- _8 Q3 _' {" H0 B/***********************1ms延时函数*****************************/! z- @$ S4 E7 b6 d$ I
void delay_1ms(uint q)0 ]; L; e' S: T7 F4 ~* x. \+ I% ~8 |
{
! }# }9 v& ]9 j; X' i# z        uint i,j;
: s) s! J0 p( }& {$ @1 _/ Z        for(i=0;i<q;i++)! j/ Q/ n; O4 q$ V, `: g8 f. i3 X
                for(j=0;j<110;j++);$ c4 t5 R4 c) ]! n4 ]- Y# Y9 r
}& E9 \. b0 I8 w* N

  S5 u! K4 E1 m( m6 ~$ v0 \7 k5 C6 k2 {7 V  J
void main()
4 A3 N- h7 Z/ \+ e5 O3 I3 K( d2 E{        8 n8 `- }" E- E  ^! \8 k8 p$ Y
        init_1602();
) L. g3 C" s9 u) i: y        TCON=0x01;//设置外部中断0% @) M6 m* W' H+ |+ j8 H
                EX0=1;3 C+ T& p0 J7 ]/ F2 \: b
                TMOD=0x01;//定时器0初始化
: Z8 ^; l6 B; e2 t- w& F8 ^& }1 Y( b6 |                TH0=(65536-50650)/256;//实测每50ms中断的定时值6 ^& ]# s9 A3 A1 P3 [5 s
                TL0=(65536-50650)%256;) u# X+ l5 @+ \5 s- N
                ET0=1;//开定时器中断
' @7 K! O; l4 c) ]. i7 k* E' N                //显示基本文字- f; m" F2 G; e+ t0 P- ^/ r/ e$ O
                write_string(1,0,"   Heart Rate   ");
: v; L$ {" ]4 n. L                write_string(2,0,"        /min    ");. i3 A5 b; ~1 S; U# L
                TR0=0;//定时器停止
/ b* `6 b$ p: _- X9 C; y$ D: d                EA=1;//开总中断                    * p  r& G% a& D
           while(1)+ Q  Q4 y4 v+ Y7 T
           {
# v: F7 I0 F! N7 A, M& |- U- I% P4 g  z0 v% K# z9 y  c0 n
                   if(displayOK==1)
* x! I4 Q7 {) z& q                   {: G: T1 t9 f9 Q5 Y
                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
: {8 y" ?( h1 Z/ u# m6 S. e1 |                        write_sfm3_18B20(2,5,rate);+ k; [8 w# @" B
  o/ h' T9 N1 ]6 ?; F6 i8 k
                      }        8 i) N) J3 v4 r! u( Q
                        else
, M! Z% a1 |1 V, \                        {
' N: ]$ i5 z3 }4 f- a                                     write_string(2,5,"   ");
% M) Q7 Q) {. x. j2 [/ b                        }% e: [; v4 y# S. q. C$ j. d5 `
                   delay_1ms(300);
% D8 C5 c$ W) B/ Y* ]5 L" j% o0 u& C' q* Z4 a

% N5 W, E1 \- e" `+ @* c        }7 q7 }' a) C' r3 t3 A& _% O) A* A
}0 g0 X0 I6 Y6 u. h* q% V
$ @* Q1 L0 w3 M$ M" `; Y; m7 `4 g
void ex0() interrupt 00 T9 ^1 F+ u" X  g2 t% X
{- f8 \7 |# l4 K4 E, p- z
                EX0=0;//暂时关外部中断
& V' n: f( J" W1 J" h1 d                if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理( M  O+ d% C8 I1 m
                {
6 O. P1 G7 }' u( Q                                TR0=1;//开定时器
- ^; v8 z3 a  C, h$ p5 g: c8 t) v                }
: q3 j  X4 e+ u/ n) @                else+ ^+ V4 q6 y7 @) ?- M
                {/ S7 f1 ~% I8 A4 G0 T' _! `
                                time[num]=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间' v! Y5 y( n$ M
                                TL0=(65536-50650)%256;//重新设置定时器' J# }% W4 j* s  x7 U/ y' V
                                TH0=(65536-50650)/256;
: V" y, z4 K; p3 f% E1 e                                timecount=0;//50ms计数清零
0 Y( {/ f- v! Z4 ~# Z6 V8 M- q3 p                                num++;
6 U# _6 `/ F  [( a; P                                if(num==6)//记录到超过等于6次时间  t3 c/ Q: d3 I3 W4 N  Y6 t8 w; x
                                {
, F% Z3 _3 o8 i" T) Y                                                num=1;//计数从1开始
7 R# n) P- h/ s                                                displayOK=1;    //测得5次开始显示4 `$ N4 U  R% B- b5 b
                                }        
5 q" X' D- ]: \3 ^( e0 p
8 |6 p- F. H1 t3 \. [                }
1 \* N' @2 U; C4 V2 t: _                EX0=1;
4 |3 v# E% V6 g4 [}0 M* E& O& Q) J7 O2 z: S
void et0() interrupt 1
8 `2 c- Y0 N9 ?  _& |{
0 O3 W4 q3 {, b5 D                TL0=(65536-50650)%256;
% p3 R2 d( u+ E0 o0 C+ x- f                TH0=(65536-50650)/256;
) _1 O8 k+ L( y8 ?2 k
9 E5 |" \. q9 V# m( D( e                timecount++;//每50ms一次计数
" \5 w7 l, Z" L$ N& t; d6 d                if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示
9 e; J4 g7 a! h3 o) }                {( D4 e8 _. {. P$ C5 w+ u
                                num=0;//数据个数清零) @5 ]2 X% G) W2 b, L: @8 h; b* r% Z5 L

5 W; j8 L7 Q6 Q9 v  a; C  J9 Q# a- b2 F  @2 d  f2 f" U
…………限于本文篇幅 余下代码请从论坛下载附件…………
1 m9 D* I7 [/ q3 B' ^" Y
游客,如果您要查看本帖隐藏内容请回复
$ q; V0 W. g, K" i

4 s1 e5 I) c8 {

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-1 21:25 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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