[Proteus51单片机仿真]安全帽检测系统(压力传感器、血氧传感器、心率传感器)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

设计一款用于施工工地的安全帽监测系统,能够实现实时监测施工人员的健康状况(心率和血氧),并能保证施工人员在工地上始终佩戴安全帽。功能可划分为两个模块:健康监测模块和安全帽佩戴监测模块。 健康监测模块搭载心率和血氧传感器,可实时监测用户血氧信息。当用户血氧和心率值异常时,报警系统会发出警报,同时将信息发送到监控端(串口)。 安全帽佩戴监测模块可实时监测用户佩戴情况,压力传感器,压力异常时,当佩戴出现异常情况时,报警系统会发出警报

仿真图:

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

本系统包括51单片机最小系统、LCD1602显示屏、MPX4117压力传感器、血氧传感器、心率传感器、灯光报警电路、ADC0832数模转换器、虚拟串口和按键电路。

三、程序编程

#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#include "Beep.h"
#define uchar unsigned char
#define uint unsigned  int
 /*引脚定义*/
sbit LEDBJ = P2^3;			  //LED灯引脚
sbit BEEP =  P2^4;			  //蜂鸣器引脚

sbit CS   =  P1^0;        //ADC0832引脚定义
sbit CLK  =  P1^1;
sbit DIO  =  P1^2;
sbit CS1  =  P1^3;        //ADC0832引脚定义
sbit CLK1 =  P1^4;
sbit DIO1 =  P1^5;	
sbit CS2  =  P2^0;        //ADC0832引脚定义
sbit CLK2 =  P2^1;
sbit DIO2 =  P2^2;	
sbit key  =  P1^7;


/*变量定义*/
static int yalimax=100,yalimin=50,fenchenmax=100,fenchenmin=50;
static uchar u,U,XY,u1,U1,YL,u2,U2,XL;
int flag = 0;

/*函数定义初始化*/
void anjianjc();
void WARNING();


void WARNING()  //报警检测
{
  
   
   if(YL > 100)
   {
     if(XL > 80 && XY > 80)
   {
    printf("心率和血氧异常,请查看身体!\r\n");
	LEDBJ = 1;
	BEEP  = 1;
	Delay(1000);
   }
   else if(XY >80)
   {
    printf("血氧异常,请查看身体!\r\n");
	LEDBJ = 1;
	BEEP  = 1;
	Delay(1000);
   }

   else if(XL > 80)
   {
    printf("心率异常,请查看身体!\r\n");
	LEDBJ = 1;
	BEEP  = 1;
	Delay(1000);
   }
   else 
   {
    LEDBJ = 0;
	BEEP  = 0;
   }
	LEDBJ = 1;
   } 
   else
   {
     LEDBJ = 0;
   }

  
}

//串口初始化
void init_com(void)
{
 	TMOD =0x20;		   //设T0为方式1,GATE=1;
	SCON=0x50;        //开启串口
	TH1=0xFD;          //波特率是9600bps
	TL1=0xFD;
	TR1=1;			   //开启定时器
	TI=1;
	EA=1;
}


uchar get_AD_Res()          //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	CLK=1;_nop_();
	
	CLK=0;DIO=0;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;_nop_();
		CLK=0;_nop_();
		data1=(data1<<1)|(uchar)DIO; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;_nop_();
		CLK=0;_nop_();
	}
	CS=1;
	
	return(data1 == data2)?data1:0;
}

uchar get_AD_Res1()          //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS1=0;
	
	CLK1=0;DIO1=1;_nop_();
	CLK1=1;_nop_();
	
	CLK1=0;DIO1=1;_nop_(); 
	CLK1=1;_nop_();
	
	CLK1=0;DIO1=0;_nop_();
	CLK1=1;_nop_();
	
	CLK1=0;DIO1=1;_nop_(); 
	
	for(i=0; i<8; i++)
	{
		CLK1=1;_nop_();
		CLK1=0;_nop_();
		data1=(data1<<1)|(uchar)DIO1; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO1<<i;
		CLK1=1;_nop_();
		CLK1=0;_nop_();
	}
	CS1=1;
	
	return(data1 == data2)?data1:0;
}

uchar get_AD_Res2()          //ADC0832启动读取函数
{
	uchar i, data1=0, data2=0;
	CS2=0;
	
	CLK2=0;DIO2=1;_nop_();
	CLK2=1;_nop_();
	
	CLK2=0;DIO2=1;_nop_(); 
	CLK2=1;_nop_();
	
	CLK2=0;DIO2=0;_nop_();
	CLK2=1;_nop_();
	
	CLK2=0;DIO2=1;_nop_(); 
	
	for(i=0; i<8; i++)
	{
		CLK2=1;_nop_();
		CLK2=0;_nop_();
		data1=(data1<<1)|(uchar)DIO2; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO2<<i;
		CLK2=1;_nop_();
		CLK2=0;_nop_();
	}
	CS2=1;
	
	return(data1 == data2)?data1:0;
}


void main()	    //主函数
{	
	init_com();         //串口初始化
	LCD_Init();         //显示屏初始化:
	LEDBJ = 0; //关掉报警灯光
	BEEP =  0; //关掉蜂鸣器
	do
	{
	 u=get_AD_Res();	   //压力传感器
	 U=(250*u)/128;    
	 YL=200*U/250;


	 u1=get_AD_Res1();    //心率传感器
	 U1=(250*u1)/128;    
	 XL=200*U1/250;
	

	 u2=get_AD_Res2();    //血氧传感器
	 U2=(250*u2)/128;    
	 XY=200*U2/250;


	 if(key == 0)
	 {
	  Delay(150);
	  if(key == 0)
	  {
	   flag++;
	   if(flag == 3)
	   {
	    flag = 0;
	   }
	  }
	 }

	switch(flag)
	{
	 case 0: LCD_ShowNum(1,4,YL,3);	LCD_ShowString(1,1,"YL:"); break;
	 case 1: LCD_ShowNum(1,4,XL,3); LCD_ShowString(1,1,"XL:");break;
	 case 2: LCD_ShowNum(1,4,XY,3);LCD_ShowString(1,1,"XY:");break;
	 default:break;
	}

     WARNING();          //报警检测
	} while(1);
}


四、实现现象

具体动态效果看B站演示视频:

基于51单片机的安全帽检测系统(压力传感器,血氧和心率传感器)_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

所有源程序和仿真,原理图,流程图等:
链接:https://pan.baidu.com/s/1Wm_zhlAseaw-f0hxnaqKWQ 
提取码:e998 
--来自百度网盘超级会员V4的分享

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜间去看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值