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

📄 dph.c

📁 动平衡机 51单片机
💻 C
📖 第 1 页 / 共 5 页
字号:
              urx_ave+=urx_new;
              ury_ave+=ury_new;
              if(ad_count>5)
              {
               ulx_ave-=ulx[0];
               uly_ave-=uly[0];
               urx_ave-=urx[0];
               ury_ave-=ury[0];
              for(i=0;i<4;i++)
              {
               ulx[i]=ulx[i+1];
               uly[i]=uly[i+1];
               urx[i]=urx[i+1];
               ury[i]=ury[i+1];
               }
              ulx[4]=ulx_new;
              uly[4]=uly_new;
              urx[4]=urx_new;
              ury[4]=ury_new;
              ulx_new=(float)ulx_ave/5.0;
              uly_new=(float)uly_ave/5.0;
              urx_new=(float)urx_ave/5.0;
              ury_new=(float)ury_ave/5.0;
             }
             else
             {
              ulx[ad_count-1]=ulx_new;
              uly[ad_count-1]=uly_new;
              urx[ad_count-1]=urx_new;
              ury[ad_count-1]=ury_new;
              ulx_new=(float)ulx_ave/ad_count;
              uly_new=(float)uly_ave/ad_count;
              urx_new=(float)urx_ave/ad_count;
              ury_new=(float)ury_ave/ad_count;
              ad_count++;
              }             
               */


              if(sim==1)
              {
               ulx_new-=ulx_sim;
               uly_new-=uly_sim;
               urx_new-=urx_sim;
               ury_new-=ury_sim;
              }
              test.ul_x=ulx_new;
              test.ul_y=uly_new;
              test.ur_x=urx_new;
              test.ur_y=ury_new;
              if(prod==1)
              {
               test.ul_x-=urx_new*compen.kfl;
               test.ur_x-=ulx_new*compen.kfr;
               test.ul_y-=ury_new*compen.kfl;
               test.ur_y-=uly_new*compen.kfr;
              }
              test.ul=test.ul_x*test.ul_x+test.ul_y*test.ul_y;
              test.ul=sqrt(test.ul);
              test.ul/=k_gain[gain_l];
              test.ur=test.ur_x*test.ur_x+test.ur_y*test.ur_y;
              test.ur=sqrt(test.ur);
              test.ur/=k_gain[gain_r];

              if(prod==1)
              {
               test.ul*=compen.kbl;
               test.ur*=compen.kbr;
              }
            }


           void lrfb(void)
           {
            float xdata k,kx,ky;
            if(lock==0)
            {
             return;
            }
            EX1=1;
            busy();
            LCDS=0x01;
            busy();
            LCDS=0xc0;
            lcddsp(f_b_inf);
            key=0xff;
            ulx_ave=0;
            uly_ave=0;
            urx_ave=0;
            ury_ave=0;
            ad_count=1;
            prod=0;
            do
            {
             key=getkey();
             if((data_redy==1)&&(sec1s==1))
             {
              caluxy();
              if(menu_state==9)
              {
               if(cp==0)
               {
                if(test.ur_x==0)         kx=0;
                else   kx=test.ul_x/(test.ur_x);
                if(test.ur_y==0)         ky=0;
                else   ky=test.ul_y/(test.ur_y);
                k=(kx+ky)/2;
                if((k>=1)||(k<=-1))  k=0;
                sprintf(fb_buf," KL_R=%1.4f&",k);
               }
               else
               {
                if(test.ul_x==0)   kx=0;
                else   kx=test.ur_x/(test.ul_x);
                if(test.ul_y==0)   ky=0;
                else   ky=test.ur_y/(test.ul_y);
                k=(kx+ky)/2;
                if((k>=1)||(k<=-1))  k=0;
                sprintf(fb_buf,"  KR_L=%1.4f&",k);
               }
              } 
              else if(menu_state==10)
              {
               if(test.ul==0)  test.ul=100;
               k=gml/test.ul;
               sprintf(fb_buf,"KL_g=%1.4f&",k);
              }
              else if(menu_state==11)
              {
               if(test.ur==0)  test.ur=100;
               k=gmr/test.ur;
               sprintf(fb_buf,"KR_g=%1.4f&",k);
              }
              busy();
              LCDS=0x80;
              lcddsp(fb_buf);
              data_redy=0;
              sec1s=0;
             }
            }while((key!=MENU)&&(key!=ENTER)&&(lock==1));
            if(key==ENTER)
            {
             keybit=1;
             if(menu_state==9)
             {
              if(cp==0)
              {
               compen.kfl=k;
               if(compen.kfl<0)
               {
                kl_r_abs=-compen.kfl;
                kl_r_sign=1;
               }
               else
               {
                kl_r_abs=compen.kfl;
                kl_r_sign=0;
               }

              sprintf(lcd_buf[10],"  KL_R= %1.4f&",kl_r_abs);
              if(kl_r_sign==1)  lcd_buf[10][7]='-';
              else         lcd_buf[10][7]='+';
             }
             else
             {
               compen.kfr=k;
               if(compen.kfr<0)
               {
                kr_l_abs=-compen.kfr;
                kr_l_sign=1;
                }
                else
                {
                 kr_l_abs=compen.kfr;
                 kr_l_sign=0;
                }
               sprintf(lcd_buf[11],"  KR_L= %1.4f&",kr_l_abs);
               if(kr_l_sign==1)  lcd_buf[11][7]='-';
               else         lcd_buf[11][7]='+';
             }
            }
             else if(menu_state==10)
             {
              compen.kbl=k;
              if((compen.kbl<0)||(compen.kbl>1.0))
              compen.kbl=1.0;
              sprintf(lcd_buf[8],"KL_g=%1.4f g/mv&",compen.kbl);
             }
             else if(menu_state==11)
             {
              compen.kbr=k;
              if((compen.kbr<0)||(compen.kbr>1.0))
              compen.kbr=1.0;
              sprintf(lcd_buf[9],"KR_g=%1.4f g/mv&",compen.kbr);
             }
            }
           }

        void state00(void)
        {
         re_scr=0;
         switch(key)
         {
          case 1:
          if(cp==0)  cp=3;
          else       --cp;
          if(cp==0)
          {
          busy();
          LCDS=0x80;
          }
          else if(cp==1)
          {
          busy();
          LCDS=0x88;
          }
          else if(cp==2)
          {
          busy();
          LCDS=0xc0;
          }
          else if(cp==3)
          {
          busy();
          LCDS=0xc8;
          }
          break;
          case 2:
          cp++;
          if(cp>3)  cp=0;
          if(cp==0)
          {
          busy();
          LCDS=0x80;
          }
          else if(cp==1)
          {
          busy();
          LCDS=0x88;
          }
          else if(cp==2)
          {
          busy();
          LCDS=0xc0;
          }
          else if(cp==3)
          {
          busy();
          LCDS=0xc8;
          }
          break;
          case 3:  
          if(cp==0)
          {
           menu_state=1;
           cp=0;
           re_scr=1;
          }
          else if(cp==1)
          {
           menu_state=9;
           re_scr=1;
           cp=0;
          }
          else if(cp==2)
          {
           menu_state=12;
           re_scr=1;
           cp=0;
           
          }
          else if(cp==3)
          {
           menu_state=13;
           re_scr=1;
           cp=0;
           
          }
          break;
         }
        }

       void state01(void)     
       {
        switch(key)
         {
          case 3:
          if(cp==0)
          {
           menu_state=3;
           re_scr=1;
           cp=0;
          }
          else 
          {
           menu_state=2;
           cp=0;
           re_scr=1;
          }
          break;
          case 1:
          if(cp==0)
          {
           cp=1;
           busy();
           LCDS=0xc3;
          }
          else
          {
           cp=0;
           busy();
           LCDS=0x83;
          }
          break;
          case 2:
          if(cp==0)
          {
           cp=1;
           busy();
           LCDS=0xc3;
          }
          else
          {
           cp=0;
           busy();
           LCDS=0x83;
          }
          break;
         }
       }


       void state02(void)  
       {
         uchar xdata i,c; 
         switch(key)
         {
          case 1:
          if(cp==0)
          {
          cp=1;
          busy();
          LCDS=0xc9;
          }
          else 
          {
            cp=0;
            busy();
            LCDS=0xc1;
           }
          break;

          case 2:
          if(cp==0)
          {
          cp=1;
          busy();
          LCDS=0xc9;
          }
          else 
          {
          cp=0; 
          busy();
          LCDS=0xc1;
          }
          break;
          case 3:
          if(cp==0)
          {
          menu_state=14;
          cp=0;
          re_scr=1;
          }
          else if(cp==1)
          {
          menu_state=15;
          cp=0;
          re_scr=1;
          }
          break;
         }
       }
       void state14(void)    
       {
         uchar xdata i,c; 
         switch(key)
         {
          case 2:
          if(cp==1)
          {
          cp=0;
          busy();
          LCDS=0x89;
          }
          else
          {
          cp=1 ;
          busy();
          LCDS=0x88;
          }
          break;
          case 1:
          busy();
          c=LCDR;
          busy();
          LCDS=0x10;
          if(c>=0x39) c=0x30;
          else c++;
          busy();
          LCDD=c;
          busy();
          LCDS=0x10;
          break;
          case 3:
          menu_state=1;
          cp=0;
          re_scr=1;
          busy();
          LCDS=0x88;
          for(i=0;i<2;i++)
          {
          busy();
          c=LCDR;
          set_buf[i]=c;
          lcd_buf[28][8+i]=c;
          lcd_buf[4][8+i] =c;
          }
          busy();
          LCDS=0x10;
          busy();
          LCDS=0x10;
          set_buf[2]=0x00;
          load_no=atoi(set_buf);
          if((load_no>=0)&&(load_no<100))
          {
            compen.kfl=save_para[load_no].kfl     ;
            compen.kfr=save_para[load_no].kfr     ;
            compen.kbl=save_para[load_no].kbl     ;
            compen.kbr=save_para[load_no].kbr     ;
            compen.m  =save_para[load_no].m       ;
          /*  compen.no =save_para[load_no].no      ; */
            compen.a  =save_para[load_no].a       ;
            compen.b  =save_para[load_no].b       ;
            compen.c  =save_para[load_no].c       ;
            compen.L_r=save_para[load_no].L_r     ;
            compen.R_r=save_para[load_no].R_r     ;
            compen.t  =save_para[load_no].t       ;
            compen.speed=save_para[load_no].speed ;
            compen.range=save_para[load_no].range ;
            ini_buf();
          }
          else load_no=0;
          break;
         }
       }
       void state15(void)    
       {
         uchar xdata i,c;
         switch(key)
         {
          case 2:
          if(cp==1)
          {
          cp=0;
          busy();
          LCDS=0x89;
          }
          else
          {
          cp++ ;
          busy();
          LCDS=0x88;
          }
          break;
          case 1:
          busy();
          c=LCDR;
          busy();
          LCDS=0x10;
          if(c>=0x39) c=0x30;
          else c++;
          busy();
          LCDD=c;
          busy();
          LCDS=0x10;
          break;
          case 3:
          menu_state=1;
          cp=0;
          re_scr=1;
          busy();
          LCDS=0x88;
          for(i=0;i<2;i++)
          {
          busy();
          c=LCDR;
          set_buf[i]=c;
          }
          busy();
          LCDS=0x10;
          busy();
          LCDS=0x10;
          set_buf[2]=0x00;
          save_no=atoi(set_buf);
          if((save_no>=0)&&(save_no<100))
          {
            save_para[save_no].kfl=compen.kfl     ;
            save_para[save_no].kfr=compen.kfr     ;
            save_para[save_no].kbl=compen.kbl     ;
            save_para[save_no].kbr=compen.kbr     ;
            save_para[save_no].m  =compen.m       ;
        /*    save_para[save_no].no =compen.no      ;  */
            save_para[save_no].a  =compen.a       ;
            save_para[save_no].b  =compen.b       ;
            save_para[save_no].c  =compen.c       ;
            save_para[save_no].L_r=compen.L_r     ;

⌨️ 快捷键说明

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