51单片机心率计Proteus仿真图与源程序

[复制链接]
查看2 | 回复0 | 2021-6-25 02:01:29 | 显示全部楼层 |阅读模式
由于仿真中没有红外,手指也模拟不了,其实就是单片机的IO口检测脉冲信号,那样用个方波信号模拟就ok
1.png 2.gif

部分源码:完整见附件
  1. switch (Xintiao_Con)//此处与上面按键的检测类似
  2.   {
  3.    case 0:                         //默认Xintiao_Con是为0的
  4.           {
  5.                    if(!Xintiao)//每10ms(上面的定时器)检测一次脉搏是否有信号
  6.                     {
  7.                          Xintiao_Con++;//如果有信号,变量加一,程序就会往下走了
  8.                         }
  9.                    break;
  10.                   }
  11.    case 1:
  12.           {
  13.                    if(!Xintiao)           //每过10ms检测一下信号是否还存在
  14.                     {
  15.                          Xintiao_Con++;//存在就加一
  16.                         }
  17.                    else
  18.                     {
  19.                          Xintiao_Con=0;//如果不存在了,检测时间很短,说明检测到的不是脉搏信号,可能是其他干扰,将变量清零,跳出此次检测
  20.                         }
  21.                    break;
  22.                   }
  23.   case 2:
  24.           {
  25.                    if(!Xintiao)
  26.                     {
  27.                          Xintiao_Con++;//存在就加一
  28.                         }
  29.                    else
  30.                     {
  31.                          Xintiao_Con=0;//如果不存在了,检测时间很短,说明检测到的不是脉搏信号,可能是其他干扰,将变量清零,跳出此次检测
  32.                         }
  33.                    break;
  34.                   }
  35.   case 3:
  36.           {
  37.                    if(!Xintiao)
  38.                     {
  39.                          Xintiao_Con++;//存在就加一
  40.                         }
  41.                    else
  42.                     {
  43.                          Xintiao_Con=0;//如果不存在了,检测时间很短,说明检测到的不是脉搏信号,可能是其他干扰,将变量清零,跳出此次检测
  44.                         }
  45.                    break;
  46.                   }
  47.   case 4:
  48.           {
  49.                    if(Xintiao)//超过30ms一直有信号,判定此次是脉搏信号,执行以下程序
  50.                     {
  51.                          if(Xintiao_Change==1)//心率计原理为检测两次脉冲间隔时间计算心率,变量Xintiao_Change第一次脉冲时为0的,所有走下面的else,第二次走这里
  52.                           {
  53.                            View_Data[0]=(60000/Xintiao_Jishu)/100+0x30;
  54.                    View_Data[1]=(60000/Xintiao_Jishu)%100/10+0x30;
  55.                    View_Data[2]=(60000/Xintiao_Jishu)%10+0x30;

  56.                            if(((60000/Xintiao_Jishu)>=Xintiao_H)||((60000/Xintiao_Jishu)<=Xintiao_L))//心率不在范围内报警
  57.                             speaker=0;                        //蜂鸣器响
  58.                            else
  59.                             speaker=1;                        //不响

  60.                            View_Change=1;           //计算出心率后启动显示
  61.                            Xintiao_Jishu=0;           //心跳计数清零
  62.                            Xintiao_Change=0;   //计算出心率后该变量清零,准备下次检测心率
  63.                            stop=0;                           //计算出心率后stop清零
  64.                           }
  65.                          else//第一次脉冲时Xintiao_Change为0
  66.                           {
  67.                            Xintiao_Jishu=0;        //脉冲计时变量清零,开始计时
  68.                            Xintiao_Change=1;//Xintiao_Change置1,准备第二次检测到脉冲时计算心率
  69.                           }
  70.                          Xintiao_Con=0;        //清零,准备检测下一次脉冲
  71.                          break;
  72.                         }
  73.                   }
  74.   }
复制代码
心率计程序源码.rar (31.15 KB, 售价: 2 工控币)
心率计protues仿真文件.rar (69.36 KB, 售价: 2 工控币)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则