📄 testsl.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 + -