51单片机脉搏测量仪电路图和源程序

51单片机脉搏测量仪电路图和源程序 

51单片机脉搏测量仪电路图和源程序

脉搏测量仪的源程序

#include

unsigned char i,j,t,m,DelayTime,DispBuf[3];

//单片机脉搏测量仪源程序

//作者:吴汉清

unsigned int n,mb;

unsigned char code

BitTab[3]={0xf7,0xef,0xdf};//位驱动码

unsigned char code

DispTab[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//字形码

sbit P3_0=P3^0;

void delay(DelayTime);

main() //主程序

{

TMOD=0x01; //定时器T0工作于方式1

TH0=0xec;

TL0=0x78; //T0定时时间为5ms

IE=0X83; //开中断

IT0=1; //外部中断0为边沿触发方式

TR0=1; //开定时器T0

for(;;) //脉搏指示灯控制

{

if(P3_0==0)

{

delay(200);

P3_0=1;

}

}

}

external0() interrupt 0//外部中断服务程序

{

P3_0=0; //点亮指示灯

if(n==0)

mb=0;

else

mb=12000/n; //计算每分钟脉搏数

DispBuf[2]=mb%10;//取个位数

mb=mb/10;

DispBuf[1]=mb%10;//取十位数

DispBuf[0]=mb/10;//取百位数

n=0;

}

Timer0() interrupt 1//定时中断服务程序

{

TH0=0xec;

TL0=0x78;

t=BitTab[j];//取位值

P3=P3|0x38;//P3.3-P3.5送1

P3=P3&t; //P3.3-P3.5输出取出的位值

t=DispBuf[j];//取出待显示的数

t=DispTab[t];//取字形码

P1=t; //字型码由P3输出显示

j++; //j作为数码管的计数器,取值0-2,显示程序通过它确认显示哪个数码管

if(j==3)

j=0;

n++;

if(n==2000)//10秒钟测不到心率,n复位

n=0;

}

void delay(DelayTime)//延时子程序

{

for(;DelayTime>0;DelayTime--)

{

for(i=0;i

;

}

}