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

📄 dph.c

📁 动平衡机 51单片机
💻 C
📖 第 1 页 / 共 5 页
字号:
        #include  <stdlib.h>
        #include  <stdio.h>
        #include  <reg51.h>
        #include  <string.h>
        #include  <absacc.h>
        #include  <math.h>
        #include  <stdarg.h>

        #define   uchar  unsigned char
        #define   uint   unsigned int
        #define   ulong  unsigned long
        #define   long   long     int

        #define   LCDS  XBYTE[0x2000]      
        #define   LCDD  XBYTE[0x2001]
        #define   LCDB  XBYTE[0x2002]
        #define   LCDR  XBYTE[0x2003]

        #define    IOS  XBYTE[0x6803]
        #define   BITIO XBYTE[0x6802]
        #define   GAINR XBYTE[0x7000]
        #define   GAINL XBYTE[0x7800]
        #define   KEYC  XBYTE[0x6800]
        #define   KEYR  XBYTE[0x6801]
        #define   ADLB  XBYTE[0x6001]
        #define   ADHB  XBYTE[0x6002]
        #define   POW1  XBYTE[0x8100]
        #define   POW2  XBYTE[0x8101]
        #define   LIGK  XBYTE[0x8150]


        #define  V_TH0  0x9e
        #define  V_TL0  0x65
        #define  MENU   0x00
        #define  ENTER  0x03
        #define  STOP   0x04
        #define  START  0x05
        #define  SPEED  0x06

        uchar code wel[16]="Welcome Use It!&";
        uchar code sim_inf[18]="Siming! MENU-Ret&";
        uchar code f_b_inf[18]="ENT:OK  MENU:Ret&"; 
        uchar code ret_menu[18]=" Press MENU Ret!&";
        float code k_gain[4] ={0.5,0.1,1.0,10.0};

        uchar  code code_buf[36][17]={
                         " 1:Set   2:F/B &"," 3:Mode  4:Sim &", /* 00 */  
                         "    Set-Para   &","    File_No.   &", /* 01 */
                         "     No. 00    &","  Load    Save &", /* 02 */
                         "Speed 2000 r/Min&","Error 2000 r/Min&", /* 03 */
                         "KL_g=1.0000 g/mv&","KR_g=1.0000 g/mv&", /* 04 */
                         "  KL_R=+0.0000 &","  KR_L=+0.0000 &", /* 05 */
                         " L_r= 100  mm  &"," R_r= 100  mm  &", /* 06 */
                         "  A = 100  mm  &","  B = 100  mm  &", /* 07 */
                         "  C = 1000 mm  &","  M = 00.0 Kg  &", /* 08 */
                         " 1:L_Fl  2:R_Fl&"," 3:L_Bd  4:R_Bd&", /* 09 */
                         " L: 10.0  g    &"," E:Start  M:Ret&", /* 10 */
                         " R: 10.0  g    &"," E:Start  M:Ret&", /* 11 */
                         " Test_T: 01    &","    Add: +     &", /* 12 */
                         "   On   Off    &","   Run__Sim    &", /* 13 */
                         "     No. 00    &"," E:Ok  M:Cancel&", /* 14 */
                         "     No. 00    &"," E:Ok  M:Cancel&",/* 15 */
                         "Password: 00000&"," E:Ok  M:Cancel&"};/* 15 */


        uchar  code   site_cp[20]={0x00,0x03,0xc1,0x06,0x05,0x07,0x06,
                                   0x06,0x06,0x00,0x04,0x04,0x09,0x02,
                                   0x09,0x09};
         

        sbit   bsy=ACC^7   ;
        sbit   P1_0=P1^0   ;
        sbit   P1_1=P1^1   ;
        sbit   P1_2=P1^2   ;
        sbit   P1_3=P1^3   ;
        sbit   P1_4=P1^4   ;
        sbit   P1_5=P1^5   ;
        sbit   P1_6=P1^6   ;
        sbit   P1_7=P1^7   ;
        sbit   P3_2=P3^2   ;
        
        bit    pw          ;
        bit    run_k       ;
        bit    light       ;
        bit    fir         ;
        bit    keybit      ;
        bit    lock        ;
        bit    sim         ;
        bit    prod        ;
        bit    menu_test   ;
        bit    stop        ;
        bit    re_scr      ;
        bit    sec1s       ;
        bit    data_redy   ;
        bit    kl_r_sign   ;
        bit    kr_l_sign   ;

        uchar  time        ;
        uchar  key         ;
        uchar  cp          ; 
        uchar  menu_state  ;
        uchar  test_state  ;

        uchar  xdata lcd_buf[36][18];
        uchar  xdata first[3]      ;
        uchar  xdata save_num;
        uchar  xdata ch            ;
        uchar  xdata ch_n          ;
        uchar  xdata gain_l        ;
        uchar  xdata gain_r        ;
        uchar  xdata gainl_new     ;
        uchar  xdata gainr_new     ;

        uchar  xdata add           ;
        uchar  xdata power[3]      ;
        uchar  xdata set_buf[12]   ;
        uchar  xdata disp_buf[12]  ;
        uchar  xdata ul_sim_buf[9] ;
        uchar  xdata ur_sim_buf[9] ;
        uchar  xdata fb_buf[16];
        uchar  xdata ad_count      ;
        uint   xdata r_sp;
        int    xdata sp_error      ;

        int    xdata save_no       ;
        int    xdata load_no       ;
        int    xdata u_ad[4]       ;
        int    xdata ulx[30]       ;
        int    xdata uly[30]       ;
        int    xdata urx[30]       ;
        int    xdata ury[30]       ;
        long   xdata ulx_ave       ;
        long   xdata uly_ave       ;
        long   xdata urx_ave       ;
        long   xdata ury_ave       ;
        float  xdata ulx_new       ;
        float  xdata uly_new       ;
        float  xdata urx_new       ;
        float  xdata ury_new       ;

        float  xdata ulx_sim       ;
        float  xdata uly_sim       ;
        float  xdata urx_sim       ;
        float  xdata ury_sim       ;
        float  xdata kl_r_abs      ;
        float  xdata kr_l_abs      ;
        float  xdata gml           ;
        float  xdata gmr           ;
        float  xdata set           ;

        struct   para      {
               float   kfl    ;
               float   kfr    ;
               float   kbl    ;
               float   kbr    ;
               float   m      ;
               int     speed  ;
               int     range  ;
               int     no     ; 
               int     a      ;
               int     b      ;
               int     c      ;
               int     L_r    ;
               int     R_r    ;
               int     t      ;
              }xdata compen,xdata save_para[100];

           struct  test_data {
               float   ul_x  ;
               float   ul_y  ;
               float   ul    ;
               float   al    ;
               uchar   ul_buf[12];
               uchar   al_buf[8];    
               float   ur_x  ;
               float   ur_y  ;
               float   ur    ;
               float   ar    ;
               uchar   ur_buf[12];
               uchar   ar_buf[8];
               uint    speed ;
               uchar   sp_buf[16];
              }xdata test; 

        uchar  getkey(void)                     ;
        void   lcdset(void)                     ;
        void   lcddsp(char *buf)                ;
        void   busy(void)                       ;
        void   d2ms(void)                       ;
        void   delay(void)                      ;
        void   beep(void)                       ;
        init_sys(bit init)                      ;
        void ini_buf(void)                      ;
        void state00(void)                      ;
        void state01(void)                      ;
        void state02(void)                      ;
        void state03(void)                      ;
        void state04(void)                      ;
        void state05(void)                      ;
        void state06(void)                      ;
        void state07(void)                      ;
        void state08(void)                      ;
        void state09(void)                      ;
        void state10(void)                      ;
        void state11(void)                      ;
        void state12(void)                      ;
        void state13(void)                      ;
        void state14(void)                      ;
        void state15(void)                      ;
        void lrf(void)                          ;
        void caluxy(void)                       ;
        void screen(void)                       ;
        void menu(void)                         ;
        void menu_key(void)                     ;
        void prodata(void)                      ; 

        main()
       {
        bit p;
        P3_2=1;
        lcdset();
        power[0]=POW1;
        power[1]=POW2;
        p=0;
        if(power[0]=='O')
        {
         if(power[1]=='N') p=1;
        }
        if(p==0)
        {
         POW1='O';
         POW2='N';
        }
        if(p==1)
        {
         init_sys(0);
         re_scr=1;
        if(P3_2==0)
        {
         delay();
         if(P3_2==0)
          {
           test_state=0;
           menu_test=0;
           lock=1 ;
           run_k=1;
           key=START;
          }
         }
         else
         {
          test_state=1;
          menu_test=0;
          lock=0 ;
          run_k=0;
          key=SPEED;
          test.speed=0;
         }
        }
        else
        {
         lcddsp(wel);
         init_sys(1);
         do{key=getkey();}while(key==0xff);
         lock=0;
         if(P3_2==0)
         {
          delay();
          if(P3_2==0)
           {
            lock=1 ;
            run_k=1;
           }
          }
         if(key==SPEED)
          {
            test_state=1;
            menu_test=0;
            re_scr=1;
          }
          else
          {
            test_state=0;
            menu_test=0;
            re_scr=1;
            key=START;
          }
         }
        fir=1;
        do
       {
        if(lock==1)
        {
         if(P3_2==1)
         {
          d2ms();d2ms();
          if(P3_2==1)
           {
            lock=0 ;
           }
          }
         }
         else
         {
          if(P3_2==0)
          {
           d2ms();  d2ms();
           if(P3_2==0)
           {
            lock=1;
             if(menu_test==0)
             {
              fir=1;
              if(test_state==0) key=START;
              else
              if(test_state==1) key=SPEED;
             }
            }
           }
         }
         if(fir==0)  key=getkey();
         else        fir=0;
         if(key!=0xff)
        {
          beep();
          keybit=1;
          if(key==MENU)
          {
           menu_key();
           prod=0;
           stop=0;
          }
          else if((key>0x00)&&(key<0x04))
          { 
           if(menu_test==1)
          {
           menu();
           keybit=1;
           }
          }
          else
         {
            if(key==STOP)
           {
            stop=~stop;
           }
           else if(key==START)
           {
             if(P3_2==0)
             {
              d2ms();  d2ms();
              if(P3_2==0)
              { 
               lock=1;
              }
             }
            menu_test=0;
            test_state=0;
            EX1=1;
            prod=1;
            ad_count=1;
            ulx_ave=0;
            uly_ave=0;
            urx_ave=0;
            ury_ave=0;
            re_scr=1;
            cp=0;
           }
           else if(key==SPEED)
           {
             if(P3_2==0)
             {
              d2ms();  d2ms();
              if(P3_2==0)
              { 
               lock=1;
              }
             }
            test_state=1;
            menu_test=0;
            re_scr=1;
            prod=0;
            cp=0;
           }

           else if(key==0x07)
           {
             if(lock==1)  run_k=0;
             else         run_k=~run_k;
             if(run_k==0)
             {
              BITIO=0x04;
              delay();  delay();
              delay();  delay();
              BITIO=0x05;
             }
             else
             {
              BITIO=0x06;
              delay();  delay();
              delay();  delay();
              BITIO=0x07;
             }
           }
           else if(key==0x08)
           {
             if(add=='+')
             {
              add='-'; BITIO=0x02;
                       BITIO=0x01;
              lcd_buf[25][9]=add;

             }
             else
             {
              add='+'; BITIO=0x00;
                       BITIO=0x03;
               lcd_buf[25][9]=add;
             }
             lcd_buf[24][10]=add;
           }
           else if(key==0x09)
           {
           /* print();*/
           }
           else if(key==0x0a)
           {
            light=~light;  
            if(light==1)
            {
             P1_1=0;   LIGK='k';
            }
            else
             P1_1=1;   LIGK=0;
           }

         } 
        }
          if(re_scr==1)
          {
           screen();
           re_scr=0;
          }
          if((lock==1)&&(sec1s==1)&&(menu_test==0))
          {
           prodata();
           data_redy=0;
           sec1s=0;
          }
          if(keybit==1)
          {
           do{
             key=getkey();
             if(key==0xff)
             d2ms();
             key=getkey();
             }while(key!=0xff);
           keybit=0;
          }
        }while(1);
       }

         init_sys(bit init)
         {
          uchar    i,j;
          for(i=0;i<36;i++)
          {
           for(j=0;j<17;j++)
            lcd_buf[i][j]=code_buf[i][j];
          }
          IOS=0x90    ;
          prod=0      ;
          lock=0      ;
          sim=0       ;
          stop=0      ;
          re_scr=1    ;
          sec1s=0     ;
          time=0      ;
          keybit=0    ;
          key=0xff    ;
          cp=0        ; 
          ch=0        ;
          data_redy=0 ;
          menu_test=1 ;
          menu_state=0;
          test_state=0;
          run_k=0     ;
          P3_2=1      ;
          TMOD=0x51   ;
          TCON=0x05   ;
          IE=0x82     ;
          IP=0x03     ;
          TL0=V_TL0;
          TH0=V_TH0;
          TR0=1;
          ET0=1;
          EX0=0;
          EX1=1;
          if((gain_l>3)||(gain_l<0))    gain_l=2;
          if((gain_r>3)||(gain_r<0))    gain_r=2;
          GAINL=gain_l ;
          GAINR=gain_r ;
          gainl_new=gain_l;
          gainr_new=gain_r;

          if(init==1)
          {
            P1_3=0;
            d2ms();  d2ms();
            d2ms();  d2ms();
            P1_3=1;
            light=0;
            ulx_sim=0 ;
            uly_sim=0 ;
            urx_sim=0 ;
            ury_sim=0 ;

⌨️ 快捷键说明

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