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

📄 dph.c

📁 动平衡机 51单片机
💻 C
📖 第 1 页 / 共 5 页
字号:
            for(i=0;i<3;i++)
            {
                  if((save_para[i].kfl>=1)||(save_para[i].kfl<=-1))    ;
                    save_para[i].kfl = 0;
                  if((save_para[i].kfr>=1)||(save_para[i].kfr<=-1))    ;
                    save_para[i].kfr = 0;
                  if((save_para[i].kbl>1)||(save_para[i].kbl<0))    ;
                    save_para[i].kbl = 1.0;
                  if((save_para[i].kbr>1)||(save_para[i].kbr<0))    ;
                    save_para[i].kbr = 1.0;
                  if((save_para[i].m>99)||(save_para[i].m<0))      ;
                    save_para[i].m = 10.0;
                  if((save_para[i].speed>9999)||(save_para[i].speed<0))  ;
                    save_para[i].speed = 1999;
                  if((save_para[i].range>9999)||(save_para[i].range<0))  ;
                    save_para[i].range = 100;
             /*     if((save_para[i].no>99)||(save_para[i].no<0))     ;
                    save_para[i].no = 0;  */
                  if((save_para[i].a>999)||(save_para[i].a<0))      ;
                    save_para[i].a =100 ;
                  if((save_para[i].b>999)||(save_para[i].b<0))      ;
                    save_para[i].b =100 ;
                  if((save_para[i].c>9999)||(save_para[i].c<0))      ;
                    save_para[i].c =100 ;
                  if((save_para[i].L_r>999)||(save_para[i].L_r<0))    ;
                    save_para[i].L_r =100 ;
                  if((save_para[i].R_r>999)||(save_para[i].R_r<0))    ;
                    save_para[i].R_r =100 ;
                  if((save_para[i].t>99)||(save_para[i].t<0))      ;
                    save_para[i].t =10 ;
            }
          }
          else {
                i=LIGK;
                if(i='k')
                 {
                   P1_1=0;   light=1;
                 }
                   else      light=0;
               }

          ini_buf();
          if((gml<0)||(gml>99.9))
           gml=1.0;
          sprintf(disp_buf,"%2.1f",gml);
          i=0;
          while(disp_buf[i]!='.')
          {
           i++;
          }
          lcd_buf[20][6]='.';
          lcd_buf[20][7]=disp_buf[i+1];
          if(i==1)
          {
          lcd_buf[20][5]=disp_buf[0];
          lcd_buf[20][4]='0';
          }
          else
          {
          lcd_buf[20][4]=disp_buf[0];
          lcd_buf[20][5]=disp_buf[1]; 
          }
          if((gmr<0)||(gmr>99.9))
           gmr=1.0;
          sprintf(disp_buf,"%2.1f",gmr);
          i=0;
          while(disp_buf[i]!='.')
          {
           i++;
          }
          lcd_buf[22][6]='.';
          lcd_buf[22][7]=disp_buf[i+1];
          if(i==1)
          {
          lcd_buf[22][5]=disp_buf[0];
          lcd_buf[22][4]='0';
          }
          else
          {
          lcd_buf[22][4]=disp_buf[0];
          lcd_buf[22][5]=disp_buf[1]; 
          }
          if((test.ul>4095.0)||(test.ul<-4095.0))
             { test.ul=0; test.al=0;}
          if((test.ur>4095.0)||(test.ur<-4095.0))
             { test.ur=0; test.ar=0;}
          if((test.al>360.0)||(test.al<0))
             { test.ul=0; test.al=0;}
          if((test.ar>360.0)||(test.ar<0))
             { test.ur=0; test.ar=0;}
          if((test.speed>9999)||test.speed<0)
              test.speed=0;
          sprintf(test.ul_buf,"L: %2.3f g&",test.ul);
          sprintf(test.al_buf," %3.0f&",test.al);
          sprintf(test.ur_buf,"R: %2.3f g&",test.ur);
          sprintf(test.ar_buf," %3.0f&",test.ar);
          sprintf(test.sp_buf,"Speed %4d r/min&",test.speed);
         }

         void ini_buf(void)
         {
          uchar i;
          if((compen.m<0)||(compen.m>99.9))
          compen.m=10.0;
          sprintf(disp_buf,"%2.1f",compen.m);
          i=0;
          while(disp_buf[i]!='.')
          {
           i++;
          }
          lcd_buf[17][8]='.';
          lcd_buf[17][9]=disp_buf[i+1];
          if(i==1)
          {
          lcd_buf[17][7]=disp_buf[0];
          lcd_buf[17][6]='0';
          }
          else
          {
          lcd_buf[17][6]=disp_buf[0];
          lcd_buf[17][7]=disp_buf[1]; 
          }

          if((compen.kfl<-9.99)||(compen.kfl>9.99))
              compen.kfl=0;
          if(compen.kfl<0)
          {
           kl_r_abs=-compen.kfl;
           kl_r_sign=1;
          }
          else
          {
           kl_r_abs=compen.kfl;
           kl_r_sign=0;
          }
          if((compen.kfr<-9.99)||(compen.kfr>9.99))
              compen.kfr=0;

          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[10],"  KL_R= %1.4f&",kl_r_abs);
          sprintf(lcd_buf[11],"  KR_L= %1.4f&",kr_l_abs);
          if(kl_r_sign==1)          lcd_buf[10][7]='-';
          else                      lcd_buf[10][7]='+';
          if(kr_l_sign==1)          lcd_buf[11][7]='-';
          else                      lcd_buf[11][7]='+';
          if((compen.kbl<0)||(compen.kbl>1.0))    compen.kbl=1;
          if((compen.kbr<0)||(compen.kbr>1.0))    compen.kbr=1;
          sprintf(lcd_buf[8],"KL_g=%1.4f g/mv&",  compen.kbl);
          sprintf(lcd_buf[9],"KR_g=%1.4f g/mv&",  compen.kbr);
          if((compen.L_r<0)||(compen.L_r>999))    compen.L_r=0;
          sprintf(lcd_buf[12]," L_r= %03d mm &",  compen.L_r);
          if((compen.R_r<0)||(compen.R_r>999))    compen.R_r=0;
          sprintf(lcd_buf[13]," R_r= %03d mm &",compen.R_r);
      /*    if((compen.no<0)||(compen.no>99))       compen.no=0;
          sprintf(lcd_buf[4],"     No. %02d&",compen.no); */
          if((save_no>99)||(save_no<0));          save_no=0;
          sprintf(lcd_buf[30],"    No. %02d&",save_no);
          if((load_no>99)||(load_no<0));          load_no=0;
          sprintf(lcd_buf[28],"    No. %02d&",load_no);
          sprintf(lcd_buf[4],"     No. %02d&",load_no); 
          if((compen.a<0)||(compen.a>999))        compen.a=0; 
          sprintf(lcd_buf[14],"  A = %03d mm &",compen.a);
          if((compen.b<0)||(compen.b>999))        compen.b=0;
          sprintf(lcd_buf[15],"  B = %03d mm &",compen.b);
          if((compen.c<0)||(compen.c>9999))       compen.c=0; 
          sprintf(lcd_buf[16],"  C = %04d mm&",compen.c);
          if((compen.t>99)||(compen.t<0))        compen.t=10;
          sprintf(lcd_buf[24]," Test_T: %2d  &",compen.t);
          if((add!='+')&&(add!='-'))    add='+';
          lcd_buf[25][9]=add;                
          if((compen.speed<0)||(compen.speed>9999))    compen.speed=9999;
          sprintf(lcd_buf[6],"Speed %04d r/min&",compen.speed);   
          if((compen.range<0)||(compen.range>9999))    compen.range=1000;
          sprintf(lcd_buf[7],"Range %04d r/min&",compen.range);
         }


         void screen(void)
         {
            if(menu_test==1)
            {
            busy();
            LCDS=0x01;
            busy();
            LCDS=0x80;
            lcddsp(lcd_buf[menu_state*2]);
            busy();
            LCDS=0xc0;
            lcddsp(lcd_buf[menu_state*2+1]);
            busy();
            LCDS=site_cp[menu_state]+0x80;
            }
            else
            {
              if(stop==0)
              {
              busy();
              LCDS=0x01;
              if(test_state==0)
              {
               busy();
               LCDS=0x80;
               lcddsp(test.ul_buf);
               busy();
               LCDS=0x8b;
               lcddsp(test.al_buf);
               busy();
               LCDS=0xc0;
               lcddsp(test.ur_buf);
               busy();
               LCDS=0xcb;
               lcddsp(test.ar_buf);
              }
              else if(test_state=1)
              {
               busy();
               LCDS=0x80;
               lcddsp(test.sp_buf);
               busy();
               LCDS=0xc0;
               lcddsp(ret_menu);
              }
             }
            }
         }


       void   timer0(void) interrupt 1 
       {
         TL0=V_TL0;
         TH0=V_TH0;
         time++;
         if(time>=20)
         {
          time=0;
          if(lock==1)
           {
            TR1=0;
            r_sp=TL1+TH1*256;
            TH1=0;
            TL1=0;
            TR1=1;
            sec1s=1;
           }
          }
         }
        void   ad(void) interrupt 2
        {
          uchar i;
          EX1=0;
          if((ADHB&0x20)==0)
          {
           u_ad[ch]=-(ADLB+(ADHB&0x0f)*256);
          }
          else
          {
           u_ad[ch]=ADLB+(ADHB&0x0f)*256;
          }  
          ch++;
          if(ch>3)
          {
           ch=0;
           data_redy=1;
          }
          switch (ch)
          {
           case 0:
           P1_6=0;
           P1_7=0;
           break;
           case 1:
           P1_6=1;
           P1_7=0;
           break;
           case 2:
           P1_6=0;
           P1_7=1;
           break;
           case 3:
           P1_6=1;
           P1_7=1;
           break;
          }
           EX1=1;
       }


        void prodata(void)
        {
         test.speed=r_sp;
         sp_error=compen.speed-r_sp;
         sp_error=abs(sp_error);
         if(test_state==1)
         {
         sprintf(test.sp_buf,"Speed %4d r/min&",test.speed);
         re_scr=1;
         }
         else if((sp_error<=compen.range)&&(test_state==0))
         {
         caluxy();
         test.al=atan2(-test.ul_x,test.ul_y );
         test.al*=57.29577951;
         if(test.al<0)  test.al+=360;
         test.al+=22;
         if(test.al>=360.0)    test.al-=360.0;
         test.ar=atan2(-test.ur_x,test.ur_y);
         test.ar*=57.29577951;
         if(test.ar<0)  test.ar+=360;
         test.ar+=19;
         if(test.ar>=360.0)  test.ar-=360.0;
         if(test.ul>=100.0)
         sprintf(test.ul_buf,"L: %4.1f g&",test.ul);
         else
         sprintf(test.ul_buf,"L: %2.3f g&",test.ul);
         sprintf(test.al_buf," %3.0f&",test.al);
         if(test.ur>=100.0)
         sprintf(test.ur_buf,"R: %4.1f g&",test.ur);
         else
         sprintf(test.ur_buf,"R: %2.3f g&",test.ur);
         sprintf(test.ar_buf," %3.0f  &",test.ar);
         re_scr=1;
         }
       }



           void menu_key(void)
           {
            uchar xdata c,i;
            menu_test=1;
            cp=0;
            re_scr=1;
            switch(menu_state)
            {
            case 1:
            menu_state=0;
            break;
            case 2:
            menu_state=1;
            break;
            case 3:
            menu_state=1;
            break;
            case 4:
            menu_state=3;
            break;
            case 5:
            menu_state=4;
            break;
            case 6:
            menu_state=5;
            break;
            case 7:
            menu_state=6;
            break;
            case 8:
            menu_state=7;
            break;
            case 9:
            menu_state=0;
            break;
            case 10:
            menu_state=9;
            break;
            case 11:
            menu_state=9;
            break;
            case 12:
            menu_state=0;
            break;
            case 13:
            menu_state=0;
            break;
            case 14:
            menu_state=1;
            break;
            case 15:
            menu_state=1;
            break;

            }
           }



         void menu(void)     /*主菜单*/
        {
         switch(menu_state)
         {
          case 0:
          state00();
          break;
          case 1:
          state01();
          break;
          case 2:
          state02();
          break;
          case 3:
          state03();
          break;
          case 4:
          state04();
          break;
          case 5:
          state05();
          break;
          case 6:
          state06();
          break;
          case 7:
          state07();
          break;
          case 8:
          state08();
          break;
          case 9:
          state09();
          break;
          case 10:
          state10();
          break;
          case 11:
          state11();
          break;
          case 12:
          state12();
          break;
          case 13:
          state13();
          break;
          case 14:
          state14();
          break;
          case 15:
          state15();
          break;
         }
        }
             void caluxy(void)
             {
              uchar i,j;
              j=0;
              start:
              j++  ;
              EX1=0;
              ulx_new=(float)u_ad[0];
              uly_new=(float)u_ad[1];
              urx_new=(float)u_ad[2];
              ury_new=(float)u_ad[3];
              EX1=1;
              test.ul=ulx_new*ulx_new+uly_new*uly_new;
              test.ur=urx_new*urx_new+ury_new*ury_new;

              if(test.ul>4000000)
              {
                     if(gain_l==3)   gainl_new=2;
                else if(gain_l==2)   gainl_new=0;
                else if(gain_l==0)   gainl_new=1;
              }
              else if(test.ul<22500)
              {
                     if(gain_l==1)   gainl_new=0;
                else if(gain_l==0)   gainl_new=2;
                else if(gain_l==2)   gainl_new=3;
              }
              if(test.ur>4000000)
              {
                     if(gain_r==3)   gainr_new=2;
                else if(gain_r==2)   gainr_new=0;
                else if(gain_r==0)   gainr_new=1;
              }
              else if(test.ur<22500)
              {
                     if(gain_r==1)   gainr_new=0;
                else if(gain_r==0)   gainr_new=2;
                else if(gain_r==2)   gainr_new=3;
               }
            if((gain_l!=gainl_new)||(gain_r!=gainr_new))
            {
              GAINL=gainl_new;
              GAINR=gainr_new;
              gain_l=gainl_new;
              gain_r=gainr_new;
              i=0;
              sec1s=0;
              while(i<4)
              {
               if(sec1s==1)
                {
                 i++;  sec1s=0;  beep();
                }
              }
              data_redy=0;
              while(data_redy==0){};
              if(j<4)    goto start;  
            }


        /*    EX1=0;
              ulx_new=u_ad[0];
              uly_new=u_ad[1];
              urx_new=u_ad[2];
              ury_new=u_ad[3];
              EX1=1;
              ulx_ave+=ulx_new;
              uly_ave+=uly_new;

⌨️ 快捷键说明

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