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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于51单片机的心率脉搏计仿真及源程序
; N/ |3 C( o* \% [$ @7 }) k% O* Y
% j+ O# u  @6 T, n9 u

: n7 H7 G2 S- `0 ]6 ]% x, d8 A心率脉搏计的仿真原理图:
/ L: n+ n3 {1 N3 f, V" i# i

" U6 l3 Q% e; Z: y' w3 l) G#include <reg52.h>- |1 R& ?6 N: z1 a0 c
#include "lcd1602.h"
/ m* j  o% }" g* y5 z) m2 ]6 C% I6 m8 T8 S% L' r
#define uchar unsigned char 5 r; E/ Y0 u+ M( E( [
#define uint  unsigned int
. U' Y5 d; i" r9 r9 h. }- I! v  J! ^/ w* Z
unsigned char num=0,timecount=0,displayOK=0,rate=0;4 _& @# V9 n9 [
unsigned int time[6]={0};# a3 K. y" F; H! v7 x

8 b3 e0 ~6 U& {3 `9 N3 ^% S; M/***********************1ms延时函数*****************************/
* F. e$ M+ @6 d* W8 g+ y: _# L, jvoid delay_1ms(uint q)
5 @2 A7 h" v! b* k{
; @: T/ p# _, ?- {& O        uint i,j;. v% J5 p/ y0 j( \' |) y4 b
        for(i=0;i<q;i++)9 a, |. M3 [/ e/ |: ]% A! T
                for(j=0;j<110;j++);( {6 s! b( K: Z& K& c9 R& `
}$ T( w5 m! Z) R+ B4 T) N

; P. z  d, A. ?. Y! I
! G7 l9 J, u- d# U+ j; B$ ?void main()
' H$ d. _+ q$ f; _, r{        
3 _; m$ P! ^- k8 n        init_1602();' G% U# k5 W! F% n, i, A* B
        TCON=0x01;//设置外部中断0# M, w  m$ J% G% X- j2 _0 j" Y
                EX0=1;
( {% O2 x; D  @" r: o9 g3 o                TMOD=0x01;//定时器0初始化
+ p, _/ {9 R$ I. H2 M4 i3 H                TH0=(65536-50650)/256;//实测每50ms中断的定时值8 b& G0 Y. O# u# n
                TL0=(65536-50650)%256;
, M! }; N* n! x                ET0=1;//开定时器中断) n4 |% H5 r: H  u8 B
                //显示基本文字. q$ w# T3 ^; D7 g
                write_string(1,0,"   Heart Rate   ");3 K/ O) M4 n. e" T+ x/ b; ~9 \
                write_string(2,0,"        /min    ");8 l  q/ ?! `; h) ?" K! r
                TR0=0;//定时器停止
1 b1 o% S0 o2 N9 _# c$ D6 M% f                EA=1;//开总中断                    
6 V5 D* v% w% Q" t" N/ c* K$ _2 p           while(1)
5 x( Y% e0 c9 ?           {8 Y5 ^2 w: E' @7 G. r7 q6 V5 K/ s
8 i3 `! }% @' q9 g9 M
                   if(displayOK==1)
9 w) i8 U6 u+ o                   {
( @0 x- d6 V% ]( c6 e' {                        rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
4 ?2 ?" C$ C9 ^9 u6 K3 u) u                        write_sfm3_18B20(2,5,rate);' H+ R: }7 [. O% H  E
/ @$ f/ E1 Q4 O
                      }        
7 _8 G8 S5 e6 G, d/ p                        else( h& a: r  p1 i9 F  @$ O& }
                        {
2 E$ T& Q0 G9 n- {                                     write_string(2,5,"   ");
3 Y( N; w& ^' R0 H6 e                        }
6 Y' B7 w# H# g                   delay_1ms(300);
& g3 m: Y5 B; M" {$ o( [
% F' G9 ]  A/ b5 `$ U. c
9 L9 ]4 q1 N6 e/ t3 A5 _7 n  d$ s- M        }  _' ^, j$ L$ U1 ^5 E
}
" e  h8 [$ \8 [5 P+ M/ j8 U
+ s: b/ r9 e3 ?$ \  q) Yvoid ex0() interrupt 0
0 d. l4 S9 ~3 Y& q' l- A9 j# R7 u{
  t& X  v" h: N. p' g1 t0 e                EX0=0;//暂时关外部中断( K/ |- r% F; x; V5 P
                if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理) l2 M5 I8 g+ |. J* G/ I
                {6 E9 e3 A. w! n
                                TR0=1;//开定时器" z( t! S2 v( U5 R
                }1 J! e. G( }- ?5 J- b9 m( Q
                else
+ m% n; o. J7 M4 W/ D4 g; E; \8 [                {$ Z6 g7 |( D% M/ ]/ U
                                time[num]=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间
- ~2 _1 w  @$ [: i$ a- @7 \0 b( ~                                TL0=(65536-50650)%256;//重新设置定时器( \. \; k; Z$ N9 K
                                TH0=(65536-50650)/256;
: I, T6 I  V! ~$ I% X" S                                timecount=0;//50ms计数清零5 [. [, ^" W. y
                                num++;
2 R6 w. Y% S  I9 q: q                                if(num==6)//记录到超过等于6次时间& q. P9 W# h8 ]$ y0 G4 O
                                {
3 }* {, R" K1 X7 s8 y& c4 ^1 U! A                                                num=1;//计数从1开始
+ `6 h/ W6 k8 s, X" h4 u! u                                                displayOK=1;    //测得5次开始显示# }! x+ q) S0 ~$ S4 i! @
                                }        ! H8 T4 o( o( E2 C3 z
- Y# D) m# ?, X" F9 }0 v
                }. |# v$ d& w3 k+ z0 A+ u& }* ?/ F, T) `
                EX0=1;
0 H& X- Z! j" X0 F9 S6 Q0 ^' o' C}
) @0 @( F9 N+ G( x& J* x3 J) Xvoid et0() interrupt 1
" _5 y$ N( s$ I9 L  F7 Z- x! J- N{2 S, o" P+ X9 }* P) z; Z
                TL0=(65536-50650)%256;+ C. y/ F2 Q3 f1 L) |8 W) U
                TH0=(65536-50650)/256;7 l1 J* x  @$ _5 r6 e

, `2 t  T" ]# t' k9 S                timecount++;//每50ms一次计数; A3 ?( b( `' |3 r; m$ q( D
                if(timecount>25)     //当超过25*50ms=1.5s没有检测到信号停止显示
$ ]7 }: q' e' S) o3 c' l% p                {* r8 o, i( J" g; a& t6 O% ^
                                num=0;//数据个数清零
8 [9 ~+ _6 N* ]  r- M
% C7 B" X% o, H! ?$ `
& z  u  {  g" p$ m" a- y…………限于本文篇幅 余下代码请从论坛下载附件…………* Q% u! U5 |/ L& |# S
游客,如果您要查看本帖隐藏内容请回复

7 `9 z/ d  y2 I
" A& @* M% q; {

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-15 22:49 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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