
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>0DelayTime--)
{
for(i=0i<250i++)
}
}
外部电路我不了解,看程序应该是外部中断检测的脉冲,当有外部中断的时候进入处理函数,定时器是50ms产生时机的,那个当两次检测时间小于400ms应该是滤出干扰的,当大于400ms小于900ms进入<=18的处理函数中,进行显示,先弄懂脉搏测量仪的原理,再看程序,希望对你有帮助,有什么问题还可以问我?
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)