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

📄 board.bak

📁 单片机控制面板程序
💻 BAK
📖 第 1 页 / 共 4 页
字号:
                 } 
			  }
			break;
			}
		 case SHOW_CMD:
		    {
			if(rx_point>=5)
			  {
			  rx_point=0;
			  if(send_over_kind==SHOW_CMD)
			     {
				 send_over_kind=0;
                 send_over_flag=0;//清除一类数据发送完标志位
			     send_kind=send_kind&0xbf;//清除本次显示命令标志位
			     temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
			     if(temp_data==rx_buffer[4])
			      {
				  show_data=(rx_buffer[2]<<8)|rx_buffer[3];	
	 			  switch(led_data)
				    {
					 case 24:case 25:
					   {
					    show_data=(long)show_data/30;//3000表示T1周期寄存器最大值
						break;
						}
					 default:break;
					 }
				  }
				}
			  }
			break;
			}
		 case FAULT_STACK_CMD:
		    {
			if(rx_point>=4)
			  {
			  rx_point=0;
			  if(send_over_kind==FAULT_STACK_CMD)
			     {
				 send_over_kind=0;
                 send_over_flag=0;//清除一类数据发送完标志位
			     send_kind=send_kind&0xdf;//清除本次显示命令标志位
			     temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2];
			     if(temp_data==rx_buffer[3])
			      {
				  error_data=rx_buffer[2];		 
				  }
				}
			  }
			break;
			}
		 case HEART_CMD:
		    {
			rx_point=0;
			if(send_over_kind==HEART_CMD)
			  {
			   send_over_kind=0;
			
			   send_over_flag=0;//清除一类数据发送完标志位
			   send_heart_last_count=0;
			   send_kind=send_kind&0x7f;//清除本次心跳命令标志位
 			  }
			break;
			}
		  case FAULT_CMD:
		    {
			if(rx_point>=5)
			  {
			  rx_point=0; 
			  if(send_over_kind==FAULT_CMD)
			   {  
			    send_over_kind=0; 
			   
			   send_over_flag=0;//清除一类数据发送完标志位
			   send_kind=send_kind&0xef;//清除本次故障显示命令标志位
			   temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
			   if(temp_data==rx_buffer[4])
			     {
                 fault_data=(rx_buffer[1]<<8)|rx_buffer[2];	
                 sys_state=rx_buffer[3];
				 }
			   }
			  }
			break;
		    }
	      case RESET_KEY_CMD:
		    {    
			rx_point=0;
			if(send_over_kind==RESET_KEY_CMD)
			  {
              send_over_kind=0;
			  send_over_flag=0;//清除一类数据发送完标志位
			  send_kind=send_kind&0xfd;//清除本次按键命令标志位
			  }
			break;
			}
		  case SET_FU_CMD:
		    {
            if(rx_point>=5)
			  {
			  rx_point=0;
			  if(send_over_kind==SET_FU_CMD)
			    {
			    send_over_kind=0;
			   
			    send_over_flag=0;//清除一类数据发送完标志位
			    send_kind=send_kind&0xf7;//清除本次设置菜单命令标志位
                temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
			    if(temp_data==rx_buffer[4])
			     {
				 set_data=(rx_buffer[2]<<8)|rx_buffer[3];
                 if(led_data==5)
				   {
				   if(set_data>0) 
				     set_data=ceil((long)set_data*1.5*5/(1.5*0.4*6*2.048*100));
				   if(set_data<0)
				     set_data=floor((long)set_data*1.5*5/(1.5*0.4*6*2.048*100));
				   }
				  }
                if(function_key_kind==1)//是参数COPY键时处理
                  {
                   led_data++;
                  }
				}
			   }
			 break;
			}
		  default:break;
		 }
}
//============================================================
//程序说明:这里根据实际情况将5个LED灯进行控制
//============================================================
void led_pro()
{
    char j,led_temp=0xff;
	bit  led_bit;
//===========================================================
	if(confirm==0x21)//系统处于设置菜单时点亮菜单设置灯
       light_set_flag=1;
    else
       light_set_flag=0;
//===========================================================
    if(fault_data!=0)//系统有故障产生,则闪烁故障灯
	    light_fault_flag=1;
	else
	    {
		 light_fault_flag=0;
		 light_fault_flash_flag=0;
		 light_fault_flash_count=0;
		 }
//===========================================================
    if(sys_state&0x4)//已经有能量回馈后回馈灯常亮,
	   { 
	    light_work_flag=1;
		light_work_flash=0;
		light_work_flash_flag=0;
		light_work_flash_count=0;
		}
    else
	  {
	   if(sys_state&0x8)//没有回馈只有使能时,回馈灯闪烁
	     {
		  light_work_flag=1;
		  light_work_flash=1;
		  }
	   else             //没有回馈也没有使能,则不亮灯
	      {
		  light_work_flag=0;
		  light_work_flash=0;
		  light_work_flash_flag=0;
		  light_work_flash_count=0;
		  }
	   }
//============================================================  
    if(light_power_flag==1)
	   led_temp=led_temp&0x7f;
//============================================================
	if(light_set_flag==1)
	   led_temp=led_temp&0xbf;
//============================================================
	if(light_fault_flag==1)
	   {
	    if(light_fault_flash_flag==1)
		   led_temp=led_temp&0xdf;
		light_fault_flash_count++;
        if(light_fault_flash_count>200)//故障灯闪烁处理
		  {
		   light_fault_flash_count=0;
		   if(light_fault_flash_flag==1)
		      light_fault_flash_flag=0;
		   else
		      light_fault_flash_flag=1;
		   }
		}
//===========================================================
	if(light_work_flag==1)
	  {
       if(light_work_flash==0)
	      led_temp=led_temp&0xef;//回馈灯不闪烁处理
       else
        {
         if(light_work_flash_flag==1)
          led_temp=led_temp&0xef;//回馈灯闪烁处理

          light_work_flash_count++;
	     if(light_work_flash_count>200)
		   {
		    light_work_flash_count=0;
		    if(light_work_flash_flag==1)
			   light_work_flash_flag=0;
		    else
			   light_work_flash_flag=1;
		   }
         }
	   }
//============================================
/*	if(led_com_flag==1)
	   led_temp=led_temp&0xf7;*/

	for(j=0;j<8;j++)
           {
            if(led_temp&0x1==1)
              led_bit=1;
            else
              led_bit=0;
            CLK=0;
            DI=led_bit;
            CLK=1;
            led_temp=led_temp>>1;
           }
       RCK=0;
       RCK=1;
       led_temp=P2|0xf8;
       led_temp=led_temp&0xf7;
       P2=led_temp;

}
//============================================================
//程序说明:一旦检测到主机故障,人机界面跳到故障显示
//============================================================
fault_pro(void)
{

		 fault_number=0;
		 if(time_i==16)//参数复位
		    time_i=1;
		 if(fault_temp&0x8000)//参数复位
		    fault_temp=0x1;

		 for(time_i;time_i<16;)
		   {
		    if(fault_data&fault_temp)
			   {
			    fault_number=time_i;
				}
			fault_temp=fault_temp<<1;
			time_i++;
			if(fault_number!=0)//已经采集到故障后,跳出
			   break;
			}

		  if(fault_number==0)
		    {
			 time_i=1;
			 fault_temp=0x1;
             for(time_i;time_i<16;)
		      {
		       if(fault_data&fault_temp)
			     {
			      fault_number=time_i;
				  }
		       fault_temp=fault_temp<<1;
			  time_i++;
			 if(fault_number!=0)//已经采集到故障后,跳出
			    break;
			 }
		    }

	  switch(fault_number)
	     {
		 case 0:
		     {
			  led01=10;//F.--
              led02=10;
              led03=15;
              led04=19;
			  fault_show_flag=0;
			  break;
			  } 
		 case 1:
		     {
			  led01=17;//F.OC
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 2:
		     {
			  led01=17;//F.SC
              led02=25;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 3:
		     {
			  led01=28;//F.EF 表示外部输入故障
              led02=18;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 4:
		     {
			  led01=23;//F.EP
              led02=18;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 5:
		     {
			  led01=24;//F.FR
              led02=28;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 6:
		     {
			  led01=20;//F.OH
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 7:
		     {
			  led01=26;//F.OU
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }		  
          case 8:
		     {
			  led01=24;//F.ER
              led02=18;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
          case 9:
		     {
			  led01=22;//F.PO
              led02=23;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
          case 10:
		     {
			  led01=24;//F.UA
              led02=26;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 11:
		     {
			  led01=24;//F.OA
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
          case 12:
		     {
			  led01=21;//F.OL
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
          case 13:
		     {
			  led01=26;//F.UU
              led02=26;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  case 14:
		     {
			  led01=25;//F.OS
              led02=22;
              led03=15;
              led04=19;
			  fault_show_flag=1;
			  break;
			  }
		  default:break;
		 }
		   
}
//=============================================================
//程序说明:1ms子中断
//=============================================================
void T0_PERIOD(void) interrupt 1        //外中断,接收中断子程序
{

      TH0=0xfc;
      TL0=0x66;                  //1ms


      send();//发送程序
      
	  led_pro();//点灯程序
//====================================
//通讯未成功,报故障,其他菜单不响应
//====================================
	  if(send_success_flag==0)
	     {
		  confirm=0;//通讯不正常时,需要初始化某些参数
		  point_flag=0;
		  high_led_number=4;
          led_pos=0;
		  first_flag2=0;
		  fault_first_flag=0;
		  send_ask_set_flag=0;
		  send_ask_fault_flag=0;
		  fault_enter_flag=0;
		  send_on_kind=0;

          led01=17;//F.EC
          led02=18;
          led03=15;
          led04=19;
	      fault_show_flag=1;
		 }
	  else//通讯正常后,判断是否存在故障
	     {
//=====================================
          if(fault_data!=0)
	        {
			if(fault_enter_flag==1)
			 {
			 fault_enter_flag=0;
             if(fault_first_flag==0)//一旦出现故障,没有模式键前提下,不断更新
		      {
			   confirm=0;
		       point_flag=0;
			   //high_led_number=4;
               led_pos=0;
		       fault_pro();//故障处理程序
			   first_flag2=0;
		      }
             }
			else
			  fault_enter_flag++;
			}
	       else
             {
			  fault_enter_flag=0;
              if((first_flag2==0)&&(confirm==0))//一旦通讯正常后,只进入一次
 			  {
			  led01=10;//F.--
              led02=10;
              led03=15;
              led04=19;
			  first_flag2=1;
			  }
			  fault_show_flag=0;//没有任何故障,不需要置位
			  fault_first_flag=0;
			  }
	 	 }
//===================================
//以下程序用来定时:当一类数据发送完成时,
//10ms还没收到主机应答时,需要再次发送
//====================================
	  if(send_over_flag==1)
	      send_inter_count++;
	  else
	      send_inter_count=0;

	  if(send_inter_count>SEND_COMM_ERROR)
	      {
		   send_over_kind=0;
		   send_over_flag=0;
		   send_inter_count=0;
		   rx_point=0;
		   send_on_kind=0;
		   }
//==================================
//定时置发送类标志
//==================================
   if(send_success_flag==1)
      {
       send_hand_count=0;

	   send_fault_count++;
       if(send_fault_count>=SEND_FAULT_TIME)
          {
           send_kind=send_kind|SEND_FAULT;
           send_fault_count=0;
          }
       send_heart_count++;
       if(send_heart_count>=SEND_HEART_TIME)
         {
          send_kind=send_kind|SEND_HEART;
          send_heart_count=0;
         }
       send_heart_last_count++;
       if(send_heart_last_count>=SEND_HEART_LAST_TIME)
         {
          send_success_flag=0;
          send_heart_last_count=0;
          }
       }
    else
       {
	    send_fault_count=0;//通讯不正常时,需要初始化某些参数
        send_heart_count=0;
        send_heart_last_count=0;
		send_over_kind=0;
		send_over_flag=0;
		send_point=0;
		rx_point=0;
        send_on_flag=0;
		set_data=0;
		fault_data=0;
		show_data=0;
		sys_state=0;
		error_data=0;
		key_sample_code=0;

		send_show_count=0;
		send_kind=send_kind&SEND_HAND;
        send_hand_count++;
        if(send_hand_count>=SEND_HAND_TIME)
           {
		    send_kind=send_kind|SEND_HAND;
            send_hand_count=0;
           }
        } 
//============================================
//显示类数据只有进入显示菜单,并且联网成功后发送

⌨️ 快捷键说明

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