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

📄 board.bak

📁 单片机控制面板程序
💻 BAK
📖 第 1 页 / 共 4 页
字号:
					  break;
					  }
					  case 2:
					  {
					  led_pos=led_pos-1;
                      if(led_pos==0)
                        led_pos=2;
					  break;
					  }
					  case 1:
					  {
					  led_pos=led_pos-1;
                      if(led_pos==0)
                        led_pos=1;
					  break;
					  }
					  default:break;
					  }
                    break;
                   }
                default:break;
                }
			 }
		  break;
          }
       case RESET_KEY:
           {
           if(confirm==0x31)//只有在故障查看菜单中才能进行软件复位
		      {  
              if(key_sample_count_h>5)
                {
                 key_sample_count_h=0;
                 if(function_key_kind==0)//没有其它功能键按下的情况下才能处理复位
                   {
                    function_key_kind=4;//4表示是复位键
                    send_kind=send_kind|SEND_KEY;
		   
		            send_ask_set_flag=0;
		            send_ask_fault_flag=0;
		            point_flag=0;
		            high_led_number=4;
                    led_pos=0;
		            confirm=0;
		
		            led01=10;//F.--
                    led02=10;
                    led03=15;
                    led04=19;
		            fault_show_flag=0;
		            fault_data=0;
                   }
                }
              }
		   break;
          }
       default:
          {
           key_sample_count_h=0;
           break;
          }
     }
}
//================================
//程序说明:读取显示序号
//================================
show_mode()
{
    led_data=led01+led02*10;
	if(led_data>40)//参数个数限幅
	   led_data=40;
    if(led_data==0)//参数个数限幅
	   led_data=1;

    led_pos=0;
    confirm=0x11;
}
//========================================================
//程序说明:读取主机故障堆栈,序号在前,表示最新发生的故障
//========================================================
fault_mode()
{
    led_data=led01+led02*10;
	if(led_data>20)//参数个数限幅
	   led_data=20;
	if(led_data==0)//参数个数限幅
	   led_data=1;

    led_pos=0;
    confirm=0x31;
}
//==================================
//程序说明:根据接收到的数据,用于显示
//实时刷新
//==================================
value_show()
{
    show_num++;
    if(show_num>2)
        {
         show_num=1;
         if(confirm==0x11)
           {
           if(show_data>=0)
                     {
                      neg_flag=0;
                      buffer=show_data;
                      }
                  else
                     {
                      neg_flag=1;
                      buffer=-show_data;
                      }
				  if(led_data==4)//4号参数进行1位小数
                     point_flag=1;
				  else if((led_data>=26)&&(led_data<=28))
				     point_flag=2; 
				  else if((led_data==6)||(led_data==24)||(led_data==25)||(led_data==5)||(led_data==19))
				     point_flag=2;
				  else                             
                     point_flag=0;               //其他参数不需要进行小数点处理
				  
				  chd_show();
 		   }
		}
}		   
//================================
//程序说明:读取设置序号
//================================
set_mode()
{
    led_data=led01+led02*10;

//以后只要在这里进行修改,即可以完成厂家面板和用户面板的区别。

/*	   if(led_data>18)//参数个数限幅
	    led_data=18;
	   if(led_data==0)//参数个数限幅
	    led_data=1;*/
	  
	if(led_data>70)
	   led_data=70;
	if(led_data==0)//参数个数限幅
	   led_data=1;

    led_pos=1;
    confirm=0x21;
}
//================================
//程序说明:根据收到的数据,用于显示
//只刷新一次
//================================
set_show()
{
    if(confirm==0x21)
    {
    if((send_kind&SEND_FU)==0)
	   {
	   set_rev_flag=1;
       send_ask_set_flag=0;
	   }
	if(set_data>=0)
       {
        neg_flag=0;
        buffer=set_data;
       }
   else
       {
        neg_flag=1;
        buffer=-set_data;
       }
    if(led_data==2)//2号参数需要进行小数点处理
	      point_flag=2;
	else                            //其他参数不需要进行小数点处理
          point_flag=0;   
//根据设置参数的最大范围来显示数码管   
    switch(led_data)
      {
	   case 1:case 3:
	     {
		  high_led_number=3;
		  break;
		 }
	   case 2:
	    {
		  high_led_number=4;
		  break;
		 }
      case 11:case 5:
	    {
		  high_led_number=2;
		  break;
		 }
	  case 4:case 6:case 7:case 8:case 9:case 10:case 12:case 13:case 14:case 15:case 16:
        {
		  high_led_number=1;
		  break;
		 }
	  default:
	    {
		  high_led_number=4;
		  break;
		 }
	   }
//==================================
    chd();

   }
}
//================================
//程序说明:根据收到的数据,用于显示
//只刷新一次
//================================
fault_show()
{
    high_led_number=4;

    if(confirm==0x31)
    {
    if((send_kind&SEND_FAULT_STACK)==0)
	  {
	  send_ask_fault_flag=0;
	  }
	if(error_data>=0)
       {
        neg_flag=0;
        buffer=error_data;
       }
   else
       {
        neg_flag=1;
        buffer=-error_data;
       }
   chd();
   led03=27;
   led04=18;
   }
}
//===============================
//程序说明:将led上设置的值读入
//==============================
set_value()
{
    led_pos=0;
//============================	
    switch(led_data)
      {
	   case 1:case 3:
	     {
		  high_led_number=3;
		  break;
		 }
	   case 2:
	    {
		  high_led_number=4;
		  break;
		 }
      case 11:case 5:
	    {
		  high_led_number=2;
		  break;
		 }
	  case 4:case 6:case 7:case 8:case 9:case 10:case 12:case 13:case 14:case 15:case 16:
        {
		  high_led_number=1;
		  break;
		 }
	  default:
	    {
		  high_led_number=4;
		  break;
		 }
	   }
//===================================	
	rev_chd();
    set_data=buffer;

	if(led_data==5)
	    {
	    set_data=(long)set_data*1.5*0.4*6*2.048*100/(1.5*5);//最大电流设置的转换,60欧姆采样电阻 
        }

}
//================================
//程序说明:将数字拆分为几个数码管显示值
//================================
chd()
{
   led01=buffer%10;
   buffer=buffer/10;
   led02=buffer%10;
   buffer=buffer/10;
   led03=buffer%10;

   led04=buffer/10;

   if(neg_flag!=0)
     led04=10;

   switch(high_led_number)
     {
	  case 1:
	     {
		  led02=15;
		  led03=15;
		  led04=15;
		  break;
		  }
	   case 2:
	     {
		  led03=15;
		  led04=15;
		  break;
		  }
	   case 3:
	     {
		  led04=15;
		  break;
		  }
	   default:break;
	   }
}
//===============================
//程序说明:显示菜单显示的几个数码管值
//===============================
chd_show()
{
   led01=buffer%10;
   buffer=buffer/10;
   led02=buffer%10;
   buffer=buffer/10;
   led03=buffer%10;

   led04=buffer/10;

//========================================
   switch(point_flag)  //根据小数点位置的不同,处理最高位是零的情况。
    {
	 case 0:
	 {
      if(led04==0)
       {
	   led04=15;
	   if(led03==0)
	     {
		  led03=15;
		  if(led02==0)
		    {
			led02=15;
			}
		  }
		}
	  break;
	  }
     case 1:
	 {
	  if(led04==0)
	   {
	    led04=15;
		if(led03==0)
		  {
		   led03=15;
		   }
		}
	  break;
	  }
	 case 2:
	  {
	   if(led04==0)
	      {
		  led04=15;
		  }
	   break;
	  }
	 default:break;
    }
   if(led_data==19)
     {
      led04=10;//-
      led03=led02;
      led02=led01;
      led01=10;//-
     }
//=================================
   if(neg_flag!=0)
      led04=10;
}
//================================
//程序说明:将数码管显示值合并
//================================
rev_chd()
{
    switch(high_led_number)
	 {
	 case 4:
	  {
       buffer=led01+led02*10+led03*100+led04*1000;
	  break;
	 }
	 case 1:
	  {
	   buffer=led01;
	   break;
	  }
	 case 2:
	  {
       buffer=led01+led02*10;
	   break;
	  }
	 case 3:
	  {
	   buffer=led01+led02*10+led03*100;
	   break;
	  }
	 default:break;
	}
}
//================================
//程序说明:根据指针读取显示字符
//================================
getcode()
{
    const int *p;
    p=led_table;
    ledcode01=*(p+led01);
    ledcode01flash=*(p+led01);

    ledcode02=*(p+led02);
    ledcode02flash=*(p+led02);

    ledcode03=*(p+led03);
    ledcode03flash=*(p+led03);

    ledcode04=*(p+led04);
    ledcode04flash=*(p+led04);

    switch(led_pos)
       {
        case 1:
           {
            ledcode01flash=0xff;
            break;
           }
        case 2:
           {
            ledcode02flash=0xff;
            break;
           }
        case 3:
           {
            ledcode03flash=0xff;
            break;
           }
        case 4:
           {
            ledcode04flash=0xff;
            break;
           }
        default:break;
       }
	if(fault_show_flag==1)//存在故障,则需要闪烁的效果
	   {
	    ledcode01flash=0xff;
		ledcode02flash=0xff;
        ledcode03flash=0xff;
        ledcode04flash=0xff;
	   }
    if(point_flag==1)//表示在倒数第二位显示小数点
        {
         ledcode02=ledcode02&0xfe;
         ledcode02flash=ledcode02flash&0xfe;
        }
	if(point_flag==2)//表示在倒数第三位显示小数点
	   { 
        ledcode03=ledcode03&0xfe;
        ledcode03flash=ledcode03flash&0xfe;
        }
}
//================================
//程序说明:键盘采样
//================================
key_sample()
{
    char i;
    char key_sample_bit=0;

    CLK=0;
    SL=0;
    CLK=1;
    SL=1;//时钟上升沿发送锁存信号

    for(i=0;i<8;i++)
      {
       CLK=0;
       if(QH==0)//采到低电平表示有键按下
          {
          key_sample_bit=0x1;
          }
        else
          {
          key_sample_bit=0;
          }
       CLK=1;
       key_sample_code=key_sample_code|(key_sample_bit<<(7-i));//键值合成
      }
}
//===============================
//程序说明:系统主程序
//===============================
void main()
{
      PCON=0;
      AUXR=0x40;
      TH0=0xfc;    //1ms
      TL0=0x66;
      ET0=1;

      SCON=0x50;
      TH1=0xF1;    //23.8345kb
      TL1=0xF1;
      ES=1;
      TMOD=0x21;

      EA=1;
      TR0=1;
      TR1=1;

      /*eeprom_erase();

      eeprom_write();*/

//===========================start
      led_show_value[0]=0xff;
      led_show_value[1]=0xff;
      led_show_value[2]=0xff;
      led_show_value[3]=0xff;

      led01=10;
      led02=11;
      led03=12;
      led04=10;
//==================================
      show_data=0;//系统显示数据清零

      set_data=0;//系统设置数据清零

	  fault_data=0;//系统故障清零

	  sys_state=0;//系统状态清零

	  light_power_flag=1;
//============================
    while(1)
	   {
         ;
        }

}

⌨️ 快捷键说明

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