久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21171|回復: 18
打印 上一主題 下一主題
收起左側

51單片機+ST188光電傳感器心率脈搏檢測程序+電路圖

  [復制鏈接]
跳轉到指定樓層
樓主
使用時把右手食指指肚放在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.                                 
  97.                                 if(displayOK==1)
  98.                                 {
  99.                                                 rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
  100.                                                 LCD_write_char(5,1,rate/100+48);
  101.                                                 LCD_write_char(6,1,(rate%100)/10+48);
  102.                                                 LCD_write_char(7,1,rate%10+48);
  103.                                 }
  104.                                 DelayMs(300);
  105.                 }
  106. }

  107. void ex0() interrupt 0
  108. {
  109.                 EX0=0;//暫時關外部中斷
  110.                 if(timecount<8)   //當連續兩次檢測時間間隔小于8*50ms=400ms不處理
  111.                 {
  112.                                 TR0=1;//開定時器
  113.                 }
  114.                 else
  115.                 {
  116.                                 time[i]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時間
  117.                                 TL0=(65536-50000)%256;//重新設置定時器
  118.                                 TH0=(65536-50000)/256;
  119.                                 timecount=0;//50ms計數清零
  120.                                 i++;
  121.                                 if(i==6)//記錄到超過等于6次時間
  122.                                 {
  123.                                                 i=1;//計數從1開始
  124.                                                 displayOK=1;    //測得5次開始顯示
  125.                                 }        
  126.                                 
  127.                 }
  128.                 EX0=1;
  129. }
  130. void et0() interrupt 1
  131. {
  132.                 TL0=(65536-50000)%256;
  133.                 TH0=(65536-50000)/256;
  134.                         
  135.                 timecount++;//每50ms一次計數
  136.                 if(timecount>25)     //當超過25*50ms=1.25s沒有檢測到信號停止顯示
  137.                 {
  138.                                 i=0;//數據個數清零
  139.                                 timecount=0;//50ms計數清零
  140.                                 displayOK=0;//顯示關
  141.                                 TR0=0;//定時器關
  142.                                 TH0=(65536-50000)/256;
  143.                                 TL0=(65536-50000)%256;
  144.                 }
  145. }
復制代碼

所有資料51hei提供下載:
心率脈搏計源程序.rar (34.39 KB, 下載次數: 400)
心率脈搏計-51-1602.pdf (192.9 KB, 下載次數: 268)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏18 分享淘帖 頂4 踩
回復

使用道具 舉報

沙發
ID:524107 發表于 2019-4-28 23:45 | 只看該作者
樓主,你好,按照你給的原理圖和程序,做出了實物,為什么沒有反應啊?
回復

使用道具 舉報

板凳
ID:524107 發表于 2019-4-28 23:46 | 只看該作者
樓主,你好,按照你給的原理圖和程序,做出了實物,為什么沒有反應?
回復

使用道具 舉報

地板
ID:573032 發表于 2019-6-28 09:25 | 只看該作者
源程序不對啊,下載不行
回復

使用道具 舉報

5#
ID:284488 發表于 2019-6-29 22:28 | 只看該作者
哇!下載后無法打開
回復

使用道具 舉報

6#
ID:328014 發表于 2019-6-30 01:18 | 只看該作者
lon7085 發表于 2019-6-29 22:28
哇!下載后無法打開

您用的什么軟件解壓的?我用winrar最新版貌似沒問題
回復

使用道具 舉報

7#
ID:284488 發表于 2019-6-30 11:30 | 只看該作者
我用7-zip,了,用您說的winrar試看看,謝謝您
回復

使用道具 舉報

8#
ID:69115 發表于 2019-8-14 00:32 | 只看該作者
這個電路挺好,有實用價值.
回復

使用道具 舉報

9#
ID:599701 發表于 2019-8-15 18:34 | 只看該作者
真好 很有實用價值
回復

使用道具 舉報

10#
ID:616026 發表于 2019-9-25 13:55 | 只看該作者
可以呀,謝謝啦
回復

使用道具 舉報

11#
ID:571461 發表于 2019-12-24 08:45 | 只看該作者
if(displayOK==1)
                                {
                                                rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
                                                LCD_write_char(5,1,rate/100+48);
                                                LCD_write_char(6,1,(rate%100)/10+48);
                                                LCD_write_char(7,1,rate%10+48);
                                }我不太懂這一點的程序的運算是怎么出來的
回復

使用道具 舉報

12#
ID:651495 發表于 2019-12-27 10:02 來自手機 | 只看該作者
你好,這大概測一次需要多久呢
回復

使用道具 舉報

13#
ID:651495 發表于 2019-12-28 10:10 來自手機 | 只看該作者
xiexugang 發表于 2019-8-14 00:32
這個電路挺好,有實用價值.

你好,請問資料能分享一份么,上面的不能用了
回復

使用道具 舉報

14#
ID:525137 發表于 2020-3-8 18:55 | 只看該作者
你好樓主st188不是非接觸嗎,為啥要接觸,檢測距離4-13mm
回復

使用道具 舉報

15#
ID:705967 發表于 2020-3-21 21:13 | 只看該作者
非常詳細。適合學習
回復

使用道具 舉報

16#
ID:705967 發表于 2020-4-5 20:37 | 只看該作者
您好,里面有仿真電路圖嗎
回復

使用道具 舉報

17#
ID:891632 發表于 2021-3-25 14:59 | 只看該作者
你好,為什么心率計算的時候需要+48呢?
回復

使用道具 舉報

18#
ID:891632 發表于 2021-3-25 14:59 | 只看該作者
你好,為什么心率計算要加48呢?
回復

使用道具 舉報

19#
ID:905400 發表于 2021-4-14 10:10 | 只看該作者
這里面的電容是點解電容嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频一区 | 91视频播放| 国产ts一区 | 国产 日韩 欧美 在线 | 91av视频在线观看 | 欧美一级久久 | 成年人网站在线观看视频 | www国产精| 99精彩视频 | 成人一级毛片 | 国产视频中文字幕在线观看 | 亚洲精品一区二区 | 国内精品视频在线观看 | 久久九精品 | 精品蜜桃一区二区三区 | 午夜视频一区二区 | 91大神在线资源观看无广告 | 亚洲福利在线视频 | 国产精品永久免费 | 午夜视频一区 | 99久热| 91在线色视频 | www九色| 欧美精品国产精品 | 在线观看日韩 | a看片| 日本在线视频不卡 | 久久久xxx| 国产欧美精品在线观看 | 国产精品久久久久久一区二区三区 | 中文字幕高清一区 | 国产有码 | 国产wwwcom| 人人干人人舔 | 欧美精品欧美精品系列 | 欧美日韩在线成人 | 一区精品在线观看 | 国产视频一区二区三区四区五区 | 亚洲区一区二 | 欧美精品一二三区 | 亚洲国产一区二区视频 |