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

📄 main.c

📁 我做的 遥控门的 监控程序 请指正
💻 C
字号:
/* for monitor controll */
/* open flag*/// key1
/*open door      key2
stop door        key3
close door*///   key4
#include <monitor.h>
/*for system delay*/
void delay(uchar);
/*for tpic6b595*/
void tsend(uchar);
/*for system init*/
void system_init(void);
//include
void watchdog(void);
void timer_init(void);
void para_init(void);
/* time out*/
void time_out(void);
/* for receive message**/
void RF_key1_message(void);
void RF_key2_message(void);
void RF_key3_message(void);
void RF_key4_message(void);
void MAN_key1_message(void);
void MAN_key2_message(void);
void MAN_key3_message(void);
void MAN_key4_message(void);
/* for monitor controll*/
void monitor_positive(void);
void monitor_rollback(void);
void monitor_stop(void);
/* for measure place message*/
void measure_place_message(void);
/* for led indacate*/
void led_for_status(void);
/*********************************************/
void delay(uchar temp)
{
   uchar I;
while(temp-->0) {
for(I=0;I<125;I++){;}
}
}/* temp=1 delay 1ms*/
/*tpic6b595 send*************/
void tsend(uchar buffer){
        uchar I;
        tclk=0;
		tdata=0;
		for(I=0;I<=7;I++) {
		      if(buffer&0x80) tdata=1;
			  else tdata=0;
			  tclk=1;
			  ;/*nop*/
			  tclk=0;
			  buffer=buffer<<1;
			  }
		 tdata=0;
}
/********************///for monitor
void monitor_positive(void)
{   uchar temp;
    temp=0x01;
    tsend(temp);
}//end 
void monitor_rollback(void)
{   uchar temp;
    temp=0x02;
    tsend(temp);
}//end 
void monitor_stop(void)
{  
    uchar temp;
    temp=0x00;
    tsend(temp);
}//end 
/********end for monitor controll**********/
/*******for initlize system******/
void watchdog(void)
{  WDI=!WDI;}
void timer_init(void)
{         TR0=0;
          TMOD=0x11;/*time0 in model 1,time1 in model 1************/
          TH0=0x3C;
          TL0=0xAF; /*50ms************************/
          ET0=1;   /*open time0 interrupt**********//*open time0 interrupt**********/
          TR1=0;
          TH1=0x3C;
          TL1=0xAF; /*50ms************************/
          ET1=1;   /*open t1*/
		  TR1=1;
}     
void para_init(void)
{ time_out_second=0;
 d50ms=0;
 second=0;
 delay_1s=0;
w_key1_flag=0;
w_key2_flag=0;
w_key3_flag=0;
w_key4_flag=0;
m_key1_flag=0;
m_key2_flag=0;//open
m_key3_flag=0;
m_key4_flag=0;//close

switch_1_flag=0;
switch_2_flag=0;
switch_3_flag=0;
switch_4_flag=0;
switch_5_flag=0;

//for led 
led1=1;
led2=1;
led3=1;
led4=1;
//for timer
TR0=0;
man_second=0;
}
void RF_para_init(void)
{time_out_second=0;
 d50ms=0;
 second=0;
w_key1_flag=0;
w_key2_flag=0;
w_key3_flag=0;
w_key4_flag=0;
TR0=0;
RF_p_flag=0;
RF_np_flag=0;
RF_status=0;
RF_urgent_second=0;
}
void MAN_para_init(void)
{m_key1_flag=0;
m_key2_flag=0;//open
m_key3_flag=0;
m_key4_flag=0;//close

//for timer
man_second=0;
MAN_p_flag=0;
MAN_np_flag=0;
MAN_status=0;
MAN_FLAG=0;
MAN_urgent_second=0;
}//end man para initlized
//for system
void system_init(void)
{  EA=0;
   watchdog();
   timer_init();
   para_init();
   EA=1;
}
/***************END systme initlized********/
/**************begin time out*************8*/
void time_out(void)
{   if(time_out_second>=60)
       {time_out_second=0;
	    TR0=0;
	    para_init();
	    }
}
/*******end for time out*******/
void RF_key1_message(void)//fro 启动键
{    if(w_key1==0) {TR0=1;
                    delay(10);
					if(w_key1==0)  w_key1_flag=1;
					while(w_key1==0);}
}
void RF_key2_message(void)//开门键
{    if(w_key2==0) {
                    delay(10);
					if(w_key2==0) { w_key2_flag=1;
					                second=0;
									time_out_second=0;}
					while(w_key2==0);}
}
void RF_key3_message(void)//停止键
{    if(w_key3==0) {
                    delay(10);
					if(w_key3==0) { w_key3_flag=1;
					                time_out_second=0;
									second=0;}
					while(w_key3==0);}
}
void RF_key4_message(void)//关门键
{    if(w_key4==0) {
                    delay(10);
					if(w_key4==0) { w_key4_flag=1;
					                time_out_second=0;
									second=0;}
					while(w_key4==0);}
}
/*void MAN_key1_message(void)//人按
{  if(m_key1==0)   m_key1_flag=1;
   else            m_key1_flag=0;
}*/
void MAN_key2_message(void)//人按 开门键
{  if(m_key2==0)  {delay(10); 
                  if(m_key2==0) m_key2_flag=1;
				  }
   else           {delay(10); 
                  if(m_key2==1) m_key2_flag=0;
				  }
}
/*void MAN_key3_message(void)//人按 停止键
{  if(m_key3==0)   m_key3_flag=1;
   else            m_key3_flag=0;
}*/
void MAN_key4_message(void)// 人按 关门键
{  if(m_key4==0)   {delay(10); 
                  if(m_key4==0) m_key4_flag=1;
				   }
   else           {delay(10); 
                  if(m_key4==1) m_key4_flag=0;
				  }
}
//end for receive message
/*************end time out******************/
void measure_place_message(void)
{   if(switch_1==1){delay(10); 
                    if(switch_1==1) switch_1_flag=0;//for 正向限定位置
				   }
    else           {delay(10);
                    if(switch_1==0) switch_1_flag=1;
				   }
    if(switch_2==1){delay(10); 
	                if(switch_2==1) switch_2_flag=0;//for 反响位限定置
					}
	else           {delay(10);
                    if(switch_2==0)switch_2_flag=1;
				   }
    if(switch_3==1) {delay(10); 
	                  if(switch_3==1) switch_3_flag=0;//for 紧急位限定置
					 }
	else           {delay(10);
                    if(switch_3==0)switch_3_flag=1;
				   }
    if(switch_4==1) {delay(10); 
	                  if(switch_4==1) switch_4_flag=0;//for 紧急位限定置
					 }
	else           {delay(10); 
                    if(switch_4==0)switch_4_flag=1;	
				   }
    if(switch_5==1){delay(10); 
	                if(switch_5==1) switch_5_flag=0;//for 紧急位限定置
					 }
	else           {delay(10);
                    if(switch_5==0)switch_5_flag=1;
				   }
}
/***********end measure place message**********/
void led_for_status(void)
{


}
/********end led indacate for status*******/
/* main function*/
void  main(void) { 
   system_init();
   monitor_stop();
   RF_status=0;
   MAN_status=0;
   RF_p_flag=0;
   RF_np_flag=0;
   MAN_p_flag=0;
   MAN_np_flag=0;
   MAN_urgent_flag=0;
   //RF_urgent_flag=0;
 delay(200);
   while(1) { watchdog();
if(m_key1==1){
			MAN_para_init();
			time_out();
			/*************measure*******/
			measure_place_message();
			if(switch_1_flag==1&&switch_2_flag==0&&RF_p_flag==0){ 
			                       RF_p_flag=1;
								   RF_np_flag=0;
		                           monitor_stop(); 
 		                           RF_status=2;}//haved opened
			if(switch_2_flag==1&&switch_1_flag==0&&RF_np_flag==0){  
						          RF_np_flag=1;
								  RF_p_flag=0;
		                          monitor_stop();
								  para_init();
								  RF_status=3;}//have closed
			if((switch_3_flag==1||switch_4_flag==1||switch_5_flag==1)&&RF_urgent_flag==0)
			                      { RF_p_flag=0;
									RF_np_flag=0;
									RF_urgent_flag=1;
								    monitor_stop(); 
 		                            RF_status=3;
			                        led1=1;led2=1;
									led3=1;led4=0;}

			  /******RF message********/
              RF_key1_message();//on
			  if(w_key1_flag==1){ led4=0;
			            if(second>=2){
			               switch(RF_status){
						       case 0: RF_key2_message();//open
							           RF_key4_message();//close
									   if(w_key2_flag==1&&w_key4_flag==0) 
									                      {w_key2_flag=0; 
 									                       RF_status=1;
														   monitor_positive();
														   led1=0;led2=1;
														   led3=1;}
									   if(w_key4_flag==1&&w_key2_flag==0) 
									                      {w_key4_flag=0; 
 									                       RF_status=1;
														   monitor_rollback();
														   led1=1;led2=0;
														   led3=1;}
							          break;
							    case 1:RF_key3_message();//stop
							          if(w_key3_flag==1) {w_key3_flag=0; 
 									                       RF_status=0;
														   monitor_stop();
														   RF_p_flag=0;
														   RF_np_flag=0;
														   led1=1;led2=1;
														   led3=1;}
							           break;
								case 2: RF_key4_message();//close
								        if(w_key4_flag==1) {w_key4_flag=0; 
 									                       RF_status=1;
														   monitor_rollback();
														   led1=1;led2=0;
														   led3=1;}
							          break;
								case 3: RF_key2_message();//open
								        if(w_key2_flag==1) {w_key2_flag=0; 
 									                       RF_status=1;
														   monitor_positive();
														   led1=0;led2=1;
														   led3=1;}
								       break;
							    default:break;}//end switch
							 }//end if d1s>=1 
							 }//end if
			  else {led1=1;led2=1;
			        led3=1;led4=1;
			        TR0=0;
			        TH0=0X3C;TL0=0XAF;}
             /*********end RF functions********/
             } //end conrtroll by RF
            else {RF_para_init();led4=1;
/********man message***/
/*measure-----------------*/
             measure_place_message();
             if(switch_1_flag==1&&switch_2_flag==0&&MAN_p_flag==0)
			                     {MAN_p_flag=1; 
                                 MAN_np_flag=0;
								 MAN_FLAG=0;
								  monitor_stop(); 
		                           MAN_status=2;}//haved opened
			 if(switch_2_flag==1&&switch_1_flag==0&&MAN_np_flag==0){  
						          MAN_p_flag=0; 
                                  MAN_np_flag=1;
								  MAN_FLAG=0;
			                      monitor_stop();
								  para_init(); 
								  MAN_status=1;}//have closed
			 if((switch_3_flag==1||switch_4_flag==1||switch_5_flag==1)&&MAN_urgent_flag==0)
			                      { MAN_urgent_flag=1;
							        monitor_stop(); 
								    MAN_p_flag=0; 
                                    MAN_np_flag=0;
 		                            MAN_status=1;
								    led1=1;led2=1;
									led3=0;led4=1;}
/*------------------man message-----------------*/
switch(MAN_status){
             case 0:
			 MAN_key2_message();//open
			 MAN_key4_message();//close
             if(m_key2_flag==1&&m_key4_flag==0){ 
			                                   	if(man_second>=1) {monitor_positive();man_second=0;}
			                                    led1=0;led2=1;
												led3=0;led4=1;}
			 else if(m_key2_flag==0&&m_key4_flag==1){
			                                    if(man_second>=1) {monitor_rollback();man_second=0;}
			                                         led1=1;led2=0;
												     led3=0;led4=1;}
			 else           {     if(man_second>=1){monitor_stop();man_second=0;}
			                        led1=1;led2=1;
				                	led3=0;led4=1;}
                   break;
             case 1:MAN_key2_message();
                   if(m_key2_flag==1&&m_key4_flag==0){ MAN_FLAG=1;
			                                   	if(man_second>=1){ monitor_positive();man_second=0;}
			                                    led1=0;led2=1;
												led3=0;led4=1;}
			       if(m_key2_flag==0&&m_key4_flag==0&&MAN_FLAG==1){ 
                                             MAN_FLAG=0;     
                                             monitor_stop();
								             MAN_status=0;
											 MAN_p_flag=0; 
                                             MAN_np_flag=0;
											 man_second=0;
                                             led1=1;led2=1;
								             led3=0;led4=1;}
                   break;
             case 2:MAN_key4_message();
                   if(m_key2_flag==0&&m_key4_flag==1){ MAN_FLAG=1;
			                                   	if(man_second>=1){ monitor_rollback();man_second=0;}
			                                    led1=1;led2=0;
												led3=0;led4=1;}
			       if(m_key2_flag==0&&m_key4_flag==0&&MAN_FLAG==1){ MAN_FLAG=0;
                                                  monitor_stop();
								                   MAN_status=0;
												   MAN_p_flag=0; 
                                                   MAN_np_flag=0;
												   man_second=0;
                                                  led1=1;led2=1;
								                  led3=0;led4=1;}
                   break;
            default :break;
   
                                }//end switch
             /************end man controll*****/
                   }//end man controll
			 led_for_status();
            }
}
/***************declare for time interrupt*********/
void time0() interrupt 1  {
    TR0=0;
    TH0=0x3c;
    TL0=0xAF;
    d50ms=d50ms+1;
	if(d50ms>=20)
	{ time_out_second=time_out_second+1;
	  d50ms=0;}
	TR0=1;
}
//for delay for  system
void time1() interrupt 3  {
    TR1=0;
    TH1=0x3c;
    TL1=0xAF;
    delay_1s=delay_1s+1;
	man_second=man_second+1;
	if(man_second>=20) man_second=3;
	if(delay_1s>=20)
	{ second=second+1;
	 if(second>=20) second=10;
     if(RF_urgent_flag==1){ RF_urgent_second=RF_urgent_second+1;
                             if(RF_urgent_second>=3) 
							          {RF_urgent_second=0;
									  RF_urgent_flag=0;}
                            }//end man urgent flag
	  if(MAN_urgent_flag==1){ MAN_urgent_second=MAN_urgent_second+1;
                             if(MAN_urgent_second>=2) 
							          {MAN_urgent_second=0;
									  MAN_urgent_flag=0;}
                            }//end man urgent flag
	  delay_1s=0;}
	TR1=1;
}

⌨️ 快捷键说明

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