⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 带注释,可以工作.txt

📁 心率计C程序代码3位数码管显示心跳频率 键盘切换显示学号或开始计数
💻 TXT
字号:
//-----------------------------------------------------------------------------//
//单片机心律计C51程序---2008-11-11---by tjx------------------------------------//
//-----------------------------------------------------------------------------//

//-----------------------------------------------------------------------------//
//定义各个接口-----------------------------------------------------------------//
//-----------------------------------------------------------------------------//
#include <AT89X52.H>
#include<absacc.h>
#include<INTRINS.h>
#define uint unsigned int   //定义一下方便编程
#define uchar unsigned char //定义一下方便编程
#define ulong unsigned long //定义一下方便编程
#define key P3_4            //定义启动按牛口
#define signal P1_3         //定义信号输入口
#define sw P1_6             //定义拨动开关口
#define baiwei P2_5         //定义百位驱动口
#define shiwei P2_6         //定义十位驱动口
#define gewei P2_7          //定义个位驱动口
#define lamp0 P2_0          //定义灯一驱动口
#define lamp1 P1_7          //定义灯二驱动口
code uchar datab[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3F};
                            //定义共阳极七段译码值
uint num;                   //定义心律计数值
bit flag=0;                 //定义时间标志位
//-----------------------------------------------------------------------------//
//定义完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

//-----------------------------------------------------------------------------//
//单片机初始化子程序
//-----------------------------------------------------------------------------//
void mcuint(void)
 {
    lamp0=1;
	lamp1=1;
    TMOD=0x11;
    TL0=0x3C;
    TH0=0xF6;
    TL1=0xB0;
    TH1=0x3C;
    IE=0x8A;
    IP=0x08;
    TR0=1;
 }
//-----------------------------------------------------------------------------//
//程序完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//


//-----------------------------------------------------------------------------//
//延时1ms的子程序--------------------------------------------------------------//
//-----------------------------------------------------------------------------//
void delay1ms(uint count)
    { 
     int m,n;
     for(m=0;m<count;m++)
	 for(n=0;n<58;n++)
	 ;
    }
//-----------------------------------------------------------------------------//
//程序完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//


//-----------------------------------------------------------------------------//
//T0中断服务子程序,作用是每5ms扫描一次数码管----------------------------------//
//-----------------------------------------------------------------------------//
void timer0() interrupt 1
 {
    uchar ge,shi,bai;

    TL0=0x3C;
    TH0=0xF6;

	ge=num%10;
    shi=(num/10)%10;
    bai=num/100;

	shiwei=1;
	baiwei=1;
	P0=datab[ge];
	gewei=0;
	delay1ms(1);

 
	gewei=1;
	baiwei=1;
	P0=datab[shi];
	shiwei=0;
	delay1ms(1);

	gewei=1;
	shiwei=1;
	P0=datab[bai];
	baiwei=0;
	delay1ms(1);
	baiwei=1;
 } 
//-----------------------------------------------------------------------------//
//程序完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//


//-----------------------------------------------------------------------------//
//T1中断子程序,作用是一分钟计时,时间到置标志位为1----------------------------//
//-----------------------------------------------------------------------------//
void timer1() interrupt 3
    {

	uchar i,j;
	TL1=0xB0;
    TH1=0x3C;
    
    i++;
	lamp0=~lamp0;
    if(i==10)
      {
       i=0;
	   j++;
	   if(j==60)
	     {
	      j=0;
		  flag=1;
	     }
      }	
	}
//-----------------------------------------------------------------------------//
//程序完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//


//-----------------------------------------------------------------------------//
//测量心律子程序---------------------------------------------------------------//
//-----------------------------------------------------------------------------//
void celiang(void)
{
   num=0;
   while(sw==1) 
   {     
      if(key==0)
      {
        while(flag==0)
        {
	     TR1=1;
	     lamp1=0;

         if(signal==1) delay1ms(20);
         if(signal==1) num++;
         if(signal==0) delay1ms(200);

        }
        while(flag==1)
        {
	     TR1=0;
	     lamp1=1;

	     if(key==0)
		   {
		    flag=0;
	        num=0;
			delay1ms(500);
			}
	    }
      }
   }
   while(sw==0)
   {
	num=123;
   }	  
}
//-----------------------------------------------------------------------------//
//程序完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

//-----------------------------------------------------------------------------//
//主程序,开机初始化单片机,并显示500ms的888,用于检测笔画是否接正确-----------//
//-----------------------------------------------------------------------------//
void main(void)
{ 
    mcuint();
    num=888;
	delay1ms(500);
    while(1)
	{
	celiang();
	}	  
}
//-----------------------------------------------------------------------------//
//总程序完毕-------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -