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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4348|回復: 1
收起左側

51單片機簡單心率計源程序 紅外對管檢測脈搏跳變

[復制鏈接]
ID:198134 發表于 2017-5-8 23:26 | 顯示全部樓層 |閱讀模式
51單片機測心率。紅外對管檢測脈搏跳變
  1. #include "reg52.h"

  2. typedef unsigned char BYTE;
  3. typedef unsigned int WORD;

  4. //-----------------------------------------------

  5. /* define constants */
  6. #define FOSC  11059200L
  7.                         
  8. #define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode

  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. sbit dula=P2^6;
  12. sbit wela=P2^7;
  13. /* define SFR */
  14. sbit LED = P1^0;               //work LED, flash once per second
  15. sbit LED2 = P1^1;   
  16. sbit heart = P3^2;  
  17. WORD Heart_num =0 ; //心率計時
  18. bit UP_FLAG = 0;
  19. float pp=0;
  20. /*------------------------------------------------
  21.                    函數聲明
  22. ------------------------------------------------*/
  23. void SendByte(unsigned char dat);
  24. void SendStr(unsigned char *s);


  25. /*數碼管*/
  26. uchar code table[]={
  27. 0x3f,0x06,0x5b,0x4f,
  28. 0x66,0x6d,0x7d,0x07,
  29. 0x7f,0x6f,0x77,0x7c,
  30. 0x39,0x5e,0x79,0x7};
  31. void delayms(uint);
  32. void dis(uchar shi,uchar ge)
  33. {
  34.       dula=1;
  35.           P0=table[shi];
  36.           dula=0;
  37.           P0=0xff;
  38.           wela=1;
  39.           P0=0xef;
  40.           wela=0;
  41.           delayms(5);
  42.           dula=1;
  43.           P0=table[ge];
  44.           dula=0;
  45.           P0=0xff;
  46.           wela=1;
  47.           P0=0xdf;
  48.           wela=0;
  49.           delayms(5) ;
  50.           }
  51.             void delayms(uint xms)
  52.           {
  53.             uint i,j;
  54.                 for(i=xms;i>0;i--)
  55.                 for(j=110;j>0;j--);
  56.                 }
  57. /*------------------------------------------------
  58.                     串口初始化
  59. ------------------------------------------------*/
  60. /*
  61. void InitUART  (void)
  62. {
  63.     SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
  64.     TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重裝
  65.     TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
  66.     TR1   = 1;                  // TR1:  timer 1 打開                        
  67.     EA    = 1;                  //打開總中斷
  68. }
  69. */
  70. //-----------------------------------------------

  71. /* main program */
  72. void main()
  73. {
  74.          uchar a,b;
  75.         unsigned int dum=0 ;
  76. unsigned int sum = 0,num =0;
  77.     IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
  78.     EX0 = 1;                        //enable INT0 interrupt

  79.     TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
  80.     TL0 = T1MS;                     //initial timer0 low byte
  81.     TH0 = T1MS >> 8;                //initial timer0 high byte
  82.     TR0 = 0;                        //timer0 start running
  83.     ET0 = 1;                        //enable timer0 interrupt
  84.     EA = 1;                         //open global interrupt switch

  85. //        InitUART();
  86.     while (1)                       //loop
  87.            {
  88.                 if(Heart_num >= 500)//過濾高頻干擾        超過120HZ不開中斷
  89.                 {
  90.                         EX0 = 1;                     //enable INT0 interrupt
  91.                     if(Heart_num >=1500)//超時          低于40HZ
  92.                         {
  93.                                 TL0 = T1MS;                     //reload timer0 low byte
  94.                                 TH0 = T1MS >> 8;                //reload timer0 high byte
  95.                                 TR0 = 0;
  96.                                 Heart_num=0;
  97.                                 UP_FLAG = 0;         
  98.                                 num =0;        
  99.                                 sum = 0;
  100.                         }           
  101.                 }
  102.                 if(UP_FLAG == 1)//監測成功
  103.                 {
  104.                     num++;
  105.                     sum+= Heart_num;
  106.                         UP_FLAG = 0;
  107.                         if(num == 8) //采樣8次
  108.                         {        LED2= ~LED2;      
  109.                                 sum = sum>>3;
  110.                                 pp=1000.0/sum        ;
  111.                                 pp =pp*60;
  112.                                 sum = (unsigned int)pp;
  113.                                 dum=sum        ;
  114.                                 num =0;
  115.                                 
  116.                                 //SendByte (sum >>8);
  117.                             //SendByte (sum);
  118.                                 sum = 0;                 
  119.                         }
  120.                         
  121.                 }
  122.                             a=dum/10;
  123.                     b=dum%10;
  124.                     dis(a,b);

  125.         }
  126. }
  127. //External interrupt0 service routine
  128. void exint0() interrupt 0           //(location at 0003H)
  129. {
  130. static bit UP =0 ;
  131.     if(UP==0)
  132.     {
  133.                 TL0 = T1MS;                     //reload timer0 low byte
  134.                 TH0 = T1MS >> 8;                //reload timer0 high byte
  135.                 Heart_num =0;
  136.             TR0 = 1;
  137.                 EX0 = 0;//關閉中斷響應
  138.                 UP_FLAG = 0;
  139.                 UP=1;
  140.                 LED = 0;
  141.         }
  142.         else
  143.         {
  144.                 TL0 = T1MS;                     //reload timer0 low byte
  145.                 TH0 = T1MS >> 8;                //reload timer0 high byte
  146.             TR0 = 0;
  147.                 EX0 = 1;//中斷響應
  148.                 UP=0;
  149.                 UP_FLAG = 1;         
  150.                 LED = 1;        
  151.         }

  152. }
  153. // Timer0 interrupt routine  1ms
  154. void tm0_isr() interrupt 1 using 1
  155. {
  156.         TL0 = T1MS;                     //reload timer0 low byte
  157.         TH0 = T1MS >> 8;                //reload timer0 high byte
  158.     Heart_num ++;
  159. }
  160. /*------------------------------------------------
  161.                     發送一個字節
  162. ------------------------------------------------*/
  163. /*void SendByte(unsigned char dat)
  164. {
  165. SBUF = dat;
  166. while(!TI);
  167.       TI = 0;
  168. }*/
  169. /*------------------------------------------------
  170.                     發送一個字符串
  171. ------------------------------------------------*/
  172. /*void SendStr(unsigned char *s)
  173. {
  174. while(*s!='\0')// \0 表示字符串結束標志,
  175.                 //通過檢測是否字符串末尾
  176.   {
  177.   SendByte(*s);
  178.   s++;
  179.   }
  180. }*/


復制代碼











回復

使用道具 舉報

ID:194705 發表于 2017-5-10 21:02 | 顯示全部樓層
有脈搏傳感器部分電路資料嗎?求分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人高清 | 国产精品免费一区二区三区四区 | 人操人人 | 久久网一区二区 | 最新中文字幕在线 | 亚洲在线免费 | 久久国产精品久久国产精品 | 午夜精品网站 | 久久精品中文字幕 | 成人在线观看网站 | 亚洲成人免费av | 日本一区二区三区四区 | 久久夜视频 | 欧美色成人 | 成人免费毛片在线观看 | 午夜精品网站 | h在线播放 | 亚洲a视频| 日本a在线 | 欧美xxxx黑人又粗又长 | 成人免费网站在线 | 欧美精品中文字幕久久二区 | 在线欧美一区 | 在线国产99 | 成人高清在线视频 | 日韩欧美国产一区二区三区 | 欧美日韩电影一区二区 | 欧美成人精品一区二区男人看 | 亚洲伊人a | 一区在线免费视频 | 一区二区不卡 | 日韩a| 在线视频一区二区 | 国产不卡在线观看 | 久久精彩视频 | 99精品久久久久 | 久久大陆 | 国产又色又爽又黄又免费 | 成人午夜影院 | 午夜激情一区 | 综合久久av |