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

📄 testsl.c

📁 这是一个防盗锁程序设计,可在汽车上使用,具有四轮锁死防盗功能
💻 C
字号:
#include <reg52.h>

#define TimeDelayTime           3000      /*时间延迟时间*/
#define OutVoiceTime            1500      /*'车已开'语音延时时间*/
#define InVoiceTime             1500      /*'车已锁'语音延时时间*/
#define StealVoiceTime          1500      /*'车被盗'语音延时时间*/
#define SafeVoiceTime           2500      /*'请系好安全带'语音延时时间*/
#define MainTime                5      /*主程序延时时间*/
#define MaxTimes                10      /*循环最大次数*/
#define SpeedValue              1500     /*设定车速*/
/**************************************************************/
/*锁开标志*/
static int InOut;
/*延时1ms程序*/
void DelayTime() reentrant
{
	unsigned int Hight,Low,flag;
	P27=0;
	Hight=0xD8;
	Low  =0xEF;
	TL1=Low;
	TH1=Hight;
	TR1=1;
	flag=TF1;
	while(!flag)
	{
		flag=TF1;
	}
	TR1=0;
	TF1=0;
	P27=1;
	return;
}

/*输出语音*/
void OutVoice(int flag) reentrant
{
	unsigned int time;
	if(flag==1)
	{
		P2=0x01;
	}
	if(flag==2)
	{
		P2=0x02;
	}
	if(flag==3)
	{
		P2=0x04;
	}
	if(flag==4)
	{
		P2=0x08;
	}
	for(time=0;time<20;time++)
	{
		DelayTime();
	}
	P2=0x00;
	return;
}

/*检测锁状态*/
int CheckLock() reentrant
{
	unsigned int OutLock,InLock;
	P03=0;
	P02=0;
	OutLock=P03;
	InLock =P02;
	P03=1;
	P02=1;
	if((OutLock==1)&&(InLock==0))
		return 0;                     /*开锁状态*/
	else if((OutLock==0)&&(InLock==1))
		return 1;                     /*锁死状态*/
	else
		return 2;                     /*非法状态*/
}

/*检测有无开锁信号*/
int OutLock()
{
	unsigned int flag;
	flag=P12;
	if(flag)
		return 1;
	else
		return 0;
}

/*继电器通电检测*/
int JDQ()
{
	unsigned int flag;
	flag=P16;    /*低电平有效*/
	if(!flag)
		return 1;
	else
		return 0;
}

/*引擎盖是否通电*/
int YQG()
{
	unsigned int flag;
	flag=P17;   /*低电平有效*/
	if(!flag)
		return 1;
	else
		return 0;
}
void OutLockFinger()
{
	int time,flag;
	flag=CheckLock();
	while(flag!=0)
	{
		P01=1;
		P00=0;
		flag=CheckLock();
		DelayTime();
	}
	P01=0;
	OutVoice(2);	
	for(time=0;time<OutVoiceTime;time++)
  	{		
		DelayTime();
	}
	return;
}
	
/*锁状态开锁过程*/
void OutLockProcess()
{
	int flag;
	flag=OutLock();
	if(flag)
	{	
		InOut=1;
		OutLockFinger();
	}
	return;
}

/*车速检测*/
int CarSpeed()
{
	unsigned int speed;
	speed=TH0;
	speed=speed*16+TL0;
	if(speed>SpeedValue)
	{
		TH0=0;
		TL0=0;
		return 1;
	}
	return 0;
}

/*锁状态有车速信号、继电器通电、引擎盖通电处理过程*/
void SpeedJDQYQGProcess(int flag)
{
	int i=0,time;
	if(flag)
	{
		for(i=1;i<=3;i++)
		{
			/*输出车以锁语音*/
			OutVoice(1);
			for(time=0;time<InVoiceTime;time++)
			{
				OutLockProcess();
				DelayTime();
			}
			flag=CheckLock();
			if(flag==0)
				break;
		}
		i=0;
		while(1)
		{
			/*输出车被盗语音*/
			OutVoice(4);
			for(time=0;time<StealVoiceTime;time++)
			{
				OutLockProcess();
				DelayTime();
			}
			if(i==0)
			{
				P04=1;    /*打电话*/
				for(time=0;time<500;time++)
				{
					DelayTime();
				}
				P04=0;
				i=1;
			}
			flag=CheckLock();
			if(flag==0) 
				break;
		}
	}
	return;
}
/*检测遥控信号*/
int CheckYK()
{
	unsigned int flag;
	flag=P11;
	if(flag)	
		return 1;
	else
		return 0;
}

/*开锁状态输出锁信号*/
void InLockFinger() reentrant
{
	int time,flag;
	flag=CheckLock();
	while(flag!=1)
	{
		P00=1;
		P01=0;
		flag=CheckLock();
		DelayTime();
	}
	P00=0;
	OutVoice(1);	
	for(time=0;time<InVoiceTime;time++)
  	{		
		DelayTime();
	}
	return;
}
/*开状态有锁信号的过程*/
void InLockProcess()
{
	int flag;
	flag=CheckYK();
	if(flag)
	{
		InOut=2;
		InLockFinger();
	}
	return;
}

/*检测安全带是否系*/
int SafetyBelt()
{
	unsigned int flag;
	flag=P14;
	if(!flag)
		return 1;  /*低电平为系*/  
	else
		return 0;   
}

/*开状态高速、继电器通电过程*/
void HightSpeedJDQProcess(int flag)
{
	unsigned int times,time;
	if(flag)
	{
		flag=SafetyBelt();
		if(!flag)
		{
			for(times=0;times<MaxTimes;times++)
			{
				/*输出请系好安全带语音*/
				OutVoice(3);
				for(time=0;time<SafeVoiceTime;time++)
				{
					DelayTime();
					flag=SafetyBelt();
					if(flag) 
					{
						break;
					}
				}
				if(flag)
				{
					break;
				}
			}
			flag=SafetyBelt();
			if(!flag)
			{
				InOut=2;
				InLockFinger();
			}
		}
	}
	return;
}
void Phone(void) interrupt 0
{
	int flag;
	flag=CheckLock();
	if(flag!=1)
	{
		InOut=2;
		InLockFinger();
	}
}
		
void InitVar()
{
	TMOD=0x05;  /*T0为计数器,T1为定时器*/
	IT0=0;      /*低电平中断*/
	IE=0x81;    /*开INT0中断*/
	
	P1=0xF0;
	P2=0x00;
	TR0=1;
}	

/*主程序*/
void main()
{
	unsigned int flag,time,flag1;
	InitVar();          /*初始变量*/	
	flag=CheckLock();
	if(flag==0)
	{
		InOut=1;   /*锁开状态*/
	}
	if(flag==1)
	{
		InOut=2;    /*锁状态*/
	}
	if(flag==2)
	{
		P01=1;
		P00=0;		
		for(time=0;time<TimeDelayTime;time++)    /*延时3秒*/
		{
			flag=CheckLock();
			if(flag==0)
			{
				OutVoice(2);
				break;
			}
			DelayTime();
		}  
		P01=0;
		InOut=1;
	}
	while(1)
	{
		P0=0x00;
		P27=0;
		flag=CheckLock();
		if(flag==1)
		{
			flag1=CarSpeed();
			SpeedJDQYQGProcess(flag1);
			flag1=JDQ();
			SpeedJDQYQGProcess(flag1);
			flag1=YQG();
			SpeedJDQYQGProcess(flag1);
			OutLockProcess();
		}
		if(flag==0)
		{	
			flag1=JDQ();
			HightSpeedJDQProcess(flag1);
			flag1=CarSpeed();
			HightSpeedJDQProcess(flag1);
			InLockProcess();  /*进行锁动作*/			
		}
		
		if(InOut==1)
		{
			for(time=0;time<TimeDelayTime;time++)
			{
				P01=1;
				P00=0;
				flag=CheckLock();
				if(flag==0)
				{
					break;
				}
				DelayTime();
			}
			P01=0;
		}
		if(InOut==2)
		 {
			for(time=0;time<TimeDelayTime;time++)
			{
				P00=1;
				P01=0;
				flag=CheckLock();
				if(flag==1)
				{
					break;
				}
				DelayTime();
			}
			P00=0;
		}
		P27=1;                                      	
	}
	return;
}

	

⌨️ 快捷键说明

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