|
給大伙分享一個測試成功的基于51單片機的心率脈搏計仿真及源程序
心率計仿真原理圖如下(proteus仿真工程到附件中下載):
0.png (36.32 KB, 下載次數: 61)
下載附件
2017-6-8 22:46 上傳
資料壓縮包:
0.png (48.81 KB, 下載次數: 58)
下載附件
2017-6-8 22:45 上傳
單片機源程序如下:
- #include <reg52.h>
- #include "lcd1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit SPK =P1^7;
- sbit lcdrs=P2^7;
- sbit lcdrw=P2^6 ;
- sbit lcden=P2^5 ;
- unsigned char num=0,timecount=0,displayOK=0,rate=0;
- unsigned int time[6]={0};
- /***********************1ms延時函數*****************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- void main()
- {
- init_1602();
- TCON=0x01;//設置外部中斷0
- EX0=1;
- TMOD=0x01;//定時器0初始化
- TH0=(65536-50650)/256;//實測每50ms中斷的定時值
- TL0=(65536-50650)%256;
- ET0=1;//開定時器中斷
- //顯示基本文字
- write_string(1,0," Heart Rate ");
- write_string(2,0," /min ");
- TR0=0;//定時器停止
- EA=1;//開總中斷
- while(1)
- {
-
- if(displayOK==1)
- {
- rate=60000/(time[1]/5+time[2]/5+time[3]/5+time[4]/5+time[5]/5);
- write_sfm3_18B20(2,5,rate);
- }
- else
- {
- write_string(2,5," ");
- }
- delay_1ms(300);
-
-
- }
- }
- void ex0() interrupt 0
- {
- EX0=0;//暫時關外部中斷
- if(timecount<8) //當連續兩次檢測時間間隔小于8*50ms=400ms不處理
- {
- TR0=1;//開定時器
- }
- else
- {
- time[num]=timecount*50+TH0*0.256+TL0/1000;//算出間隔時間
- TL0=(65536-50650)%256;//重新設置定時器
- TH0=(65536-50650)/256;
- timecount=0;//50ms計數清零
- num++;
- if(num==6)//記錄到超過等于6次時間
- {
- num=1;//計數從1開始
- displayOK=1; //測得5次開始顯示
- }
-
- }
- EX0=1;
- }
- void et0() interrupt 1
- {
- TL0=(65536-50650)%256;
- TH0=(65536-50650)/256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于51單片機的心率脈搏計仿真及源程序.zip
(92.05 KB, 下載次數: 283)
2017-6-8 20:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|