找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8807|回复: 7
打印 上一主题 下一主题
收起左侧

51单片机心率脉搏计检测系统电路+程序设计

  [复制链接]
跳转到指定楼层
楼主
1.功能原理
       脉搏传感器采样脉搏信号,采用STC89C51单片机作为控制器,脉搏传感器输出方波传入单片机,触发单片机进去外部中断函数,每接收一个脉冲波形,显示屏就计数一次。如果脉搏次数超过设定值是,用蜂鸣器报警提示


2.硬件设计
(1)总体硬件框图


(2)心率检测电路原理
      心率检测电路是以红外反射式传感器ST188为检测原件,并利用单片机系统内部定时器来计算时间。

心率检测处理电路
    此电路采用两级运算放大电路,一级放大倍数为可调,二级放大倍数固定为2。当红外反射式传感器ST188感应到一个完整的脉搏,便产生一个脉冲,单片机通过对脉冲累加得到脉搏心率跳动次数,并使用定时器计数脉搏的频率。系统运行中能显示脉搏心率次数和时间,系统停止运行时,能够显示总的脉搏心率次数和时间。
(3)其他硬件电路
       除了主要的心率检测电路外,还包括单片机最小系统、LCD1602显示屏电路、蜂鸣器报警电路。因为这几个电路比较常用,就省略不介绍了。

3.程序设计
(1)LCD1602驱动程序

sbit RS = P2^5;//Pin4
sbit RW = P2^6; //Pin5
sbit E  = P2^7;//Pin6

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar data TimeNum[]="                ";
uchar data Test1[]="                  ";
void DelayUs(unsigned char us)//delay us
{
     unsigned char uscnt;
     uscnt=us>>1;/* Crystal frequency in 12MHz*/
     while(--uscnt);
}
  

/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
    while(--ms)
   {
         DelayUs(250);
         DelayUs(250);
         DelayUs(250);
         DelayUs(250);
   }
}
void WriteCommand(unsigned char c)
{
     DelayMs(5);//short delay before operation
     E=0;
     RS=0;
     RW=0;
     _nop_();
     E=1;
     P1=c;
     E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
    DelayMs(5);   //short delay before operation
    E=0;
    RS=1;
    RW=0;
    _nop_();
    E=1;
    P1=c;
    E=0;
    RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
    unsigned char p;
    if (pos>=0x10)
        p=pos+0xb0; //是第二行则命令代码高4位为0xc
    else
        p=pos+0x80; //是第二行则命令代码高4位为0x8
    WriteCommand (p);//write command
    WriteData (c);   //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
   unsigned char l,i;
   l=line<<4;
   for (i=0;i<16;i++)
       ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
    DelayMs(15);
    WriteCommand(0x38); //display mode
    WriteCommand(0x38); //display mode
    WriteCommand(0x38); //display mode
    WriteCommand(0x06); //显示光标移动位置
    WriteCommand(0x0c); //显示开及光标设置
    WriteCommand(0x01); //显示清屏

}


(2)脉搏检测处理程序

unsigned int i,n,ci,dd[11],jj,j,k,tmp;
bit w=0;
uchar bh;
ulong time;
sbit spd = P2^0;

external0() interrupt 0//外部中断服务程序
{
          w=~w;
        if(w==0)
        {
              EX0=0;
              ET0=1;
              TH0=0x0;
              TL0=0x0;
              n=0;
        }
        else
        {
                time=n*65536+TH0*256+TL0;
                dd[jj]=30000000/time;        //计算脉搏时间
                jj++;
                if(jj>10)
                {
                   jj=0;
                   for(j=0;j<11;j++)
                      for(k=0;k<11-j;k++)
                      {
                            if(dd[k]>dd[k+1])
                            {
                                 tmp=dd[k];
                                 dd[k]=dd[k+1];
                                 dd[k+1]=tmp;
                            }                        
                      }
                      if(dd[5]>50&&dd[5]<200)ci=((dd[4]+dd[5]+dd[6])/3)+11;
                  }
                 TH0=0x0;
                 TL0=0x0;
                 n=0;
           }
}
void timer0(void) interrupt 1
{
     n++;
}

(3)主函数


void main(void)
{
        InitLcd();//
        DelayMs(15);
        IT0=1;     //INT0下降沿中断
        EX0=1;     //允许INT1中断
        TMOD=0x1;
        TH0=0x0;
        TL0=0x0;
        TR0=1;
        ET0=1;
        EA=1;

        while(1)
        {
                 if(n>10)
                 {
                         n=0;         
                         jj=0;
                         ci=0;
                                         TimeNum[0]='N';
                                         TimeNum[1]='O' ;
                                 TimeNum[2]=' ' ;
                                 TimeNum[3]='I' ;        
                                 TimeNum[4]='N' ;
                         TimeNum[5]='P' ;
                         TimeNum[6]='U' ;
                         TimeNum[7]='T' ;
                         TimeNum[8]=' ' ;
                         ShowString(0,TimeNum);
                                 ShowString(1,Test1);
                        }
                        else        
                        {
                                if(w==0&&EX0==0)
                                {
                                        delay();
                                        EX0=1;
                                }  

                                TimeNum[0]=' ';
                                TimeNum[1]=' ' ;
                                TimeNum[2]=' ' ;
                                TimeNum[3]=' ' ;        
                                TimeNum[4]=' ' ;         
                                TimeNum[5]=' ' ;
                                if(ci/100>0)TimeNum[6]=ci/100+'0' ; else TimeNum[6]=' ' ;
                                if(ci/100==0&&ci%100/10>0)TimeNum[7]=ci%100/10+'0' ; else TimeNum[7]=' ' ;
                                TimeNum[8]=ci%10+'0' ;
                                ShowString(0,TimeNum);
                                ShowString(1,Test1);
                                if(ci>100)spd=0;else spd=1;
                        }
                }
        ;
}


源码+AD电路图 下载:
心率脉搏仪.rar (127.54 KB, 下载次数: 255)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:529245 发表于 2019-5-7 09:43 | 只看该作者
不错,谢谢啊
回复

使用道具 举报

板凳
ID:531957 发表于 2019-5-9 21:23 | 只看该作者
感谢分享,谢谢楼主。
回复

使用道具 举报

地板
ID:531957 发表于 2019-5-9 21:46 | 只看该作者
谢谢楼主分享,正好能用到。
回复

使用道具 举报

5#
ID:786036 发表于 2020-6-21 20:27 | 只看该作者
楼楼,这个文件夹打开好多文件,有的类型我识别不了,想请教一下该如何用。拜托了感谢
回复

使用道具 举报

6#
ID:375637 发表于 2021-4-8 11:46 | 只看该作者
这个运放器用的是什么型号?
回复

使用道具 举报

7#
ID:538517 发表于 2021-4-10 00:58 来自手机 | 只看该作者
谢谢楼主,正好可以好好学习一下。
回复

使用道具 举报

8#
ID:907958 发表于 2021-4-20 11:14 | 只看该作者
如果把LCD1602换成LCD12864如何改变他的源码,求教大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表