微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 脉搏检测仪程序

脉搏检测仪程序

时间:10-02 整理:3721RD 点击:

#include<reg52.h>

#include<intrins.h>

#defineuchar unsigned char

#defineuint  unsigned int

uchari=0xfe;//显示位选初值

ucharge,shi,bai;

uint count =887;//脉搏次数

uint  t;

uchar disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码

sbitP0_0=P0^0;   //黄灯

sbitP0_1=P0^1;   //红灯

sbitP0_2=P0^2;   //绿灯

sbitP2_4=P2^4;   //按键

//sbitP3_2=P3^2;

sbitP3_6=P2^3;   //蜂鸣器

bitBELL=0;       //响铃标志

/**************************************/

/*                                     /

/*  软件延时函数                /

/*                                     /

/**************************************/

voiddelay10ms(void)

{

    uchar i,j;

    for(i=20;i>0;i--)

        for(j=248;j>0;j--);

}

/**************************************/

/*                                     /

/*  显示函数                         /

/*                                     /

/**************************************/

voiddisplay(uchar i,uchar number)

{   

     P2=i;   

     P1=disp[number];

}

/**************************************/

/*                                     /

/*  定时器0中断处理函数                /

/*  用于定时一分钟                       /

/**************************************/

  void timer0(void) interrupt 1

{

TH0=0x3c;

TL0=0xb0;

t++;

  if(t==1200)

  {

  EA=0;

  t=0;

  bai=count/100;

  shi=(count%100)/10;

  ge= (count%100)%10;

  if(count<60)//设置最低值

  {

    P0_0=0;

    P3_6=0;

    BELL=1;

  }

  else if(count>120) //设置最高值

  {

    P0_1=0;

    P3_6=0;

    BELL=1;

  }

  else

  P0_2=0;

   

  EA=1;

  TR0=0;                   //开定时器0

  ET0=0;                   //开定时器0中断

  EX0=0;                   //开外部中断

  }

}

/**************************************/

/*                                     /

/*  定时器1中断处理函数                /

/*                                     /

/**************************************/

voidtimer1_int(void) interrupt 3

{

     TH1=-5000/256;

     TL1=-5000%256;

  bai=count/100;     //提取三位数字

  shi=(count%100)/10;

  ge= (count%100)%10;

   

     switch(i)//选择数码管位

     {

        case 0xfe: display(i,ge);break;

        case0xfd: display(i,shi);break;

        case0xfb: display(i,bai);break;

     }

               

     i=i<<1;               //流水效果

     i=i|0x01;   

     if(i==0xf7)           //右移三位后置初值

     i=0xfe;

     if(BELL)             //蜂鸣器响

     {

        P3_6=0;

     }

}

/**************************************/

/*                                     /

/*  初始化函数                        /

/*                                     /

/**************************************/

voidinit()

{

     t=0;

   

     TMOD=0x11;                //定时器0,1的定时方式1都打开

     TH1=-5000/256;           //定时器1定时5ms

     TL1=-5000%256;

     TH0=0x3c;                 //定时器0定时50ms

     TL0=0xb0;  

     EA=1;                     //开总中断

     ET1=1;                    //开定时器1中断

     TR1=1;                    //开定时器1

     TR0=1;                    //开定时器0

     ET0=1;                    //开定时器0中断

     IT0=1;                   //下降沿促发

     EX0=1;                   //开中断0

}

/**************************************/

/*                                     /

/*  按键软件处理函数                /

/*                                     /

/**************************************/

voidkey()

{

        if(P2_4==0)

        {

            delay10ms();

            delay10ms();

            if(P2_4==0)

            {

             //    TR0=1;                 //开定时器0

            //  ET0=1;                 //开定时器0中断

            //  EX0=1;                 //开外部中断

                init();

                count=0;               //显示清零

                BELL=0;

                P0=0xff;

            }

            while(P2_4==0);//等待按键释放,如果键未释放则一直在此等待。不过此处开中断非计数可不写

        }

}

voidmain()

{

     //P3_2=0;

     init();

     TR0=0;                    //关定时器0

     ET0=0;                    //关定时器0中断

     EX0=0;

     //P3_6=0;            

     while(1)

     {

     key();

     

     }

}

voidint0(void) interrupt 0

{

     count++;

}

#include<reg52.h>

               sbit k0=p1^0;

               sbit k1=p1^1;

               sbit k2=p1^2;

               sbit k3=p1^3;

               sbit d0=p1^4;

               sbit d1=p1^5;

               sbit d2=p1^6;

               sbit d3=p1^7;

               sbit B0=p3^7;

               sbit l0=p2^0;

               sbit l1=p2^2;

               sbit l2=p2^3;

               sbit l3=p2^4;

               sbit kz=p3^0;

               unsigned char qiangdanum=0x3f;

               unsigned char codetable[]={0x3f,0xxx,0x5b,0x4f,0x66,0x7d,0x07,0x7f,ox6f};

               unsigned char ge=0,shi=0;

               unsigned int num=0;time=0;

               void display();

               void display(unsigned int);

               main()

               {

               TMOD=0X01;

               TH0=(65536-50000)/256;

               TL0=(65536-50000)%256;

               IT0=0;

               EA=1;

               ET0=1;

               EX0=1;

               {while(1)

               {display();

               if(kz==0)

               TR0=1;

               if(num==20)

               {num=0;

               time++;

               if(time==60)

               time=0;

               }

               }

               }

               }

               void exter0() interrupt 0

               {EA=0;l0=0;

               if(k0==0)

               {d0=0;qiangdanum=1;B0=1;

               }

               if(k1==0)

               {d1=0;qiangdanum=2;B0=1;

               }

                if(k2==0)

               {d2=0;qiangdanum=3;B0=1;

               }

               if(k3==0)

               {d3=0;qiangdanum=4;B0=1;

               }

               }

               void time0() interrupt 1

               {num++;

               TH0=(65536-50000)/256;

               TL0=(65536-50000)%256;

               }

               void delay(unsigned int z)

               {unsigned int x,y;

               for(x=z;x>0;x--)

               for(y=110;y>0;y--);

               }

               void display(void)

               {shi=time/10;

               ge=time%10;

               p2=0xef;

               p0=table[ge];

               delay(5);

               p2=0xf7;

               p0=table[shi];

               delay(5);

               p2=0xFE;

               p0=table[qiangdanum];

               delay(5);

               }

               

大哥,好歹给上个说明吧

同样问题

同样问题@!

学习了

大神啊,这么犀利

没有说明,没有业务方面的注释
单片机操作类的注释等于没有

求原理解释。

唉                                 

求原理解释。

小编,有哦没有仿真图了

求原理解释。
PCB打样找华强 http://www.hqpcb.com 样板2天出货

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top