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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的心率脉搏计仿真及源程序- E# K+ v: ~( _: _

, V* `/ }+ {/ C9 H  A8 D, H

: E; g" f  @9 N, h: n心率脉搏计的仿真原理图:- c6 Q$ y; W3 s& |

3 W) ]  X, c$ n  Q+ x* M3 I#include <reg52.h>% {6 s4 x4 O' q
#include "lcd1602.h"
' l/ l& [: v% |& \# Q: V
) Z# L) i, v2 f; m2 I3 y6 e# Q#define uchar unsigned char ( M  C* v$ s8 U, z: D4 c
#define uint  unsigned int% k( a/ P# r* u. q0 U2 O/ d5 {- D8 z
, o* R# J& R' a+ M
unsigned char num=0,timecount=0,displayOK=0,rate=0;
+ C% q% s* s% e! F, eunsigned int time[6]={0};
  X/ i( S  M& Q; u5 j
" f* `! D% t! @2 W3 n/***********************1ms延时函数*****************************/% I  _2 P5 O: v6 z. E/ L/ L  N
void delay_1ms(uint q)2 p% [( ~, O4 l: M) S% c/ J0 A: D
{
/ I! m$ V) W$ b- p; M! ^5 W5 F$ y        uint i,j;4 G( U" h1 H/ i- F# t$ L
        for(i=0;i<q;i++)
5 b/ O( w) Y4 G" l% C                for(j=0;j<110;j++);, S3 H- g) t/ j6 R; K
}
6 _! M0 V+ J! q6 O1 y5 P& R& }9 ^
- G: q+ Z6 |9 k3 |
- {, s3 ^2 o9 w4 x6 qvoid main()
0 R2 n( F* {% P/ Y9 X4 U' P3 F{        ( O9 A) k0 w& p5 {/ E& h1 M
        init_1602();; P& e& Z- m# Y1 v9 C/ A" G4 ^
        TCON=0x01;//设置外部中断0- o( Q3 P" c) A0 r" l9 r
                EX0=1;
8 n4 A5 ^% g9 w9 \. H% |                TMOD=0x01;//定时器0初始化
# P0 b5 B$ @) H                TH0=(65536-50650)/256;//实测每50ms中断的定时值
5 \# Y5 w5 V$ B) U: ]- }; n                TL0=(65536-50650)%256;
* S5 {1 x: T& b, \( B                ET0=1;//开定时器中断7 S9 x6 V# q5 `" b# `" l, j7 u9 d
                //显示基本文字7 a; e: v: M7 B/ ?8 J1 i2 O& R
                write_string(1,0,"   Heart Rate   ");
8 L7 P/ F; h4 Y/ e! U                write_string(2,0,"        /min    ");
4 I; I! j3 t1 Q9 ^0 k4 q                TR0=0;//定时器停止
- \7 c) ]& R/ l# k' L/ _. G! r/ U" `$ K                EA=1;//开总中断                    , p- n# M+ Q$ G& S
           while(1)
* q: i1 V! r# T$ r2 L  j           {
: m% M5 X2 y5 l; v
" |1 a9 j8 C: ]; p; I                   if(displayOK==1). w9 k. x6 e9 Y; d; L  c
                   {% o& Q- p- u; J' C& H, j, I" g
                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
. ]: g, {) t4 o                        write_sfm3_18B20(2,5,rate);
* |, {% l7 L1 |# c6 |' X2 r
' b/ C& u! \0 Z, x4 w0 ?                      }        7 _5 n: c5 U& i2 L; G
                        else5 I# p6 T  T! l7 r/ ^: a; H
                        {. R' U9 b) Y# K* k, V4 j0 y
                                     write_string(2,5,"   ");
6 }( x. g4 P0 x& |                        }
) V& [. W- A; D, ]                   delay_1ms(300);
# j* ~- r) {' Z1 z! }5 `1 s
- w$ t+ f' E5 c$ n8 l7 V! P- k8 l  ~) v0 F- W. L: R" i3 J5 k
        }) s4 \" u4 }$ `4 F, [# }
}# U* f: i# |* D6 d. a  ?

' u9 N! H8 ?9 y% a* Evoid ex0() interrupt 0
& [( j6 W: P# w: b$ T{9 e4 U  Z9 P. I2 ~: v4 t# {
                EX0=0;//暂时关外部中断
. D( D3 L& \- v' E                if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理
1 s+ j+ f; g1 X! }$ ?! b                {8 \4 x' N7 c" b( V9 m) [. c' o* P) L7 N
                                TR0=1;//开定时器
- M8 F5 u$ P  L/ T: d' @4 Y% z                }
5 D8 u# j7 Z' V                else( M& x" u2 a) v
                {
" E8 [! ^8 d7 O, a  b+ }                                time[num]=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间
8 J9 U$ {: L; t& _+ X: F1 r                                TL0=(65536-50650)%256;//重新设置定时器8 X: e) G9 R8 p3 D1 p4 ^9 Q% ~
                                TH0=(65536-50650)/256;
3 F" Z- c' D& B; |" x* N* D% r$ T                                timecount=0;//50ms计数清零
9 g) v3 i3 s6 g1 A                                num++;
% z- C4 K; J# H0 j8 X, q! U) t$ C                                if(num==6)//记录到超过等于6次时间
2 D) g% e' M3 Y" u3 k                                {+ f/ M3 |5 d' b  B# a  I& M
                                                num=1;//计数从1开始
& G& P: \  i4 S/ V                                                displayOK=1;    //测得5次开始显示4 B5 B& U) ]% V
                                }          p6 z  K% F/ P( i" u) g' S) a! U. m9 w

8 u, D. ?7 {* Y& T                }" G+ [/ I0 R' S, K
                EX0=1;1 z! Y' U0 Q8 F7 U0 J
}
' |; E# `- q8 O- Avoid et0() interrupt 1' ]6 q9 n$ P2 C8 i. l' t+ C
{% z$ N6 C5 W& B5 ^, ?9 f( X
                TL0=(65536-50650)%256;3 A& v: U7 h- c4 P9 {+ d9 _4 g
                TH0=(65536-50650)/256;/ E# d/ ?% A# a4 ^7 L

# J$ M% X: H8 X8 c4 G! {9 I                timecount++;//每50ms一次计数
( M" G7 W: o9 Z                if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示
/ F0 a* h! W  U7 w2 d                {: }0 ^. I$ G: S  p, ~* Q* w& i
                                num=0;//数据个数清零
$ c% P) U# t. K1 ]% w0 r- j% }5 X+ ~0 {3 C  P6 n
. T; s- J0 D( W5 p% P
…………限于本文篇幅 余下代码请从论坛下载附件…………
: J, }5 Y6 i: l; w+ X6 _
游客,如果您要查看本帖隐藏内容请回复

) F- A1 J# k" N3 {
- N4 L3 F+ `1 D4 U8 c% Y

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 08:27 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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