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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2694|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

通過光電對管測量脈搏的51單片機(jī)程序設(shè)計

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:668722 發(fā)表于 2019-12-19 21:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
設(shè)計采用STC89C51作為主控芯片,采用ST188光電對管對脈搏信號進(jìn)行采集,再由LM358將信號進(jìn)行放大后由74HC14將方波信號整形后通過單片機(jī)的計數(shù)器進(jìn)行采集,單片機(jī)通過定時器和計數(shù)器的配合使用,準(zhǔn)確的計算出脈搏數(shù)后通過LCD1602進(jìn)行實時顯示脈搏測量信息。當(dāng)沒有在測量時候系統(tǒng)檢測到會自動的停止測量,在下次檢測到脈搏信號后又自動打開。


原理圖如下:



單片機(jī)源程序如下:
  1. /*************************************************************
  2.                       脈搏計

  3. 補(bǔ)充說明:
  4. ***************************************************************/
  5. #include<reg52.h>                //頭文件
  6. #include<INTERRUPT.h>
  7. #include<LCD1602.h>

  8. /************************引腳定義************************/
  9. sbit IN=P3^4;                    //脈搏信號輸入
  10. /********************************************************
  11. 函數(shù)名稱:void display()
  12. 函數(shù)作用:脈搏顯示程序
  13. 參數(shù)說明:
  14. ********************************************************/
  15. void display()
  16. {
  17.         lcd1602_write_character(0,1,"Sphygmus:");  //顯示脈搏數(shù)、【0:表示第1列,1:表示第1行,所有關(guān)于顯示都一樣】
  18.         LCD_disp_char(9,1,ASCII[maibo/100]);
  19.         LCD_disp_char(10,1,ASCII[maibo%100/10]);
  20.         LCD_disp_char(11,1,ASCII[maibo%10]);
  21.         lcd1602_write_character(12,1,"bpm");

  22.         lcd1602_write_character(0,2,"Time:");           //顯示脈搏檢測時間、【0:表示第1列,2:表示第2行,所有關(guān)于顯示都一樣】
  23.         LCD_disp_char(5,2,ASCII[T1_num/1000]);
  24.         LCD_disp_char(6,2,ASCII[T1_num%1000/100]);
  25.         LCD_disp_char(7,2,'s');

  26.         LCD_disp_char(10,2,ASCII[TL0/100]);                   //顯示當(dāng)前檢測到的脈搏數(shù)、【10:表示第11列,2:表示第2行,所有關(guān)于顯示都一樣】
  27.         LCD_disp_char(11,2,ASCII[TL0%100/10]);
  28.         LCD_disp_char(12,2,ASCII[TL0%10]);        
  29.         lcd1602_write_character(13,2,"bpm");
  30. }
  31. /********************************************************
  32. 函數(shù)名稱:void main()
  33. 函數(shù)作用:主函數(shù)
  34. 參數(shù)說明:
  35. ********************************************************/
  36. void main()
  37. {
  38.         T0_init();    //計數(shù)器0、定時器1初始化
  39.         LCD_init();   //LCD1602初始化
  40.         while(1)          //死循環(huán)
  41.         {
  42.                 if(IN==0) //檢測到脈搏信號
  43.                         TR1=1;//自動開啟檢測計算脈搏。定時器1開啟        
  44.                 display();//顯示脈搏相關(guān)信息
  45.                 //計算脈搏
  46.                 if(TL0>=5)//如果采集到5個脈搏信號
  47.                 {
  48.                         TL0=0;//重置脈搏數(shù)量,重新計數(shù)
  49.                         if(T1_num<1000&&T1_num>150)//計算脈搏,條件就是滿足5個脈搏信號用時大于1.5S且小于10S,否者都忽略
  50.                         {
  51.                                 if(T1_num<375)                   //脈搏大于80bmp時采用兩次求和取平均方式提高精度
  52.                                         maibo=(maibo+30000/T1_num)/2;
  53.                                 else                                   //否者,直接計算脈搏
  54.                                         maibo=30000/T1_num;//脈搏=(5/(T1_num/100))*60=30000/T1_num;其中T1_num單位是10毫秒30000/375=80
  55.                         }
  56.                         T1_num=0;//重置計時
  57.                 }
  58.         }
  59. }

  60. #ifndef _INTERRUPT_H_
  61. #define _INTERRUPT_H_
  62. #include<reg52.h>
  63. #include<math.h>
  64. #define uchar unsigned char
  65. #define uint unsigned int
  66. #define MAX 6    //檢測結(jié)束脈搏數(shù)量
  67. /************************引腳定義************************/
  68. sbit IN=P3^2;         //脈搏信號輸入
  69. /************************變量定義************************/
  70. uchar T0_num=0;  //定時計數(shù)變量
  71. uint T0_nums=0;  //計時脈搏時間間隔變量
  72. uchar miao=0;         //測量時間秒鐘
  73. uchar maibos=0;  //最終測量脈搏數(shù)
  74. uchar maibo=0;   //記錄脈搏

  75. uchar T[MAX]={0};//記錄已采集到的脈搏時間間隔
  76. uchar low=0;         //上一次脈搏時間間隔
  77. /*********************************************************
  78. 函數(shù)名稱:void T0_init()
  79. 函數(shù)作用:計數(shù)器0、定時器1初始化函數(shù)
  80. 參數(shù)說明:
  81. *********************************************************/
  82. void T0_init()
  83. {
  84.         EA=1;                  //開總中斷
  85.         TMOD=0x01;             //計數(shù)器0工作工作方式1  
  86.         ET0=1;                 //定時器T0中斷允許         
  87.         TH0=(65536-10000)/256; //定時器T0的高8位賦初值
  88.         TL0=(65536-10000)%256; //定時器T0的低8位賦初值
  89.         TR0=0;                                   //關(guān)閉定時器
  90. }
  91. /*********************************************************
  92. 函數(shù)名稱:void Int0_init()
  93. 函數(shù)作用:外部中斷0初始化函數(shù)
  94. 參數(shù)說明:
  95. *********************************************************/
  96. void Int0_init()
  97. {
  98.         EA=1;                  //開放總中斷         
  99.            IT0=1;                 //選擇負(fù)跳變來觸發(fā)外中斷
  100.         EX0=0;                 //允許使用外中斷         
  101. }
  102. /*********************************************************
  103. 函數(shù)名稱:void T0_interrupt(void) interrupt 1
  104. 函數(shù)作用:定時器1中斷處理函數(shù)
  105. 參數(shù)說明:10毫秒定時中斷一次
  106. *********************************************************/
  107. void T0_interrupt(void) interrupt 1
  108. {                  
  109.         TH0=(65536-10000)/256;//定時器T0的高8位重新賦初值
  110.         TL0=(65536-10000)%256;//定時器T0的低8位重新賦初值
  111.         if(EX0==1)                          //開啟脈搏檢測
  112.         {
  113.                 T0_num++;                  //計數(shù)變量+1
  114.                 if(T0_num>=100)          //100*10ms=1S
  115.                 {
  116.                         T0_num=0;          //重置計數(shù)變量
  117.                         miao++;                  //秒+1
  118.                         if(miao>99)
  119.                                 miao=0;
  120.                 }


  121.                 T0_nums++;            //脈搏時間間隔變量+1
  122.                 if(T0_nums>=500)  //500*10ms=5S
  123.                 {
  124.                         miao=0;              //采集超時,清除所有變量
  125.                         maibo=0;
  126.                         EX0=0;              //關(guān)閉脈搏檢測
  127.                         TR0=0;
  128.                 }
  129.         }     
  130. }
  131. /*********************************************************
  132. 函數(shù)名稱:void init0(void) interrupt 0
  133. 函數(shù)作用:外部中斷0中斷處理函數(shù)
  134. 參數(shù)說明:
  135. *********************************************************/
  136. void init0(void) interrupt 0
  137. {
  138.         uchar i=0;
  139.         uint TS=0;
  140.         if(IN==0&&T0_nums>39)      //再次確認(rèn)感應(yīng),并且距上一次感應(yīng)的時間足夠長,如果過短認(rèn)為是波動放棄處理
復(fù)制代碼

全部資料51hei下載地址:
脈搏計源程序代碼(Keil).zip (125.67 KB, 下載次數(shù): 29)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:729366 發(fā)表于 2020-4-14 22:55 | 只看該作者
proteus里只給單獨一個是非門,怎么組成施密特
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色资源站 | 欧美国产91| 国产精品久久久久久久久久免费看 | 欧美在线视频一区 | 伊人精品在线 | 91在线看 | 亚洲精品免费在线 | 中文在线播放 | 久久久www| 99精品亚洲国产精品久久不卡 | 国产清纯白嫩初高生在线播放视频 | 国产精品永久免费视频 | 亚洲精品视频在线播放 | 伊大人久久 | 在线观看黄色大片 | 亚洲一区二区三区免费观看 | 祝你幸福电影在线观看 | 秋霞在线一区 | 久久久91精品国产一区二区三区 | 久久精品欧美一区二区三区不卡 | 国产精品明星裸体写真集 | 蜜桃免费一区二区三区 | 极品销魂美女一区二区 | 国产一区二区三区久久久久久久久 | 日韩中文字幕视频在线 | 午夜精品一区二区三区在线播放 | 日韩在线不卡 | 中文字幕免费中文 | 国产高清精品在线 | 国产精品欧美一区二区三区不卡 | 久久久噜噜噜www成人网 | 人人爽日日躁夜夜躁尤物 | 一级毛片视频在线观看 | 91久久夜色 | 国产男女猛烈无遮掩视频免费网站 | 高清黄色毛片 | 成人字幕网zmw | 亚洲成人黄色 | 精品亚洲一区二区 | 自拍在线| 欧美日韩在线免费 |