原文地址::http://www.51hei.com/bbs/dpj-156743-1.html

相关文章

1、ST188----https://wenku.baidu.com/view/e31e9c956bec0975f465e258.html

使用时把右手食指指肚放在st188反射式红外传感器上,放置合适时会看到指示灯随心跳同时闪动,如果没有闪烁请适当调节手指压力,调节完后在测试过程中手指压力不要变,保持稳定,当指示灯有规律闪烁时表示信号正确。当单片机检测到大约第五次信号时开始显示这五次信号算出的平均心率。当超过大约1.5秒没有检测到信号,清除心率。
如果手指抖动或者不稳定会看到指示灯乱闪,这样测得的数据不准,在测试过程中保持稳定!

1:初始化液晶和定时器
2:检测外部中断,并记录中断时间间隔
3:当有超过5个符合要求的时间记录,算出5个时间的平均值和对应的60s的心率并显示
4:当超过1.5s没有检测到中断发生停止显示
2-3-4循环

电路原理图如下:

单片机源程序如下:

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit rs=P1^0;                             //数据与命令选择控制引脚
  5. sbit rw=P1^1;                                 //读与写选择控制引脚
  6. sbit en=P1^2;                                 //使能择控制引脚
  7. sbit bf=P0^7;                                 //忙标志位
  8. sbit P32=P3^2;
  9. unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
  10. unsigned int time[6]={0};
  11. /************ 延时函数  *****************/
  12. void delay(uint z)
  13. {
  14. while(z--);
  15. }
  16. /************ 忙检测函数  *****************/
  17. void jiance()
  18. {
  19. P0=0xff;
  20. rs=0;rw=1;en=1;
  21. while(bf);                        //如果BF==1表示液晶在忙
  22. en=0;
  23. }
  24. /************ 写命令函数  *****************/
  25. void write_com(uchar com)
  26. {
  27. jiance();
  28. P0=com;
  29. rs=0;rw=0;en=1;
  30. delay(2);
  31. en=0;
  32. }
  33. /************ 写数据函数  *****************/
  34. void write_dat(uchar dat)
  35. {
  36. jiance();
  37. P0=dat;
  38. rs=1;rw=0;en=1;
  39. delay(2);
  40. en=0;
  41. }
  42. /************ 1602液晶初始化函数  *****************/
  43. void init_lcd()
  44. {
  45. write_com(0x38);           // 设置16*2显示,5*7点阵,8位数据接口
  46. write_com(0x0c);           // 开显示,不显示光标
  47. write_com(0x06);           // 地址加1,当写入数据的时候光标右移
  48. write_com(0x01);           //清屏
  49. }
  50. /******************************************************************/
  51. /*                   在指定位置写字符                                 */
  52. /******************************************************************/
  53. void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data)
  54. {
  55. if (y == 0)
  56. write_com(0x80 + x);
  57. else
  58. write_com(0xC0 + x);
  59. write_dat(Data);
  60. }
  61. void DelayMs(unsigned int z)
  62. {
  63. unsigned int x;
  64. for(;z>0;z--)
  65. for(x=110;x>0;x--);
  66. }
  67. void main()
  68. {
  69. P32=1;
  70. init_lcd();//lcd初始化
  71. TCON=0x01;//设置外部中断0
  72. EX0=1;
  73. TMOD=0x01;//定时器0初始化
  74. TH0=(65536-50000)/256;//实测每50ms中断的定时值
  75. TL0=(65536-50000)%256;
  76. ET0=1;//开定时器中断
  77. //显示基本文字
  78. LCD_write_char(3,0,'H');
  79. LCD_write_char(4,0,'e');
  80. LCD_write_char(5,0,'a');
  81. LCD_write_char(6,0,'r');
  82. LCD_write_char(7,0,'t');
  83. LCD_write_char(8,0,' ');
  84. LCD_write_char(9,0,'R');
  85. LCD_write_char(10,0,'a');
  86. LCD_write_char(11,0,'t');
  87. LCD_write_char(12,0,'e');
  88. LCD_write_char(8,1,'/');
  89. LCD_write_char(9,1,'m');
  90. LCD_write_char(10,1,'i');
  91. LCD_write_char(11,1,'n');
  92. TR0=0;//定时器停止
  93. EA=1;//开总中断
  94. while(1)
  95. {
  96. if(displayOK==1)
  97. {
  98. rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  99. LCD_write_char(5,1,rate/100+48);
  100. LCD_write_char(6,1,(rate%100)/10+48);
  101. LCD_write_char(7,1,rate%10+48);
  102. }
  103. DelayMs(300);
  104. }
  105. }
  106. void ex0() interrupt 0
  107. {
  108. EX0=0;//暂时关外部中断
  109. if(timecount<8)   //当连续两次检测时间间隔小于8*50ms=400ms不处理
  110. {
  111. TR0=1;//开定时器
  112. }
  113. else
  114. {
  115. time[i]=timecount*50+TH0*0.256+TL0/1000;//算出间隔时间
  116. TL0=(65536-50000)%256;//重新设置定时器
  117. TH0=(65536-50000)/256;
  118. timecount=0;//50ms计数清零
  119. i++;
  120. if(i==6)//记录到超过等于6次时间
  121. {
  122. i=1;//计数从1开始
  123. displayOK=1;    //测得5次开始显示
  124. }
  125. }
  126. EX0=1;
  127. }
  128. void et0() interrupt 1
  129. {
  130. TL0=(65536-50000)%256;
  131. TH0=(65536-50000)/256;
  132. timecount++;//每50ms一次计数
  133. if(timecount>25)     //当超过25*50ms=1.25s没有检测到信号停止显示
  134. {
  135. i=0;//数据个数清零
  136. timecount=0;//50ms计数清零
  137. displayOK=0;//显示关
  138. TR0=0;//定时器关
  139. TH0=(65536-50000)/256;
  140. TL0=(65536-50000)%256;
  141. }
  142. }

复制代码

所有资料51hei提供下载:
 心率脉搏计源程序.rar (34.39 KB, 下载次数: 202)

51单片机+ST188光电传感器心率脉搏检测程序+电路图相关推荐

  1. 基于单片机的测量心率脉搏健康系统设计与

    基于单片机的测量心率脉搏健康系统设计与摘 要 日常生活中许许多多的恶习例如熬夜.用餐不规律等,会给我们的身体带来很大的损伤,现在越来越多人们的身体指标只能达到亚健康,身体健康问题不容小觑.因此测量心率 ...

  2. 51单片机与LCD1602接口电路与程序

    51单片机与LCD1602接口电路与程序 一.工作方式:间接工作方式. 二.实现功能:显示"Hope the epidemic will pass soon". 三.仿真电路图: ...

  3. 基于51单片机数字电压表的设计 仿真、程序、原理图(转发)

    摘 要 数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示.而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编 ...

  4. 51单片机8通道自动温度检测系统仿真+ Proteus仿真

    51单片机8通道自动温度检测系统仿真+ Proteus仿真 Proteus仿真 程序代码(汇编代码,格式为.asm) 导入方式: CLR P3.7 MAIN:MOV 38H,#00HMOV 39H,# ...

  5. 基于51单片机CO一氧化碳可燃气体浓度检测超限报警Proteus仿真

    资料编号:160   下面是相关功能视频演示: 160-基于51单片机CO一氧化碳可燃气体浓度检测超限报警Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为CPU,ADC083 ...

  6. 基于51单片机的公交车安全智能检测系统、基于51单片机的金属探测仪控制设计、基于单片机的智能电子密码锁系统设计、基于51单片机酒精浓度检测仪设计【资料转发分享】

    630基于51单片机的公交车安全智能检测系统-设计资料 本资料是基于单片机的公交车安全监测系统 具有如下功能: 1.监测环境的温度,超标报警.可以设置上下限 2.监测是否有火灾以及有毒气体,超标报警, ...

  7. 基于51单片机的人体红外震动检测家庭防盗报警器

    资料编号:129  下面是相关功能视频演示: 129-基于51单片机的人体红外震动检测家庭防盗报警器(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控,LCD1602显示当前的状态,采用按键 ...

  8. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序

    51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15   来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...

  9. c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序

    当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知   来源:山涧一溪流   点击数:-  更新时间:2014年06 ...

最新文章

  1. FineUI小技巧(4)关闭窗体那些事
  2. 超燃开学演讲:不读书不吃苦,你要青春干嘛
  3. 客官,.NETCore无代码侵入的模型验证了解下
  4. python 爬取全量百度POI
  5. [JS] 001_JavaScript基础增强
  6. 6-3 断言与防御式编程
  7. 递归算法在生成树型结构中,几乎完全属于无稽的算法
  8. 使用javascript实现html页面直接下载网盘文件
  9. 谁先看到苏神咬人? 世界杯直播背后的云
  10. linux 生成p12证书,Linux下使用openssl制作CA及证书颁发
  11. 如何快速成为数据分析师
  12. 嵇少峰:互联网金融草根时代终结
  13. 0930 视频边下边播/蓝牙库/阿里博客/afnetworking详细/小程序工具
  14. C#窗体调用地图(高德地图)-实现公交线路查询
  15. 如何彻底删除打印机驱动程序
  16. 阿里云云原生数据湖体系全解读——元原生数据湖体系
  17. java02win7x64_Win 7 64位下jdk(java)1.8.X(64位)的经验
  18. Unity Shader -描边(后期处理)
  19. APP被苹果App Store拒绝的79个原因(未完待续)
  20. [Vue][面试]谈谈你对MVC、MVP和MVVM的理解

热门文章

  1. Android——“i 分享”APP开发Day06
  2. Elastic认证特训营 难点解读02——如何提高某个字段的评分?
  3. 树莓派与Android端APP进行有线通信并实现控制与反馈
  4. c++ 的map、iterator用法
  5. 模仿学习与强化学习的结合(原理讲解与ML-Agents实现)
  6. 2019年伯克利大学 CS294-112《深度强化学习》第2讲:监督学习和模仿学习(笔记)
  7. 高能预警!10大手机厂商将合力开启下一场流量争夺战
  8. html 按钮调用javascript,如何使html按钮调用外部javascript绘图功能
  9. promise异步编程 详解
  10. excel2016html,如何在excel2016表格中创建超链接?