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

📄 main.c

📁 心率计C程序代码3位数码管显示心跳频率 键盘切换显示学号或开始计数
💻 C
字号:
//-----------------------------------------------------------------------------//
//单片机心律计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          //定义灯二驱动口
#define SEGDATA P0          //定义七段译码输出口
code uchar datab[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3F};
                            //定义共阳极七段译码值
uint num=0,i=0;             //定义心律计数值
uchar ge,shi,bai;
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<59;n++)
	 ;
    }
//-----------------------------------------------------------------------------//
//函数完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

//-----------------------------------------------------------------------------//
//T0中断服务函数,作用是每5ms扫描一次数码管------------------------------------//
//-----------------------------------------------------------------------------//
void timer0() interrupt 1
 {
    TL0=0x3C;
    TH0=0xF6;

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

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

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

	gewei=1;shiwei=1;
	SEGDATA=datab[bai];
	baiwei=0;
	delay1ms(1);
	baiwei=1;
 } 
//-----------------------------------------------------------------------------//
//函数完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

//-----------------------------------------------------------------------------//
//T1中断函数,作用是一分钟计时,时间到置标志位为1,lamp0用于检测T1是否工作-----//
//-----------------------------------------------------------------------------//
void timer1() interrupt 3
    {
	TL1=0xB0;
    TH1=0x3C;
    i++;
	lamp0=~lamp0;
    if(i==600)   
      {i=0;flag=1;}	
	}
//-----------------------------------------------------------------------------//
//函数完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//


//-----------------------------------------------------------------------------//
//测量心律函数-----------------------------------------------------------------//
//-----------------------------------------------------------------------------//
void celiang(void)
{
   num=0;
   while(sw==1) 
   {     
      if(key==0)
      {
        TR1=1;
	    lamp1=0;
        while(flag==0)
        {
         while(signal)  ;
		 while(~signal) ;
		 if(signal==1) delay1ms(20);
		 if(signal==1) num++;
         delay1ms(50);
        }
        while(flag==1)
        {
	     TR1=0;
	     lamp1=1;
	     if(key==0)
		   {
		    flag=0;
	        num=0;
			delay1ms(400);
			}
	    }
      }
   }
   while(sw==0)
   {
	num=123;
   }	  
}
//-----------------------------------------------------------------------------//
//函数完毕---------------------------------------------------------------------//
//-----------------------------------------------------------------------------//

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

⌨️ 快捷键说明

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