#include <reg51.h>
unsigned char i,j,t,m,DelayTime,DispBuf[3];
unsigned int n,mb;
unsigned char code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码
unsigned char Disp_Buffer[]={0,0,0};
unsigned char code DSY_BIT[]={0x01,0x02,0x04};//位选
sbit K1=P1^0;
void Delay(unsigned char x) //延时函数
{
unsigned char i;
while(x--)for(i=0;i<100;i++);
}
main()
{ unsigned char i;
TMOD=0x01; 定时器0工作方式一
IE=0X83;
TH0=0xec; 定时器0定时5ms
TL0=0x78;
IT0=1; //下降沿出发
while(1)
{
if(K1==0) //按键按下后开始进行测试
{Delay(10);
if(K1==0)
{
TR0=1; //按键按下后定时器0开始
}
}
else
{for(i=0;i<3;i++)
{
P2=DSY_BIT[i];
P0=DSY_CODE[Disp_Buffer[i]];
Delay(2);
}
}
}
}
external0() interrupt 0
{
if(n==0)
mb=0;
else
mb=12000/n; //计算每分钟脉搏数
Disp_Buffer[0]=mb%10;
mb=mb/10;
Disp_Buffer[1]=mb%10;
Disp_Buffer[2]=mb/10;
n=0;
}
Timer0() interrupt 1
{ TH0=0xec; TL0=0x78; 定时5ms
n++;
if(n==2000) // 10s测不到,n复位
n=0;
}
通过测量两个脉搏的下降沿间隔时间 取倒数来计算一分钟的脉搏跳动次数,求大神帮我看看这个程序问题出在哪里了 帮我改改
|