31.基于51单片机的脉搏测量仪设计(实物)

31.基于51单片机的脉搏测量仪设计(实物)

31.基于51单片机的脉搏测量仪设计(实物)

系统总体设计由STC89C52、按键、数码管、光电传感器、时钟模块、运放等构成,如图2.1所示,系统设有四个按键,可以设置上下限脉搏数,当超过范围的时候单片机会驱动蜂鸣器发响,脉搏测量的时候需要人把手轻轻的按在光电传感器上面,由于人脉搏跳动的时候,血液的透光性不一样会导致接收器那边接收的信号强弱不一样,间接的把人脉搏信号传回,通过运放对其进行放大、整形后连接到单片机的IO口,单片机利用外部中断对其进行计数,最终换算成人一分钟脉搏的跳动次数,最终显示在数码管上。

资料包括:

image.png

原理图:

image.png

实物图:

image.png

程序运行图:

image.png

t flag_300ms ;

uchar menu_1;           //菜单设计的变量
uchar smg_i = 3;    //显示数码管的个位数


uchar code table_num[]="0123456789abcdefg";

      //数码管段选定义 0     1    2    3 	  4	   5	6	 7	  8	   9	
uchar code smg_du[]={0x14,0x77,0x4c,0x44,0x27,0x82,0x84,0x87,0x04,0x05,
//					   A	B	 C	  D	   E   F	不显示
				 	   0x06,0xa4,0x9c,0x64,0x8c,0x8e,0xff};	 //断码	
uchar dis_smg[8]   ={0};

//数码管位选定义
sbit smg_we1 = P2^4;	    //数码管位选定义
sbit smg_we2 = P2^5;
sbit smg_we3 = P2^6;
sbit smg_we4 = P2^7;

unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
unsigned int time[6]={0};


/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<110;j++);
}


/***********************数码位选函数*****************************/
void smg_we_switch(uchar i)
{
	switch(i)
	{
		case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
		case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
		case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
		case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
	}	
}

/***********************数码显示函数*****************************/
void display()
{
	static uchar i;   
	i++;
	if(i >= smg_i)
		i = 0;	
	P0 = 0xff;		 //段选	        
	smg_we_switch(i);		 //位选
	P0 = dis_smg[i];		 //段选	        
}


/*************定时器0初始化程序***************/
void time_init()	  
{
	EA   = 1;	 	  //开总中断
	TMOD = 0X01;	  //定时器0、定时器1工作方式1
	ET0  = 1;		  //开定时器0中断 
	TR0  = 1;		  //允许定时器0定时
}


/***********外部中断0初始化程序****************/
void init_int0()	  //外部中断0初始化程序
{
	EX0=1;			  //允许外部中断0中断
	EA=1;	 		  //开总中断
	IT0 = 1; 		  //外部中断0负跳变中断
}

/****************主函数***************/
void main()
{	
	static uint value;
	time_init();                    //初始化定时器 
	init_int0();	  //外部中断0初始化程序
	while(1)
	{			
		value ++;
		if(value >= 300)  //300ms
		{
			value = 0;
			if(displayOK==0)//如果显示关
			{
			 	rate =

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值