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

📄 board.c

📁 单片机控制面板程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	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_show()
{
    if(confirm==0x21)
    {
    if((send_kind&SEND_FU)==0)//发送值已经清除,则表示已经接受到DSP的设置数据
	   {
	   set_rev_flag=1;//此时可以将数码管上的显示数据设置进DSP内部
       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_flash_flag==1)//存在故障,则需要闪烁的效果,此时是4位同时闪烁,不同于常规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;

//===========================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 + -