打印
[51单片机]

心率测量程序求解???

[复制链接]
1257|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llggo|  楼主 | 2014-4-25 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define uchar   unsigned char
#define uint        unsigned int
uint  i=0;       
uchar        ge, shi, bai;
uint        count=777;                //脉搏次数

uint        t;
uchar code disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit        PA=P0^0;
sbit        PB=P0^1;
sbit        PC=P0^2;
sbit        wela=P3^6;
sbit        BELL=P0^3;
sbit        key=P2^4;
uchar  LedOut[3];       
sbit        P3_2=P3^2;


//INT0中断函数
void INT_0() interrupt 0
{
        count++;
}//延时函数
void Delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}


//显示函数
void display(uchar bai,uchar shi,uchar ge)
{               
wela=1;
                P1=disp[bai];
                wela=0;
                P2=0xfb;
                Delayms(5);
                  
                wela=1;
                P1=disp[shi];
                wela=0;
                P2=0xfd;
                Delayms(5);
                wela=1;
                P1=disp[ge];
                wela=0;
                P2=0xfe;
                Delayms(5);

}




//T0中断函数
void T0_timer() interrupt 1
{
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        t++;
        if(t==12000)
        {        t=0;
                EA=0;
                if(count<60)
                 {
                         PA=0;
                        BELL=0;
                       
                 }
                 else if(count>120)
                 {
                         PB=0;
                        BELL=0;
                       
                 }
         else
                 PC=0;
                EA=1;
                TR0=0;
                ET0=0;
                EX0=0;
       
}
   }
//T1中断函数
void T1_timer() interrupt 3
{
    TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        bai=count/100;
        shi=(count%100)/10;
         ge=(count%100)%10;
          display(bai,shi,ge) ;
         }

//初始化函数
void init()
{
        t=0;
        TMOD=0x11;
        TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
       
        EA=1;
        ET1=1;
        TR1=1;
        ET0=1;
        TR0=1;
        IT0=1;
        EX0=0;
       
}

//键盘处理函数
void keyscan()
{
        if(key==0)
        {
                Delayms(10);
                if(key==0)
                {
                        init();
                        EX0=1;
                        count=0;
                        wela=0;
                       
                        BELL=1;
                    P0=0xff;
                }
                while(!key);
        }
}
//主程序
void main()
{
        init();
        TR0=0;
        ET0=0;
        EX0=0;
        while(1)
        {
                keyscan();
        }
}

#include<reg51.h>
#include<intrins.h>
#define uchar   unsigned char
#define uint        unsigned int
uchar        i=0xfe;                //显示位选初值
uchar        ge, shi, bai;
uint        count=0;                //脉搏次数
uint        t;
uchar        disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit        PA=P0^0;
sbit        PB=P0^1;
sbit        PC=P0^2;
sbit        key=P2^4;
sbit        BELL=P0^3;
sbit        P3_2=P3^2;

//延时函数
void Delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}

//显示函数
void display(uchar i,uchar number)
{
        P2=i;
        P1=disp[number];
}

//INT0中断函数
void INT_0() interrupt 0
{
        count++;
}

//T0中断函数
void T0_timer() interrupt 1
{
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        t++;
        if(t==12000)
        {
                EA=0;
                t=0;
       
                 if(count<60)
                 {
                         PA=0;
                        BELL=0;
                 }
                 else if(count>120)
                 {
                         PB=0;
               
                        BELL=0;
                 }
         else
                 PC=0;
                EA=1;
                TR0=0;
                ET0=0;
                EX0=0;
        }
}

//T1中断函数
void T1_timer() interrupt 3
{
        TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        bai=count/100;
        shi=(count%100)/10;
         ge=(count%100)%10;
         switch(i)
         {
                 case 0xfe:display(i,ge);break;
                case 0xfd:display(i,shi);break;
                case 0xfb:display(i,bai);break;
         }
         i=_crol_(i,1);
         if(i==0xf7)
         i=0xfe;
         
}

//初始化函数
void init()
{
        t=0;
        TMOD=0x11;
        TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
       
        EA=1;
        ET1=1;
        TR1=1;
        TR0=1;
        ET0=1;
        IT0=1;
        EX0=0;
}

//键盘处理函数
void keyscan()
{
        if(key==0)
        {
                Delayms(10);
                if(key==0)
                {
                        //TR0=1;
                        //ET0=1;
                        //EX0=1;
                        init();
                        EX0=1;
                        count=0;
                        BELL=1;
                        P0=0xff;
                }
                while(!key);
        }
}
//主程序
void main()
{
        //P3_2=0;
        init();
        TR0=0;
        ET0=0;
        EX0=0;
        //P2_3=0;

        while(1)
        {
        keyscan();
        }
}


为什么第一个程序不可以实现要求  第二种可以

相关帖子

沙发
llggo|  楼主 | 2014-4-25 21:20 | 只看该作者
只是用了不同的显示方式:handshake

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

81

帖子

1

粉丝