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

📄 remote.c

📁 无线汽车遥控器源代码,不可多得的开发资料 有很好的参考价值
💻 C
📖 第 1 页 / 共 3 页
字号:
}

void door_opened_guard(void)
{     
      static bank1 Timer16Struct Timer35s=0;
      
      frameout_precoss(0xffff);//一直让引擎关闭
      switch(OpenStep)
      {
            case OPEN_REMIND:      
            	//frameout_precoss(0xffff);                        
                  flash_trun_signal(120/TIME_BASE,580/TIME_BASE,3);
                  if(speak_act_precoss(40/TIME_BASE,660/TIME_BASE,3,SHORT))
                  {      
                        flash_trun_signal(0,0,0);
                        speak_act_precoss(0,0,0,RESET); 
                        OpenStep=OPEN_DELAY_10S;
                        Timer35s.Interval=0;
                  }
                  break;
            case OPEN_DELAY_10S:
                  if(++Timer35s.Interval>=10000/TIME_BASE)
                        OpenStep=OPEN_ALARM;
                	if(InState.SideDoor!=DOOR_OPENED)
                		Flag.DoorOpenedGuard=0;
                  break;      
            case OPEN_ALARM:
                  flash_trun_signal(500/TIME_BASE,500/TIME_BASE,240);          
                  if(speak_act_precoss(0,0,240000/TIME_BASE/5,LONG))
                  {
                        OpenStep=OPEN_STOP;
                        flash_trun_signal(0,0,0);
                        speak_act_precoss(0,0,0,RESET);     
                  }
                  break;
            case OPEN_STOP:
            	Flag.DoorOpenedGuard=0;
                  break;
            default:break;
      }
}

#ifdef BOOT_EN
bit open_boot(uchar Interval)
{
      static bank1 BootTimer=0;
      if(Interval==0)
      {
            BOOT=0;
            BootTimer=0;
      }
      else
      { 
            if(++BootTimer<=Interval*5)
            {

                  BOOT=1;
                  return 0;
            }
            else
            {
                  BootTimer=Interval*5;
                  BOOT=0;
                  return 1;
            }
      }
      return 1;
      
}
#endif

void normal_process(void)
{
      static bank1 AutoRestoreStruct AutoRestore=0;
      
      if(Flag.SystemStateChange)
      {
            RemindState=DOOR_OPEN;
            
            AutoRestore.Flag.Shaked=0;
            AutoRestore.Flag.Opened=0;
            AutoRestore.Time.Interval=0;
            Flag.RememTouch=0;
            switch(PreState)
            {
                  
                  case GUARD_SOUND:
                        door_lock_process(500/TIME_BASE/5,LOCK_OFF);
                        if(PressUnlock==0) 
                              speak_act_precoss(50/TIME_BASE,200/TIME_BASE,2,SHORT);
                        if(flash_trun_signal(250/TIME_BASE,250/TIME_BASE,2))
                        {
                                    Flag.SystemStateChange=0;
                                    flash_trun_signal(0,0,0);
                                    speak_act_precoss(0,0,0,RESET);
                                    if(Jump.Electromotion)  door_lock_process(0,0);
                        }
                        break;
                  case GUARD_QUIET:
                        door_lock_process(500/TIME_BASE/5,LOCK_OFF);
                        //if(speak_act_precoss(50/TIME_BASE,200/TIME_BASE,2,SHORT));
                        if(flash_trun_signal(250/TIME_BASE,250/TIME_BASE,2))
                        {
                                    Flag.SystemStateChange=0;
                                    flash_trun_signal(0,0,0);
                                    speak_act_precoss(0,0,0,RESET);
                                    if(Jump.Electromotion) door_lock_process(0,0);
                        }
                        break;
                  case RUN:
                        if(PressUnlock>0)
                        {
                               door_lock_process(500/TIME_BASE/5,LOCK_OFF);
                              //if(speak_act_precoss(50/TIME_BASE,200/TIME_BASE,2,SHORT));
                              if(flash_trun_signal(250/TIME_BASE,250/TIME_BASE,2))
                              {
                                          Flag.SystemStateChange=0;
                                          flash_trun_signal(0,0,0);
                                          speak_act_precoss(0,0,0,RESET);
                                          if(Jump.Electromotion) door_lock_process(0,0);
                              }     
                        }
                        else 
                        {
                              if(door_lock_process(500/TIME_BASE/5,LOCK_OFF))
                              {
                                    Flag.SystemStateChange=0;
                                    if(Jump.Electromotion) door_lock_process(0,0);
                              }
                        }
                        break;
                  default:
                        Flag.SystemStateChange=0;
                        break;
            }
      }
      else
      {
            if(RemoteKey.Flag.Press)
            {
                  RemoteKey.Flag.Press=0;
                  switch(RemoteKey.Key)
                  {
                        case KEY_LOCK:
                              system_state_change(State,GUARD_SOUND,1);
                              //break;
					return ;
                        case KEY_QUIET:
                              system_state_change(State,GUARD_QUIET,1);
                              //break;
					return ;
                        case KEY_FIND:
                              system_state_change(State,FIND,1);
                              //break;
					return ;
                        case KEY_UNLOCK:
                              if(++PressUnlock<=3)
                              {
                                    flash_trun_signal(0,0,0);
                                    Flag.SystemStateChange=1;
                              }
                              else
                                    PressUnlock=3;
                              break;
                        #ifdef BOOT_EN
                        
                        case KEY_BOOT:
                              Flag.Boot=1;
                              open_boot(0);
                              break;
                        #endif
                        default:
                              break;
                  }
            }
            // 进入行驶
            
            #ifdef BOOT_EN
            if(Flag.Boot)
            {
                  Flag.Boot=0;
                  open_boot(500/TIME_BASE/5);
            }
            #endif
            if(InState.Acc)
            {
                  system_state_change(State,RUN,1);
                  return ;
            }
            //提醒设置防盗    for remind to shutdown 
            //if(PreState==RUN)
                  //remind_shutdown();
		if(PreState==RUN)
			Flag.FromRemindShutDown=remind_shutdown(); 
            //路边停车
            roadside_stop();
            
            //for auto restore
            if(!InState.Shake)
                  AutoRestore.Flag.Shaked=1;
            if(InState.SideDoor==DOOR_OPENED)
            {
                  if(AlarmNoub>3)   AlarmNoub=3;
                  if(AlarmNoub>0)
                  {
	                  AlarmNoub=0;
                        Flag.RememTouch=1;
                  	alarm_led_long_light(0,0);
                  }
                  AutoRestore.Flag.Opened=1;    
                  AlarmGrade=Guard;
            }      
                  
            if((!AutoRestore.Flag.Shaked)&&(!AutoRestore.Flag.Opened))
            {
                  if(PreState==GUARD_QUIET||PreState==GUARD_SOUND)
                        if(AutoRestore.Time.Interval++>=AUTO_RESTORE_TIME)
                        {
                              system_state_change(State,PreState,1);
                              AutoRestore.Time.Interval=0;
                        }
            }
            else  AutoRestore.Time.Interval=0;
            //记忆触发
            if(Flag.RememTouch)
            {
			speak_act_precoss(50/TIME_BASE,950/TIME_BASE,1,SHORT);
			if(alarm_led_long_light(6,1))
		    {
				alarm_led_long_light(0,0);			   	
				SIGNAL_LED=0;
				AlarmNoub=0;
				speak_act_precoss(0,0,0,RESET);
				Flag.RememTouch=0;
		     }
		}
      }
}

void guard_process(uchar Mode)
{
	if(GuardQuiet5s.Interval++>=5000/TIME_BASE)
	{
	      GuardQuiet5s.enable=0;
	      GuardQuiet5s.Interval=0;
	      Flag.BeginGuard=1;
	}
	if(Flag.BeginGuard)
	{
	      if(Flag.DoorOpenedGuard)
	            door_opened_guard();
	      else 
	      {
	            if(!InState.Shake)
	            {
	             
	             	if(AlarmSharkTimer.Interval==0)
	             	{
	              		SharkFlag.Time=1;
	             		AlarmSharkTimer.enable=1;
	          		}
	          		else if(AlarmSharkTimer.Interval<15000/TIME_BASE)
	          			SharkFlag.Time=2;
	          		else
	          		{
	           			SharkFlag.Time=1;
	          			AlarmSharkTimer.enable=1;
	                  }
	                  AlarmSharkTimer.Interval=0;
	                  if(Mode==QUIET_MODE)
	                  	system_state_change(State,ALARM_QUIET,1);
	                  else if(Mode==SOUND_MODE)
	                  	system_state_change(State,ALARM_SOUND,1);
	            }
	            if(InState.SideDoor==DOOR_OPENED||InState.Acc||InState.Brake)
	                  system_state_change(State,ALARM_DOOR_OPENED,1);
	      }
	}      

}

void guard_quiet_process(void)
{
      // 5s later into the guard mode
      signal_led_alarm(AlarmGrade);
      
      if(!Flag.GuardEngineOFF)
      {
            if(PreState!=FIND)
            {
                  if(Flag.DoorOpenedGuard)
                        Flag.GuardEngineOFF=1;
                  if(frameout_precoss(40))
                        Flag.GuardEngineOFF=1;
            }
            else Flag.GuardEngineOFF=1;         
      }
      if(Flag.SystemStateChange)
      {
            if(PreState!=FIND)
            {
                  if(!Flag.FromRemindShutDown)
				door_lock_process(500/TIME_BASE/5,LOCK_ON);
                  if(flash_trun_signal(500/TIME_BASE,200/TIME_BASE,1))
                  {
                              Flag.SystemStateChange=0;
                              flash_trun_signal(0,0,0);
                              if(Jump.Electromotion)  door_lock_process(0,0);
                              speak_act_precoss(0,0,0,RESET);
                  }
            GuardQuiet5s.Interval=0;
            }
            else Flag.SystemStateChange=0;
            Flag.BeginGuard=0;
            /////////////////////////////////当进入防盗系统的时候 如果门未关好 提醒用户关门////////////////
            if(SystemGuardChangeFirstTime)
            {
	            if(InState.SideDoor==DOOR_OPENED)
	            {
	                  Flag.DoorOpenedGuard=1;
	                  OpenStep=OPEN_REMIND;
	            }
	            else
	            	Flag.DoorOpenedGuard=0;
            }
            SystemGuardChangeFirstTime=0;
          	AlarmSharkTimer.enable=0;
          	AlarmSharkTimer.Interval=0;
      }
      else
      { 
	      guard_process(QUIET_MODE);
		if(RemoteKey.Flag.Press)
		{
		      RemoteKey.Flag.Press=0;
		      switch(RemoteKey.Key)
		      {
		            case KEY_LOCK:
		                  system_state_change(State,GUARD_SOUND,1);
		                  break;
		            case KEY_UNLOCK:
		                  ALARM_LED=0;
		                  system_state_change(State,NORMAL,1);
		                  break;
		            case KEY_FIND:
		                  system_state_change(State,FIND,1);
		                  break;
		            case KEY_QUIET:
		                  Flag.GuardEngineOFF=0;
		                  frameout_precoss(0);
		                  Flag.SystemStateChange=1;
		                  break;
		            #ifdef BOOT_EN
		            case KEY_BOOT:
		                  Flag.Boot=1;
		                  open_boot(0);
		                  break;
		            #endif
		            
		            default:break;
		      }
		}
      }
}

void guard_sound_process(void)
{
      //flash_alarm_led(4,2);
      signal_led_alarm(AlarmGrade);
      if(!Flag.GuardEngineOFF)
      {
            if(PreState!=FIND)
            {
                  if(Flag.DoorOpenedGuard)
                  {
                        Flag.GuardEngineOFF=1;
                  }
                  if(frameout_precoss(40))
                        Flag.GuardEngineOFF=1;
            }
            else Flag.GuardEngineOFF=1;         
      }
      
      if(Flag.SystemStateChange)
      {
            if(PreState!=FIND)
            {
                  speak_act_precoss(50/TIME_BASE,200/TIME_BASE,1,SHORT);
                  door_lock_process(500/TIME_BASE/5,LOCK_ON);
                  if(flash_trun_signal(500/TIME_BASE,200/TIME_BASE,1))
                  {
                              Flag.SystemStateChange=0;
                              speak_act_precoss(0,0,0,RESET);
                              flash_trun_signal(0,0,0);
                              if(Jump.Electromotion) door_lock_process(0,0);
                  }
                  GuardQuiet5s.enable=1;
                  GuardQuiet5s.Interval=0;
            }
            else Flag.SystemStateChange=0;
            Flag.BeginGuard=0;
            /////////////////////////////////当进入防盗系统的时候 如果门未关好 提醒用户关门////////////////
            if(SystemGuardChangeFirstTime)
            {
	            if(InState.SideDoor==DOOR_OPENED)
	            {
	                  Flag.DoorOpenedGuard=1;
	                  OpenStep=OPEN_REMIND;
	            }
				else Flag.DoorOpenedGuard=0;
			}
			SystemGuardChangeFirstTime=0;
            AlarmSharkTimer.enable=0;
            AlarmSharkTimer.Interval=0;
            
      }
      else
      {     
		guard_process(SOUND_MODE);
            if(RemoteKey.Flag.Press)
            {
                  RemoteKey.Flag.Press=0;
                  switch(RemoteKey.Key)
                  {
                        case KEY_LOCK:
                              system_state_change(State,GUARD_SOUND,1);
                              break;
                              
                        case KEY_UNLOCK:
                              ALARM_LED=0;
                              system_state_change(State,NORMAL,1);
                              break;
                        case KEY_FIND:
                              system_state_change(State,FIND,1);
                              break;
                        case KEY_QUIET:
                              system_state_change(State,GUARD_QUIET,1);
                              break;
                        default:break;
                  }
            }
      }
}

void find_process(void)
{
      flash_trun_signal(500/TIME_BASE,500/TIME_BASE,5);
      if(speak_act_precoss(0,0,5000/TIME_BASE/5,LONG))
      {
            speak_act_precoss(0,0,0,RESET);
            flash_trun_signal(0,0,0);
            system_state_change(State,PreState,0);
      }      
      if(RemoteKey.Flag.Press)
      {
            RemoteKey.Flag.Press=0;
            switch(RemoteKey.Key)
            {
                  case KEY_LOCK:
                        system_state_change(State,PreState,0);
                        break;
                  case KEY_UNLOCK:
                        
                        system_state_change(State,PreState,0);
                        break;
                  case KEY_FIND:
                        system_state_change(State,PreState,0);
                        break;
                  case KEY_QUIET:
                        system_state_change(State,PreState,0);
                  default:break;
            }
      }
}


typedef struct
{
      unsigned char Lock:1;
      unsigned char Unlock:1;
      unsigned char Help:1;
      unsigned char Call:1;
      unsigned char DoorOpened:1;
      unsigned char State:2;
}RunStruct;

⌨️ 快捷键说明

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