基于51单片机的智能安全带模拟系统压力检测语言播报原理图程序设计

硬件设计

链接:https://pan.baidu.com/s/1AqFk5gsMtW0Xf5shs_FLOw
提取码:styd

本系统由STC89C52单片机电路+1路按键点火模拟电路+路黄色指示灯电路+HX711称重传感器电路+1位拨动开关电路+1路绿色指示灯电路+1路红灯指示电路+语音模块ISD1820电路+电源电路。
具体功能:
1、点火按键按下后,黄色指示灯亮,表示点火;再按一次,黄色指示灯灭,表示熄火。
2、点火后,如果压力传感器没检测到压力,无任何操作;
3、点火后,如果检测到压力超过一定值,且拨动开关关上(系好了安全带),这时绿色指示灯闪烁。
如果开关拨下(没系好了安全带),这时红色指示灯闪烁报警,同时语音提示:“请系好安全带”。直到安全带系好后,语音停止同时红色指示灯灭,绿色指示灯闪烁。
4、不点火,上述功能无响应,必须点火有效。

原理图:
在这里插入图片描述

程序设计

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "delay.h"
#include "hx711.h"
#include "1602.h"

sbit key_dh=P1^0; 		//接口定义
sbit LED_R=P1^1;
sbit LED_Y=P1^2;
sbit LED_G=P1^3;
sbit CTRL_YY=P1^4;
sbit Key_aq=P1^5;

unsigned long time_20ms=0; 	//	系统定时计数
unsigned char Error1Num;				//重量异常计数
unsigned char ReadFlag = 0;				//读取标志
unsigned char WeithFlag = 0;		  //称重标志
unsigned char rekey_dh = 0;			  //按键防止重复
unsigned char blankFlag = 0; 	//指示灯是否闪烁
unsigned char reportYy = 0;		 //语音上报
bit startFlag =0;			   //点火标志
xdata long Weight_Shiwu=0;		//实际重量
xdata unsigned long Weight_Maopi=0;	 //毛坯重量

void Init_Timer0(void);			//函数声明

void main (void)
{     
	Init_Timer0();        //定时器0初始化

	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear();          //清屏

	

	DelayMs(250);          //延时有助于稳定
	Weight_Maopi = HX711_Read();  	//读取去皮重量
	DelayMs(20);
	Weight_Maopi = HX711_Read();
	DelayMs(250);

	LED_Y = 1;			 //初始化完成关闭灯
	LED_G = 1;
	LED_R = 1 ;
	startFlag =0;
	LCD_Write_String(0,0,"My Designer ");//显示
	LCD_Write_String(0,1,"Fasten Seatbelt!");//显示
	while (1)         //主循环
	{
		if(key_dh == 0)				//点火
		{
			if(rekey_dh == 0)	  //点火防止重复
			{
				DelayMs(10);
				
			}		
		}
		else
		{rekey_dh = 0;}

		if(ReadFlag==1)	 //读取称
		{
			ReadFlag=0;
			Weight_Shiwu = HX711_Read();	 		//读取实物重量
			

			if(Weight_Shiwu > 0)	//称重大于零清空		
			{	
				Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/430); 	//g计算实物的实际重量
				
				else
				{
				  	Error1Num++;
					if(Error1Num>=2)		   //有人坐下
					{
					  	WeithFlag=1;
						if(startFlag==1)	   //点火后
						{
							if(Key_aq == 0)	 //安全带未系上
							{
								blankFlag = 1 ;	   reportYy =0;	 CTRL_YY =1 ; //红灯闪烁标志
								LCD_Write_String(0,1,"Sit Ok !        ");//显示
							}
							else
							{
								blankFlag = 2 ;	   //绿灯闪烁只是
								LCD_Write_String(0,1,"Fasten Seatbelt!");//显示
								reportYy = 1;															
							}						
						}
						else
						{
						 	blankFlag =0 ;	   //灯不闪烁
							reportYy =0;		 //关闭语音
							CTRL_YY =1 ;
						}

					}
				}													
			}
			else
			{Error1Num=0;}		 //清空异常计数
		}
	}
}


void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;

	time_20ms++;
	if(time_20ms%10==0)
	{
	 	ReadFlag=1;
		if(blankFlag == 1)				//绿灯闪烁 红灯熄灭
		{LED_G =  !LED_G;LED_R = 1;}
		else if(blankFlag == 2)			 //红灯闪烁 绿灯熄灭
		{LED_R = !LED_R;LED_G = 1; CTRL_YY =!CTRL_YY;}
		else

.

文件仅供参考:

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值